【问题标题】:Matrix dimensions error when using norm()使用 norm() 时出现矩阵尺寸错误
【发布时间】:2018-03-28 15:53:43
【问题描述】:

我正在尝试使用 MATLAB 运行 Richardson 的迭代来计算线性系统 Ax=b 的解。我编写了一个函数来执行此操作,但是当我尝试运行它时出现错误。下面是我的函数,其中x0是初始迭代,L是最大迭代次数,A是一个非奇异nxn矩阵,b是一个n-length向量,a在替换算法所需的 alpha 参数,tol 是所需的精度水平,xn-length 向量,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)

我不明白这是怎么回事,因为x0x1 都是n-length 向量。我是否执行不正确?

【问题讨论】:

  • 我强烈建议您学习MATLAB's debugger,这样您就可以查看您的变量是否具有您认为的维度。

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


【解决方案1】:
n = size(b);

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

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2014-04-17
    • 2018-07-13
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2014-03-30
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多