MATLAB:为什么Cramer规则代码中的输出值与x3,x4,x5等相同

时间:2016-09-14 14:16:31

标签: matlab matlab-deployment

我有以下Cramer规则的代码,它完美地工作但是对于阶数大于3的线性方程组,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

您的建议和贡献将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您的b矩阵应该是列向量而不是行向量。

现在你的矩阵b是1x3(应该是3x1),矩阵A是3x3。

执行Ab=[b A(:,2:n)]时,您尝试将1 x 3矩阵b与3 x(n-1)矩阵A(:,2:n)水平连接。

您可以看到,这对于任何n值都不起作用,因为行数不匹配。

尝试使用A =[1,4,5;4,2,5;-3,3,-1]b =[2;3;1]

运行代码

顺便说一句,你应该更好地缩进你的代码。目前还不清楚条件的起点和终点。