永发信息网

用c语言编程求线性方程组的解

答案:3  悬赏:60  手机版
解决时间 2021-04-03 13:24
用c语言编程求线性方程组的解
最佳答案
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
int rgauss(n,a,b)
int n;
double a[],b[];
{ int *js,l,k,i,j,is,p,q;
double d,t;
js=malloc(n*sizeof(int));
l=1;
for (k=0;k<=n-2;k++)
{ d=0.0;
for (i=k;i<=n-1;i++)
for (j=k;j<=n-1;j++)
{ t=fabs(a[i*n+j]);
if (t>d) { d=t; js[k]=j; is=i;}
}
if (d+1.0==1.0) l=0;
else
{ if (js[k]!=k)
for (i=0;i<=n-1;i++)
{ p=i*n+k; q=i*n+js[k];
t=a[p]; a[p]=a[q]; a[q]=t;
}
if (is!=k)
{ for (j=k;j<=n-1;j++)
{ p=k*n+j; q=is*n+j;
t=a[p]; a[p]=a[q]; a[q]=t;
}
t=b[k]; b[k]=b[is]; b[is]=t;
}
}
if (l==0)
{ free(js); printf("fail\n");
return(0);
}
d=a[k*n+k];
for (j=k+1;j<=n-1;j++)
{ p=k*n+j; a[p]=a[p]/d;}
b[k]=b[k]/d;
for (i=k+1;i<=n-1;i++)
{ for (j=k+1;j<=n-1;j++)
{ p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if (fabs(d)+1.0==1.0)
{ free(js); printf("fail\n");
return(0);
}
b[n-1]=b[n-1]/d;
for (i=n-2;i>=0;i--)
{ t=0.0;
for (j=i+1;j<=n-1;j++)
t=t+a[i*n+j]*b[j];
b[i]=b[i]-t;
}
js[n-1]=n-1;
for (k=n-1;k>=0;k--)
if (js[k]!=k)
{ t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}
free(js);
return(1);
}

徐世良老师的.原地工作全选主元的高斯消元.用的符号有点诡异,而且将矩阵以线性表输入的.
我也写过一个,不过估计你不太喜欢用我的,这个用来解b也是矩阵的.

#include
#include
#include

void swap(double *a,double *b){
double temp;
temp=*a;
*a=*b;
*b=temp;
}

void printMatrix(int n,int m,double **a){
int i,j;
for (i=0;i for (j=0;j printf("\n");
}
}

int rgauss(int n,int m,double **a,double **b){//,double *det){
int *colex,rowex,s,i,j,k;
double d,t;
// *det=1;
s=0;
colex=malloc(n*sizeof(int));
for (k=0;kd=0.0;
for (i=k;ifor (j=k;jt=fabs(a[i][j]);
if (t>d){
d=t;
colex[k]=j;
rowex=i;
}
}
}
if (d+1.0==1.0){
free(colex);
printf("Singular Matrix!\n");
return 0;
}
else{
if (colex[k]!=k){
for (i=0;iswap(a[i]+colex[k],a[i]+k);
s=s+colex[k]-k;
}
if (rowex!=k){
for (j=0;jswap(a[rowex]+j,a[k]+j);
for (j=0;jswap(b[rowex]+j,b[k]+j);
s=s+rowex-k;
}
}
d=a[k][k];
// *det=*det*d;
for (j=k+1;jfor (j=0;jfor (i=k+1;ifor (j=k+1;ja[i][j]-=a[i][k]*a[k][j];
for (j=0;jb[i][j]-=a[i][k]*b[k][j];
}
}

for (i=n-2;i>-1;i--)
for (j=i+1;jfor (k=0;kb[i][k]-=a[i][j]*b[j][k];

colex[n-1]=n-1;

for (i=n-1;i>-1;i--)
if (colex[i]!=i)
for (j=0;j
// if (s&1) *det=-*det;
return 1;
}

void main(){
#define N 2
#define M 1
double input_a[]={1,1,1,2};
double input_b[]={1,2};
double *a[N],*b[N];
int i;
for (i=0;i a[i]=input_a+N*i;
b[i]=input_b+M*i;
}

rgauss(N,M,a,b);
printf("方程解为:\n");
printMatrix(N,M,b);
printf("\n");
}
全部回答
可以用列主元素高斯消去法做。
你去搜一下吧,算法不麻烦,但是我也懒的写了。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
兔子能吃吗?
为什么生活中总是碰到那么多贱人?
农村臭豆子的做法
从潮阳东山路口有什么车直接到谷饶西园车站
3.6*x=0.4
重师研究生就业情况
泉南大街与豫让桥路交叉口的具体位置
微信摇一摇识别歌曲怎么查找以前的记录?
发育期的少年经常肚子疼,有时觉得肠子打结似
如何更加了解当前的科技前沿
OPPOR2010和红米2联通版哪个好?
网友骂鹿晗啥原因
主会场的演讲【】然而分会场也不甘示弱 框内
芙妍莉护肤品哪里有得卖?
在长沙遇到消费问题怎么投诉 怎么维权?
推荐资讯
如何解读《风陵夜话》这一章在《神雕侠侣》里
榆社县河峪乡岩良村民委员会我想知道这个在什
断路器T和R两键是什么意思
校花的贴身高手 里的慕容真 为什么不能被林逸
“诗歌杜甫其三句,乐奏周南第一章。”
优美段落140字左右,那个段落的读后感100字左
百度wwW33ttuu杀毒,点回车了33ttuucom怎么出
成熟的人 是既感性又理性的人吗?
有户口没住房怎么办?
孩子爸爸看护孩子摔伤可以索赔吗
深度冷冻法制取氧气的方法
如果你外甥子外甥女的父母死了生为舅舅和姨妈
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?