求助,一个c++程序
#include<iostream>#include<iomanip>
using namespace std;
const float h=0.01; //步长
const float Tmax=10;//最大时间
void gauss(float arr[][3],int n);
int main(){
//变量说明
float I3[1001],U3[1001],I5[1001],U5[1001];
float YN[2][3];//结点方程的增广阵
float t; //时间变量
int m=2;//阶数
float Gl,Gc;
int k;
//输入电路参数
float Is=1,R2=20,R4=2,L=2,C=0.2;
//计算Gl,Gc
Gl=h/(2*L);
Gc=2*C/h;
//初始值计算
I3[0]=0;U5[0]=1;
I5[0]=(-1-R2)/(R2+R4);
U3[0]=(1-I5[0])*R2;
t=0.01;k=0;
while(t<=Tmax){
//增广阵
YN[0][0]=1/R2+1/R4+Gl;
YN[0][1]=-1/R4;
YN[1][0]=-1/R4;
YN[1][1]=1/R4+Gc;
YN[0][2]=Is-I3[k]-Gl*U3[k];
YN[1][2]=I5[k]+Gc*U5[k];
//调用gauss函数,解方程
gauss(YN,m);
U3[k+1]=YN[0][2];
U5[k+1]=YN[1][2];
//计算下一次初值
I3[k+1]=Gl*U3[k+1]+I3[k]+Gl*U3[k];
I5[k+1]=Gc*(U5[k+1]-U5[k])-I5[k];
//时间变量增加一个步长,k加1
t=t+h;
k++;
}
//每隔20个时间点输出
cout<<"T(s)"<<setw(15)<<"IL3(A)"<<setw(15)<<"UC5(V)"<<endl;
for(k=0;k<=1000;k++){
if(k%20==0){
cout<<k*h<<setw(15)<<I3[k]<<setw(15)<<U5[k]<<endl;
}
}
return 0;
}
//gaus function
void gauss(float arr[][3],int n){
int m;
m=n+1;
int i,j,k;
//消元
float a;
for(k=0;k<=n-2;k++){
for(i=k+1;i<=n-1;i++){
a=arr[i][k]/arr[k][k];
for(j=0;j<=n;j++){
arr[i][j]=arr[i][j]-a*arr[k][j];
}
}
}
//回代求解
arr[n-1][n]=arr[n-1][n]/arr[n-1][n-1];
for(j=n-1;j>=1;j--){
for(i=j-1;i>=0;i--){
arr[i][n]=arr[i][n]-arr[i][j]*arr[j][n];
}
arr[j-1][n]=arr[j-1][n]/arr[j-1][j-1];
}
}
这是一个解电路计算的程序,计算最后一次值U3[1000],U5[1000]时,结果不对,不知道怎么回事,请大侠帮忙看看