使用 norm() 时矩阵维度错误
Matrix dimensions error when using norm()
我正在尝试使用 MATLAB 运行 Richardson 的迭代来计算线性系统 Ax=b 的解。我写了一个函数来执行此操作,但是当我尝试 运行 时出现错误。以下是我的函数,其中 x0
是初始迭代,L
是最大迭代次数,A
是非奇异 nxn 矩阵,b
是 n
长度向量,a
代替算法所需的 alpha 参数,tol
是所需的精度级别,x
是 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
都是 n
长度向量。我是不是执行错了?
n = size(b);
产生一个 2 值向量(在您的例子中是 3,1)。所以你不能将单个值除以 2 个值。改成
n = size(b,1)
或 n=size(b,2)
以获得您需要的内容(行或列)。
我正在尝试使用 MATLAB 运行 Richardson 的迭代来计算线性系统 Ax=b 的解。我写了一个函数来执行此操作,但是当我尝试 运行 时出现错误。以下是我的函数,其中 x0
是初始迭代,L
是最大迭代次数,A
是非奇异 nxn 矩阵,b
是 n
长度向量,a
代替算法所需的 alpha 参数,tol
是所需的精度级别,x
是 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
都是 n
长度向量。我是不是执行错了?
n = size(b);
产生一个 2 值向量(在您的例子中是 3,1)。所以你不能将单个值除以 2 个值。改成
n = size(b,1)
或 n=size(b,2)
以获得您需要的内容(行或列)。