首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Basic中的Gauss Jordan方法

Basic中的Gauss Jordan方法
EN

Stack Overflow用户
提问于 2015-01-24 13:57:37
回答 1查看 1.1K关注 0票数 0

我有一个需要解析的多维数组,用于求解未知值(x1、x2、x3、.)。在这个多维数组中,i和j坐标下的数组大小是不同的。我知道这个基本的C,Gauss Jordan方法来解决未知,是不正确的,并希望有人指点如何修改它。

对于只有相同的n值的数组,此代码是准确的;例如。一个。

代码语言:javascript
复制
//Computation to solve
for(j=0; j<=n; j++)
{
    for(i=0; i<=n; i++)
    {
        if(i!=j)
        {
            c=B[i][j]/B[j][j];                    
            for(k=0;k<=n+1;k++)
            {
                B[i][k] = B[i][k] - c*B[j][k];
            }
        }
    }
}

//Print Solution
printf("\nThe solution is:\n");
for(i=0; i<=n; i++)
{
    x[i]=B[i][n+1]/B[i][i];
    printf("\n x%d=%.3f\n",i,x[i]);
}

例如,如果我的n=2,我想要解决的数组是B2。

代码语言:javascript
复制
0  -20  0  -1
0  30  -10  0
0  -10  10  1

此代码的输出为

代码语言:javascript
复制
x1= -inf 
x2=0.050
x3=0.000

正确的输出应该是

代码语言:javascript
复制
x1=0.00
x2=0.05
x3=0.15
EN

回答 1

Stack Overflow用户

发布于 2015-08-07 11:00:18

对于只有相同的n值的数组,此代码是准确的;例如。一个。

不,代码已经在循环中记录了列n+1 (该列包含右常量)。

代码语言:javascript
复制
            for(k=0;k<=n+1;k++)
            {
                B[i][k] = B[i][k] - c*B[j][k];
            }

(因为k一直运行到n+1)。因此,这是正确的。

例如,如果我的n=2,我想要解决的数组是B2。

C数组是通过指定数组中的元素数(而不是最高索引)来声明的,因此您需要B[3][4]

所示代码的主要错误是缺少行交换操作 (如果B[j][j]为零可能是必要的),以及相关的测试。我们可以通过插入

代码语言:javascript
复制
        if (!B[j][j])
        {
            for (i=j+1; i<=n; i++)
                if (B[i][j]) { swap(B[j], B[i]); break; }
            if (!B[j][j]) continue; // leave all-zero column as is
        }

for(j=0; j<=n; j++)循环主体的开头(实现swap()留给阅读器)。

正确的输出应该是 x1=0.00

这是否正确是值得商榷的,但如果您想要一个变量,其中每个数字都是一个求值为零的解决方案,则可以插入

代码语言:javascript
复制
        if (B[i][i] == 0 && B[i][n+1] == 0) x[i] = 0;

printf("\n x%d=%.3f\n",i,x[i])之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28126232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档