MATLAB:“点运算符”与使用“for循环”

时间:2015-01-15 09:02:58

标签: matlab loops for-loop operator-keyword

我是matlab的初学者,所以我在理解区分点运算符和for循环时遇到了一些麻烦。 给定一个列向量(它是一个非常长的列向量)。我们得到以下等式......

  

f(x)= 0.2 * x ^ 3 +(1/3)*(x ^ 2-1)+ 2 * cos(x)+ 3 * cos(10x)

我需要使用点运算符和for循环的方法来创建2个图和时间(使用tic,toc)

然而,使用点运算符意味着使用

  

。^或。*

等式中的

?如果是这种情况,我是否仍然需要使用它来进行for循环? 任何澄清或协助将不胜感激!我真的不明白我会怎么写这些...

3 个答案:

答案 0 :(得分:1)

以点为前缀的运算符称为元素运算符。它对数组的每个元素执行操作(在检查所有涉及的数组具有相同数量的元素之后)。因此,您不需要使用此运算符进行for循环,这是隐含的。这称为矢量化。

例如:

C = A.*B;

相当于:

C = zeros(size(C));
for i=1:numel(A)
    C(i) = A(i)*B(i);
end

但第一个是经过大量优化的。因此,强烈建议尽可能使用矢量化运算符。

答案 1 :(得分:0)

你的x是一个定义长度和步长的矢量,例如它可以是:

x = 1:1:100 %generates 1,2,3....100
x = 1:0.1:10 %generates 0.1,0.2,0.3....10

所以如果你想写一个x函数(它是一个向量),为了速度的目的,你可能想在matlab中使用。*表示的点积。在你的情况下,你可以这样做:

f(x)=0.2.*x.^3 + (1/3).*(x.^2-1) + 2.*cos(x) +3.*cos(10x)

更昂贵的计算方法是使用for循环:

for x = 1:100
  f(x)=0.2*x^3 + (1/3)*(x^2-1) + 2*cos(x) +3*cos(10x)
end
figure
plot(f)

答案 2 :(得分:0)

你的for循环中的问题是你覆盖fx2的值,在每次迭代中你给它一个新的值,但它总是保持1x1的大小。对于代码中的最小更改,您可以执行以下操作:

fx2=[];

for x = A(:,4)

  fx2 = [fx2 0.2*x^3+(1/3)*(x^2-1)+2*cos(x)+3*cos(10*x)];

end

plot(x,fx2)

这样,你在每次迭代时在向量fx2中添加一个新值而不是覆盖,(fx2将是1x1然后是1x2 ......)。但请注意,这根本没有优化,因为有一个可以避免的for循环,但也因为fx2的大小在每次迭代时都会发生变化。另一个更好的解决方案是使用正确的大小预定义fx2,然后在循环中,在第i次迭代时更改其第i个值。