MatLab 三角线性方程组
MatLab Triangular system of linear equations
我在 Octave 中遇到 MatLab 问题
我需要编写一个程序,使用回代法求解三角线性方程组 (https://i.stack.imgur.com/ETPxn.png)
我的代码有问题,Octave 显示此错误:
error: =: nonconformant arguments (op1 is 1x1, op2 is 2x2)
error: called from
backsub at line 6 column 10
prog31 at line 3 column 1
run at line 93 column 5
这是我的代码:
Backsub 函数 (backsub.m)
function X = backsub(A,B)
n = length(B);
X = zeros(n, 1);
X(n) = B(n)./A(n,n);
for k = n-1:-1:1
X(k) = (B(k)-A(k,k+1:n)+X(k+1:n))./A(k,k);
end
主要功能(prog31.m)
A = [3 -2 1 -1; 0 4 -1 2; 0 0 2 3; 0 0 0 5];
B = [8; -3; 11; 15];
X = backsub(A, B);
disp(X);
您在 for
循环中将 *
错误输入为 +
,因此出现错误。这是修复:
function X = backsub(A,B)
n = length(B);
X = zeros(n, 1);
X(n) = B(n)/A(n,n); % remove . because A(n,n) is scalar
for k = flip(1:n-1)
X(k) = (B(k)-(A(k,k+1:n)*X(k+1:n)))/A(k,k); % remove . and replace + with *
end % end the for loop
end
附带说明:for
循环中的乘积是点积,因为 A(k,k+1:n)
是行向量,而 X(k+1:n)
是适当大小的列向量。
如果您想逐字使用提供的公式(带有总和),它将是
X(k) = (B(k)-sum(A(k,k+1:n)'.*X(k+1:n)))/A(k,k);
我在 Octave 中遇到 MatLab 问题 我需要编写一个程序,使用回代法求解三角线性方程组 (https://i.stack.imgur.com/ETPxn.png) 我的代码有问题,Octave 显示此错误:
error: =: nonconformant arguments (op1 is 1x1, op2 is 2x2)
error: called from
backsub at line 6 column 10
prog31 at line 3 column 1
run at line 93 column 5
这是我的代码:
Backsub 函数 (backsub.m)
function X = backsub(A,B)
n = length(B);
X = zeros(n, 1);
X(n) = B(n)./A(n,n);
for k = n-1:-1:1
X(k) = (B(k)-A(k,k+1:n)+X(k+1:n))./A(k,k);
end
主要功能(prog31.m)
A = [3 -2 1 -1; 0 4 -1 2; 0 0 2 3; 0 0 0 5];
B = [8; -3; 11; 15];
X = backsub(A, B);
disp(X);
您在 for
循环中将 *
错误输入为 +
,因此出现错误。这是修复:
function X = backsub(A,B)
n = length(B);
X = zeros(n, 1);
X(n) = B(n)/A(n,n); % remove . because A(n,n) is scalar
for k = flip(1:n-1)
X(k) = (B(k)-(A(k,k+1:n)*X(k+1:n)))/A(k,k); % remove . and replace + with *
end % end the for loop
end
附带说明:for
循环中的乘积是点积,因为 A(k,k+1:n)
是行向量,而 X(k+1:n)
是适当大小的列向量。
如果您想逐字使用提供的公式(带有总和),它将是
X(k) = (B(k)-sum(A(k,k+1:n)'.*X(k+1:n)))/A(k,k);