主题:请帮忙调试一下 用c语言编程通过高斯算法解线性方程
sweetring
[专家分:0] 发布于 2006-04-01 20:55:00
#include<stdio.h>
#include<math.h>
#define MAX 100
#define LIM 0.000000001
int gaosisuanfa( int MAX, double a[MAX][MAX], double b[MAX])
{
int i,j,k;
for(i=0;i<n;i++)
{
if(fabs(a[i][i]<LIM))
return 1;
for(j=i+1;j<n;j++)
for(k=i;k<n;k++)
a[j][k]=a[j][k]-a[i][k]*(a[j][i]/a[i][i]);
b[i]=b[i]-b[k]*(a[j][i]/a[i][i]);
}
// printf("输出数组a");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d",a[i][j]);
//printf("输出向量b");
//for(i=0;i<n;i++)
printf("%d",b[i]);
}
b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
for(j=n-1;j>i;j--)
b[i]=b[i]-a[i][j]*b[j];
b[i]=b[i]/a[i][i];
}
return 0;
}
void main()
{
int i,j,k,n;
double a[MAX][MAX],b[MAX];
printf("输入n值");
scanf("%d",&n);
printf("输入数组a");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("输入向量b");
for(i=0;i<n;i++)
scanf("%d",&b[i]);
gaosisuanfa(n,a,b);
}
回复列表 (共2个回复)
沙发
narsh [专家分:790] 发布于 2006-04-02 12:27:00
#include<stdio.h>
#include<math.h>
#define MAX 100
#define LIM 0.00001
int gaosisuanfa(int n,double a[MAX][MAX],double b[MAX])//常量不能作为函数参数
{
int i,j,k;
for(i=0;i<n;i++)
{
if(fabs(a[i][i])<LIM)continue;//////////////函数调用错误
for(j=i+1;j<n;j++)
for(k=i;k<n;k++){
a[j][k]=a[j][k]-a[i][k]*(a[j][i]/a[i][i]);
b[i]=b[i]-b[k]*(a[j][i]/a[i][i]);}/////////////////加上{}
}//得到上三角式,下面是将其输出
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%lf\t",a[i][j]);
printf("%lf\n",b[i]);
}//你下面的代码是错误的,你自己搞定吧
/*
for(i=0;i<n;i++)b[n-]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
for(j=n-1;j>i;j--)
b[i]=b[i]-a[i][j]*b[j];
b[i]=b[i]/a[i][i];
}*/
return 0;
}
int main()
{
int i,j,n;
double a[MAX][MAX],b[MAX];
printf("输入n值");
scanf("%d",&n);
printf("输入数组a");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);///////////double的输入应该是“%lf”
printf("输入向量b");
for(i=0;i<n;i++)
scanf("%lf",&b[i]);
gaosisuanfa(n,a,b);
return 1;
}
板凳
sweetring [专家分:0] 发布于 2006-04-03 19:52:00
再帮忙细致改一下,谢谢了。
1〉参数应该怎么传递才可以?
2〉做成增广矩阵我有两种思路
1)是矩阵直接设为n+1阶,把b向量做为最后一列。那么n+1阶是应该在main函数中 实现?还是在调用的函数中实现?清具体点回答。
2)是设n阶的矩阵。那么这样的话矩阵大小已经固定,b向量还可以再设为第n列么?对其单独编程运算?
3〉我实验了几个数据,这个程序是在把一个矩阵变换成上三角矩阵的那一部分出错了,b向量的数值根本就没有变动。应该怎么改正呢? 由上三角矩阵再实现输出结果应该是正确的。
急急急 谢谢您的赐教!!
我来回复