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
Matlab 高斯消去法不起作用_Matlab_Function_Equation_Equation Solving - Fatal编程技术网

Matlab 高斯消去法不起作用

Matlab 高斯消去法不起作用,matlab,function,equation,equation-solving,Matlab,Function,Equation,Equation Solving,我试图编写一个程序,使用高斯消去法进行LU分割。我的程序将矩阵A拆分为A=LR,其中L,R是三角矩阵。这非常有效。设Ax=b为方程组。我对程序的输入是(A,b),我想把得到上三角矩阵R的运算应用到b上,就像我们在学校用高斯消去法求解系统一样。那部分似乎不起作用 有人能给我一个提示为什么它不起作用吗 function [ x ] = Gauss( A,b ) n=length(b); for j=1:n-1 if A(j,j)==0 break; end;

我试图编写一个程序,使用高斯消去法进行LU分割。我的程序将矩阵A拆分为A=LR,其中L,R是三角矩阵。这非常有效。设Ax=b为方程组。我对程序的输入是(A,b),我想把得到上三角矩阵R的运算应用到b上,就像我们在学校用高斯消去法求解系统一样。那部分似乎不起作用

有人能给我一个提示为什么它不起作用吗

function [ x ] = Gauss( A,b )
n=length(b);
for j=1:n-1
    if A(j,j)==0
        break;
    end;

    for i=j+1:n
       A(i,j)=A(i,j)/A(j,j);
       b(j)=b(i)-A(i,j)*b(j)

       for k=j+1:n
          A(i,k)=A(i,k)-A(i,j)*A(j,k);
       end
    end
end
 b
end

你说你的代码正确地创建了A的上三角矩阵,但它没有。让我给你举个例子

让A和b分开

A =

 3     2     3     4
 4     3     2     1
 1     0     4     0
 0     5     0     3

b =

 2
 4
 6
 7
如果我们按原样运行代码并查看A和b,我们会得到

A =

3.0000    2.0000    3.0000    4.0000
1.3333    0.3333   -2.0000   -4.3333
0.3333   -2.0000   -1.0000  -10.0000
     0   15.0000  -30.0000 -232.0000


b =

7.0000
-203.0000
187.0000
7.0000
它既不是三角形矩阵,也不是我们期望的b。但如果我们稍微修改一下您的程序:

function [ x ] = Gauss( A,b )
n=length(b);
for j=1:n-1
    if A(j,j)==0
        break;
    end;

    for i=j+1:n
       f=A(i,j)/A(j,j);  %%Save the proportion between the rows in a
                         %%different variable outside the matrix, or
                         %%you will loose the value that was originally there


       b(i)=b(i)-f*b(j);   %%The operation has to be done in the row you are currently working

       for k=1:n    %%You have to make the operation in the full row,
                    %%not only in the remaining columns, also you can 
                    %%make this without a for loop using `:`
                    %%indexing, but if you dont know about it, 
                    %%leave as it is, it works
          A(i,k)=A(i,k)-f*A(j,k);
       end
    end
end
A
b
end
你得到这个结果了吗

A =

3.0000    2.0000    3.0000    4.0000
     0    0.3333   -2.0000   -4.3333
     0         0   -1.0000  -10.0000
     0         0         0 -232.0000


b =

2.0000
1.3333
8.0000
227.0000
这是一个上三角矩阵,和我们想要的b。希望您可以从这里开始,作为参考,接下来的步骤应该如下所示

A =

1.0000    0.6667    1.0000    1.3333
     0    1.0000   -6.0000  -13.0000
     0         0    1.0000   10.0000
     0         0         0    1.0000


b =

0.6667
4.0000
-8.0000
-0.9784
然后

其中A已经是一个恒等矩阵,这意味着b已经是我们的答案,我们可以证实这一点

A\b

ans=

-1.1379
1.9871
1.7845
-0.9784

你会犯哪些错误?我注意到的第一件事是,您从未定义输出变量
x
@JensBoldsen Ups。这本不应该是那样的,但我稍后将使用输出向量。得到的b向量是错误的。我做了一些3x3矩阵的例子,高斯消去后的向量是错误的。Je,我刚刚意识到,若你们完全忽略了A矩阵的左下三角形,那个么你们唯一的错误就是b计算中的索引
j
I的积分。好吧,我希望我说的其余部分仍然对你有所帮助。我可能应该提到我把L和R放在一个矩阵中,这样对角线上方的所有东西(包括对角线本身)都属于矩阵R,而对角线下方的所有东西都属于L。我没有在对角线中存储L的1,因为没有必要。正如你所指出的,我用b向量修复了这个部分,现在它似乎开始工作了。不管怎样,谢谢。是的,只要您跟踪数据在哪里,就没有任何问题。很高兴我能提供帮助,请将您的问题设置为已回答,以便关闭
A\b

ans=

-1.1379
1.9871
1.7845
-0.9784