您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页完全主元法数值求解线性方程组

完全主元法数值求解线性方程组

来源:飒榕旅游知识分享网


数值分析--线性方程求根

线性方程求根、采用完全主元法,而且能够自定义未知数个数。主程序如下:

#include

#include

#include

double* roots(int n)

{

int i,j,k,row,column,s;//row,column用来保存列中最大数的行和列

double **a,max,temp,m;

double *roots=(double*)calloc(n,sizeof(double));////存放交换顺序后的根

double *order=(double*)calloc(n,sizeof(double));//存放根的顺序

double *result=(double*)calloc(n,sizeof(double));//存放最终的根

1 / 10

for(i=0;i{

order[i]=i;

}

a=(double**)calloc(n,sizeof(double));/////为二维数组申请空间

for(i=0;i{

a[i]=(double*)calloc(n+1,sizeof(double));

}

for(i=0;i{

printf(\"请输入方程第 %d 行增广矩阵\

for(j=0;j2 / 10

{

scanf(\"%lf\j]);

}

}

for(i=0;i{

max=fabs(a[i][i]);

row=i;

column=i;

for(k=i;k{

for(s=i;s{

3 / 10

if(fabs(a[k][s])>max)

{

row=k;

column=s;

max=fabs(a[k][i]);

}

}

}

if(row!=i||column!=i)

{

if(row!=i)

{

for(k=0;k4 / 10

{

temp=a[row][k];

a[row][k]=a[i][k];

a[i][k]=temp;

}

}

if(column!=i)

{

for(k=0;k{

temp=a[k][i];

a[k][i]=a[k][column];

a[k][column]=temp;

5 / 10

}

order[i]=column;/////记录交换后根的顺序

order[column]=i;

}

}

for(j=i+1;j{

m=a[j][i]/a[i][i];

for(k=i+1;k{

a[j][k]-=m*a[i][k];

}

}

6 / 10

}

roots[n-1]=a[n-1][n]/a[n-1][n-1];////////回代过程,计算每个根

for(i=n-2;i>=0;i--)

{

temp=0;

for(j=i+1;j{

temp+=a[i][j]*roots[j];

}

if(a[i][i]==0)

return NULL;

roots[i]=(a[i][n]-temp)/a[i][i];

}

7 / 10

for(i=0;i{

k=order[i];

result[k]=roots[i];

}

for(i=0;i{

free(a[i]);

}

free(a);

free(order);

free(roots);

return result;

8 / 10

}

int main()

{

int m,n,i,j;

double *result;

printf(\"请输入需要求解的方程组个数:\");

scanf(\"%d\

for(j=0;j{

printf(\"请输入第 %d 个方程未知数个数:\

scanf(\"%d\

result=roots(n);

for(i=0;i9 / 10

{

printf(\"第 %d 个根\%16.8e\\n\

}

}

free(result);

return 0;

}

求解老师问题及测试书上一个病态方程:

10 / 10

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务