【问题标题】:How can I compute n+1 in matlab? [closed]如何在 matlab 中计算 n+1? [关闭]
【发布时间】:2013-02-28 22:38:47
【问题描述】:

假设我有矩阵pa 直到pz,如下所示:

pa= [0;0;0;0;0]';
pb=[-0.2;-0.2;-0.2;-0.2;0.8]';
pc=[-1.2;0.4;1.9;2.3;9.0]';
pd=[  ];
pe=[  ];

直到 pz

Va=pa(1);
Vb=pa(2);
Vc=pa(3);
Vd=pa(4);
Ve=pa(5);
vdt=[1;0.309;-0.809;-0.809;0.309]'

然后用这个公式相乘

Vdtransformation=Vdt*[Va;Vb;Vc;Vd;Ve]

我需要乘法

Vdtransformation=Vdt*[Va;Vb;Vc;Vd;Ve] 

但是随着值的改变

Va=pb(1);Vb=pb(2);Vc=pb(3);Vd=pb(4);Ve=pb(5);

再做一次

Va=pc(1);Vb=pc(2);Vc=pc(3);Vd=pc(4);Ve=pc(5);

直到 pz。

有没有更简单的方法?我应该使用bsxfun吗?

【问题讨论】:

  • 尝试doc eval 并阅读文档。
  • @natan 一些指导将不胜感激。

标签: matlab loops matrix conditional


【解决方案1】:

令 P=[pa,pb,...,pz] 是一个有 5 行和字母表中字母个数的矩阵 列。

做 V=Vdt*P。你完成了。 V的每一列是相对于每个pa, pb, ...的Vd变换

【讨论】:

  • 我不喜欢你所说的原因是因为内部矩阵尺寸不同意......
  • @dan,尺寸确实一致!仔细看看!请注意,P 是一个有 5 行的矩阵,字母列中的字母数和 Vdt 为 1x5。因此,V=Vdt(1x5) * P(5xnumberOfLetters);因此,尺寸确实一致!
  • 哎呀对不起..这是我的错误。谢谢
【解决方案2】:

首先,写Vdt*[Va;Vb;Vc;Vd;Ve] 没有任何逻辑,您可以改为写Vdt*pa',这是等效的,或者最好参见@Daniel 的答案。

其次,如果你想循环变量名,你可以使用eval。例如,如果我的变量是:

pa=1;
pb=2;
pc=3;
A=3;

我想计算A*paA*pb等,我可以创建所需字母的字符串

lett=char(97:99); % this creates the string 'abc'

然后for循环"

for i=1:numel(lett)
    A*eval(['p' lett(i)])
end

【讨论】:

  • 你可以看到 pa,pb,pc 等是矩阵..矩阵尺寸不同意
  • 我没有尝试解决你的代码,只是告诉你使用eval的方法。如果你不知道如何解决矩阵维度问题,你应该阅读 matlab 的关于矩阵操作的文档,例如转置等。
猜你喜欢
  • 2012-07-30
  • 1970-01-01
  • 2013-04-04
  • 2021-04-23
  • 2013-04-08
  • 2015-01-29
  • 1970-01-01
  • 2014-09-02
  • 2022-06-17
相关资源
最近更新 更多