使用norm()时矩阵尺寸错误

时间:2018-03-28 15:53:44

标签: matlab matrix dimensions equation-solving linear-equation

我尝试使用MATLAB运行Richardson的迭代来计算线性系统的解,Ax = b。我写了一个函数来执行此操作,但在我尝试运行它时遇到错误。以下是我的函数,其中x0是初始迭代,L是最大迭代次数,A是非奇异nxn矩阵,b是{{1} } -length vector,n代替算法所需的alpha参数,a是所需的精度级别,tolx - 长度向量,并且n是实际的迭代次数:

k

我尝试使用以下命令运行此功能:

function [x,k]=Richardson(x0,L,A,b,a,tol)
n = size(b);
x1 = x0 + a*(b-A*x0);
Norm = norm(x1-x0)/sqrt(n);
k = 1;
x0 = x1;
while (Norm > tol) && (k < L)
    x1 = x0 + a*(b-A*x0);
    Norm = norm(x1-x0)/sqrt(n);
    k = k + 1;
    x0 = x1;
end
x = x1;

这是我得到的错误:

x0=[0;0;0];
L = 10;
A=[1,0,0;0,2,0;0,0,4];
b=[1;1;1];
a=-1;
tol=10.^(-5);

a1=Richardson(x0,L,A,b,a,tol)

我不明白这是怎么回事,因为Error using / Matrix dimensions must agree. Error in Richardson (line 4) Norm = norm(x1-x0)/sqrt(n); Error in HW8 (line 11) a1=Richardson(x0,L,A,b,a,tol) x0都是x1 - 长度向量。我是否错误地实施了这个?

1 个答案:

答案 0 :(得分:3)

n = size(b);

结果为2值向量(在您的情况下为3,1)。因此,您不能将单个值除以2个值。改成 n = size(b,1)n=size(b,2)获取您需要的内容(行或列)。

相关问题