回 帖 发 新 帖 刷新版面

主题:请帮忙调试一下   用c语言编程通过高斯算法解线性方程






#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个回复)

沙发

#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;
}

板凳

再帮忙细致改一下,谢谢了。
1〉参数应该怎么传递才可以?

2〉做成增广矩阵我有两种思路
  1)是矩阵直接设为n+1阶,把b向量做为最后一列。那么n+1阶是应该在main函数中 实现?还是在调用的函数中实现?清具体点回答。
  2)是设n阶的矩阵。那么这样的话矩阵大小已经固定,b向量还可以再设为第n列么?对其单独编程运算?

3〉我实验了几个数据,这个程序是在把一个矩阵变换成上三角矩阵的那一部分出错了,b向量的数值根本就没有变动。应该怎么改正呢?  由上三角矩阵再实现输出结果应该是正确的。

急急急 谢谢您的赐教!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册