【问题标题】:Matrix multiplication and differences矩阵乘法和差分
【发布时间】:2018-11-12 10:32:21
【问题描述】:

我需要用 MATLAB 计算这个方程:

Sn 既可以是矩阵也可以是标量,我尝试使用

S_A = S_3*S_5*((ones-(S_1*S_5)).^(-1))*S_2+S_4

问题是它没有给我正确的结果,而且问题似乎与 的差异有关,但我不知道为什么给我错误的结果。

结果应该是这个

但 MATLAB 结果是

我不明白为什么这两个结果不一样。 我想到的唯一方法就是通过这个

diff = ones-(S_1*S_5);
if S_1*S_5 == zeros         %Perchè senza non funziona?
    diff = ones;
else 
    diff = (ones-(S_1*S_5)).^(-1)
end
S_A = S_3*S_5*diff*S_2+S_4;

但我不认为这是一个聪明的解决方案。任何人都知道为什么我没有得到正确的结果?

【问题讨论】:

    标签: matlab matrix matrix-multiplication


    【解决方案1】:

    “我试着用S_A = S_3*S_5*((ones-(S_1*S_5)).^(-1))*S_2+S_4来做”

    这里的问题是 A^(-1) 在数学符号中的意思是“取反”,而您使用 A. ^(-1),请注意点,在 MATLAB 的符号中表示“将每个矩阵元素取 -1 次方”。无论如何都要使用inverse of a matrix is not smart in MATLAB,无论是通过inv() 还是^(-1),都可以使用mldivide

    S_A = S_3*S_5*(eye(size(S_1*S_5,1))-(S_1*S_5))\S_2+S_4
    

    另外,正如Brice's answer 中提到的,使用eye,而不是ones 创建一个单位矩阵,并为其提供一个大小参数,而不是什么都没有。总而言之,在我看来,您似乎对基本的 MATLAB 功能没有牢牢掌握,所以我想向您指出 The MathWorks own tutorial on MATLAB

    【讨论】:

      【解决方案2】:

      ones 输出一个用 1 填充的矩阵,而不是函数eye 给出的恒等矩阵。 您还需要指定oneseye 的大小,否则它将简单地输出一个标量1(即一个用1 填充的1×1 矩阵,或1×1 单位矩阵)。

      尝试(假设所有矩阵的大小相同):

      siz=length(S_1);
      S_A = S_3*S_5*((eye(siz)-(S_1*S_5))^(-1))*S_2+S_4
      

      【讨论】:

      • 这正是我所做的,阿德里安。我用^(-1) 替换了.^(-1),因为当S_1*S_5 = 0 出现1/0 问题时,.^(-1) 没有这个问题。看来你解决了我的问题。非常感谢!
      • 确实,我错过了元素方面的操作。
      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多