Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正向替代不';在C语言中不能像预期的那样工作_C_Matlab_Substitution_Forward - Fatal编程技术网

正向替代不';在C语言中不能像预期的那样工作

正向替代不';在C语言中不能像预期的那样工作,c,matlab,substitution,forward,C,Matlab,Substitution,Forward,我试图编写代码,在线性方程组中查找A,所以我使用了LU分解。现在我有了L和U,为了得到B=Ly中的y,我被困在正向替换中 我用MatLab写了一些工作得很好的代码,但是用C重写代码时,我不能得到同样的结果。所以我想知道是否有人知道我做错了什么,我还不完全习惯C 以下是我在MatLab中的代码: y(1,1) = B(1,1)/L(1,1); for i= 2:n sum=0; sum2=0; for k = 1: i-1 sum = sum + L(i,k

我试图编写代码,在线性方程组中查找A,所以我使用了LU分解。现在我有了L和U,为了得到B=Ly中的y,我被困在正向替换中

我用MatLab写了一些工作得很好的代码,但是用C重写代码时,我不能得到同样的结果。所以我想知道是否有人知道我做错了什么,我还不完全习惯C

以下是我在MatLab中的代码:

y(1,1) = B(1,1)/L(1,1);
for i= 2:n
    sum=0;
    sum2=0;
    for k = 1: i-1
        sum = sum + L(i,k)*y(k,1);
    end
    y(i,1)=(B(i,1)-sum)/L(i,i);
end
其中
L
是我的下三角矩阵,
B
是相同大小的向量,在这种情况下
n
是2498

我的C代码如下:

float sum = 0;

y_prev[0]=B[0]/(float)Low[0][0];

for (int i = 1; i < CONST; i++)
{
    for (int k = 0; k < i-1; k++)
    {
        sum = sum +Low[i][k]*y_prev[k];
    }

    y_prev[i]= (B[i]- sum)/(float)Low[i][i];
}
浮点和=0;
y_prev[0]=B[0]/(浮动)低[0][0];
对于(int i=1;i
代码之间的一个区别在于,您将for循环索引更改为使用C中的基于零的索引(我无法运行MATLAB版本,也没有代码的某些上下文,因此可能存在其他差异)

变量
i
k
的值在C代码中小于1。这正是循环索引所需要的,但是当使用
i
控制
k
上的内部循环中的迭代次数时,会出现问题。这在两个版本的代码中都是
i-1
,尽管
i
的值不同。例如,在外循环的第一次迭代中,内循环在MATLAB代码中运行一次,但在C代码中根本不运行

一个可能的修复方法是将C代码中的内部循环重写为

for (int k = 0; k < i; k++)
{
    sum = sum +Low[i][k]*y_prev[k];
}
for(int k=0;k


第二个区别是,在MATLAB代码中,您正在将
sum
重置为零,但在C代码中没有(MATLAB代码也有一个
sum2
,它似乎没有被使用?)。这将导致
i>0的
y\u prev[i]
的差异
C
float(Low[0][0])
您的意思是
(float)Low[0][0]
?这里的
(float)
应该是类型转换而不是函数。您到底有什么问题?(除了浮子铸件)。如果出现错误,可能是因为我们没有看到数组定义/分配代码。我没有看到代码错误,但输出向量不正确。我马上换演员,谢谢,谢谢!你说得太对了,我完全错过了。不幸的是,我的代码仍然不能正常工作,它给我的第一个结果很好,然后就像总和总是cero://@SDj:我注意到了另一个差异,并将其添加到了答案中-这有帮助吗?不太有帮助(sum2不应该存在,我以前使用过它,但忘了删除它)