MATLAB:为什么Cramer'中x3、x4、x5等的输出值相同;s规则代码

MATLAB:为什么Cramer'中x3、x4、x5等的输出值相同;s规则代码,matlab,matlab-deployment,Matlab,Matlab Deployment,我有以下克拉默规则的代码,它工作得很好,但对于阶数大于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 fpri

我有以下克拉默规则的代码,它工作得很好,但对于阶数大于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


非常感谢您的建议和贡献。

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

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

当您执行
Ab=[ba(:,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]


顺便说一下,您最好缩进代码。现在还不清楚条件句的起止点。

非常感谢您的更正。它工作得很好。当我将其用于更高阶时,我的X3、X4等都是相同的。这是否意味着它只适用于订单三?例如,矩阵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.8892,-11.0670和-11.0670(为什么是错误的-11.0670两次)这个异常的原因是什么?