怎么样求高斯消去法的解?大家看下 帮帮忙啊
#include <stdio.h> #include <math.h>
void main()
{
int i,j,k,n,l,h,flag;
float a[100][100],b[100],m[100][100],x[100],y[100],z[100],c[100],d,t;
printf("Input n:\n");
scanf("%d",&n);
printf("input a[i][j]:\n");
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
scanf("%f",&a[i][j]);
}
}
printf("input b[i]:\n");
for (i=0;i<n;i++)
{
scanf("%f",&b[i]);
}
/*******运算过程*******/
flag=1;
for (k=0;k<n;k++)
{
/*---选主元素---*/
d=a[k][k];
h=k;
for(l=k;l<n;l++)
{
if(fabs(a[l][k])>fabs(d))
{
d=a[l][k];
h=l;
}
}
if(h!=k)
{
for(j=k;j<n;j++)
{
t=a[h][j];a[h][j]=a[k][j];a[k][j]=t;
}
t=b[k];b[k]=b[h];b[h]=t;
}
if(a[k][k]==0)
flag=0;
/*---具体运算---*/
for (i=k+1;i<n;i++)
{
if(flag==0)
break;
m[i][k]=a[i][k]/a[k][k];
for(j=k;j<n;j++)
{
a[i][j]=a[i][j]-m[i][k]*a[k][j];
}
b[i]=b[i]-m[i][k]*b[k];
}
}
/*******回代过程*******/
if(flag!=0)
{
x[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;(i>0)||(i==0);i--)
{
y[i]=0;
for(j=i+1;j<n;j++)
{
y[j]=y[j-1]+a[i][j]*x[j];
}
x[i]=(b[i]-y[j-1])/a[i][i];
}
/*******输出结果*******/
for(i=0;i<n;i++)
{
printf("x[%d]=%f\n",i,x[i]);
}
}
else
printf("oh my god!\n");
}
-------------------------------------------------------
测试:
1.输入
4
0 0 0 1
0 0 1 1
0 1 1 1
1 1 1 1
1 2 3 4
输出
x[1]=1.000000
x[2]=1.000000
x[3]=1.000000
x[4]=1.000000
2.输入
2
0 0
0 0
1 1
输出
oh my god!
c语言我也是新手,学了一点,考过了就忘光了
由于数值计算方法有这样一道作业
发现上面的有点漏洞
时间比较仓促,没好好化简程序,代码也很简单,算是能算的,但是几乎是不惜一切成本的。- -
急用的就凑合着复制过去吧
—————————————————————————————————————————————————————————————————————————————————
上面是一个高斯消去法的一个程序 我现在需要设计的跟他有点不一样 我只要求多个二元一次方程的解 例如ax+by=c,知道 a,b 和c求x,y
第一个问题: 我想把上面的程序修改下 可是不知道怎么修改才能把所有的x,y的值全部显示出来?
比如说有16个这样的方程 我们就可能得到几组不同的x,y的解 我想要知道怎么样才能把这些解全部显示出来 因为如果我把j改成2的话 就是两行
但是我算出来的结果总是显示两个大家知道怎么显示所有的吗 ?可能不是很难 但我是新手 谢谢啦
第二个问题:再有就是如果我算2x+y=10,x-y=-5, 我不去改变这个程序
我直接输入n=4
2 1 0 0
1 -1 0 0
0 0 0 0
0 0 0 0
然后输入:
10,-5,0,0
也得不到解 请问大家怎么回事 很着急啊 谢谢大家了