-1

假设我有矩阵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吗?

4

2 回答 2

1

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

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

于 2013-03-13T06:40:38.780 回答
1

首先,在写作中没有逻辑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
于 2013-03-13T06:52:12.263 回答