从给定矩阵计算值

时间:2014-03-21 06:45:55

标签: arrays matlab loops

假设我们有以下数组:

a=[12 21 23 10 34 54 10 9 5 6 7 8]

a =

    12    21    23    10    34    54    10     9     5     6     7     8

长度(a)=

length(a)

ans =

    12

现在我要创建以下向量b,其中b(1),b(2)... b(6)如下

b(1)=sqrt(a(1)^2+a(2)^2)
 b(2)=sqrt(a(3)^2+a(4)^2)

 b(3)=sqrt(a(5)^2+a(6)^2))
 b(4)=sqrt(a(7)^2+a(8)^2)
  b(5)=sqrt(a(9)^2+a(10)^2))
 b(6)=sqrt(a(11)^2+a(12)^2)

我写了以下代码

or i=2:2:length(a)
   b(i/2)=sqrt(a(i-1)^2+a(i)^2);
end
>> b

b =

   24.1868   25.0799   63.8122   13.4536    7.8102   10.6301

但我不确定它是否正确,请求帮我澄清我的代码中是否一切正常

1 个答案:

答案 0 :(得分:2)

在matlab中,循环非常慢。使用矢量要快得多。因此我建议没有循环的解决方案:

a_1 = a(1:2:end);
a_2 = a(2:2:end);

b = sqrt(a_1.^2 + a_2.^2);

首先,创建一个向量a_1,其中包含奇数索引为a的所有元素和包含所有带偶数索引的元素的向量a_2。 然后你明智地将它们平方(.^)并取总和的平方。 对于a的例子,这快了75倍。随着数组大小的增加,您将节省更多时间。