我有以下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
您的建议和贡献将受到高度赞赏。
答案 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]
顺便说一句,你应该更好地缩进你的代码。目前还不清楚条件的起点和终点。