2016-09-14 3 views
-5

完全に機能するCramerのルールには次のコードがありますが、3次の線形方程式のシステムではx3の値、x4、x5などは同じです(私が使用した質問からのフォールトではありませんが、コードからのものだと思います)。誰かが私を助けてくれますか?例えばMATLAB:Cramerのルールコードのx3、x4、x5などの出力値が同じ理由

function x=cramer_rule(A,b) 
     A=input('matrix A ='); 
     b=input('vector b ='); 
     n=size(A,1); 
      m=size(A,2); 
     if n~=m 
      fprintf(1, '\n The matrix is not square! \n'); 
      x=[]; 
     else 
    detA=det(A); 
if det(A)~=0 
    x=zeros(n,1); 
    for j=1:n 
     if j~=1 && j~=n 
      Ab=[A(:,1:j-1) b A(:,j+1:n)]; 
     elseif j==1 
      Ab=[b A(:,2:n)]; 
     end 
     x(j)=det(Ab)/detA; 
    end %for j=1:n 
    else 
    fprintf(1, '\n The matrix A has a zero determinant \n'); 
    x=[]; 
    end % if det(A)~=0 
end % if n~=m 

、行列A = [2,5、-9,3、5,6、-4,2; 3、-4,2,7、11,7,4、-8 ]とb = [151; 103; 16; -32]は、x1 = 3、x2 = 5、x3 = -11、x4 = 7の出力を与えると仮定しますが、x3とx4は-11になります。

あなたの提案や投稿は高く評価されます。

答えて

0

b行列は、行ベクトルの代わりに列ベクトルにする必要があります。

ここで、行列bは1x3(3x1である必要があります)、行列Aは3x3です。

Ab=[b A(:,2:n)]すると、1×3の行列bを3×(n-1)の行列A(:,2:n)と水平に連結しようとしています。

これは、行数が一致しないため、nの任意の値に対してはうまくいかないことがわかります。

がちなみにA =[1,4,5;4,2,5;-3,3,-1]b =[2;3;1]

でコードを実行してみてください、あなたはもっと自分のコードをインデントする必要があります。条件の開始と終了の場所は不明です。

+0

ありがとうございました。それは完全に動作します。私は高次のためにそれを使うとき、私のX3、X4などは同じです。それは注文3のためだけに働くという意味ですか?例えば、行列A = [2,5、-9,3; 5,6、-4,2; 3,4,2,7; 11,7,4、-8]およびベクトルb = [151; 103 ; 16; -31] x1 = 3、x2 = 5、x3 = -11、x4 = 7の値を与えると仮定しますが、3.1172,4.9892、-11.0670、-11.0670(なぜ-11.0670が2回間違っているか) この異常の原因は何ですか? – babs

関連する問題