谁能帮忙写一个用高斯消去法解矩阵方程的程序?(100分)

X

xiyu139

Unregistered / Unconfirmed
GUEST, unregistred user!
用c++写一个用高斯消去法解矩阵方程的程序
要求:1,以输入的数判断出方程的阶数
2,所有数据值从文件读入
3,用动态内存分配解决数组大小问题
 
//c数组的首地址,n为方程维数.
float *Colpivot(float *c,int n)
{
int i,j,t,k;
float *x,p;
/*将x分配内存空间,相当于一个含有n个元素一维float类型数组*/
x=(float *)malloc(n*sizeof(float));
/*要执行n-1步才能消去*/
for(i=0;i<=n-2;i++)
{
k=i;
for(j=i+1;j<=n-1;j++)
if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j;
if(k!=i)
/*调换顺序*/
for(j=i;j<=n;j++)
{
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
/*消去*/
for(j=i+1;j<=n-1;j++)
{
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t<=n;t++)
*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
}
}
/*求解*/
for(i=n-1;i>=0;i--)
{
for(j=n-1;j>i+1;j--)
(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
x=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));
}
return x;
}
 
顶部