如何在matlab中计算n + 1?

时间:2013-03-13 05:33:51

标签: matlab loops matrix conditional

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

2 个答案:

答案 0 :(得分:1)

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

V = Vdt * P.你完成了。 V的每列是相对于每个pa,pb,...的Vdtransformation。

答案 1 :(得分: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 i=1:numel(lett)
    A*eval(['p' lett(i)])
end