【问题标题】:MATLAB vectorized code return wrong resultMATLAB矢量化代码返回错误结果
【发布时间】:2013-12-23 10:14:35
【问题描述】:

我正在学习 MATLAB 课程并编写了以下代码。一个是 FOR LOOP,另一个是矢量化。 FOR LOOP 返回正确的结果,但矢量化不返回。谁能告诉我我写错了什么?

应为以下等式。

1 - 1/3 + 1/5 - 1/7 + 1/9 - ... - 1/1003(总和为 0.7849 - 收敛 慢慢到 pi/4)

用于循环

clc
clear
tic
sign = -1;
y=0;
for x=1:2:1003
    sign=-sign;
    y=y+sign/x;
end

disp(['For Loop calculated ' num2str(y), ' and ran for ' num2str(toc)])

使用矢量化

clear
tic
n=1:2:1003;
x=sum(1./n -1./(n+2));
disp(['Vectorization calculated ' num2str(x), ' and ran for ' num2str(toc)])

【问题讨论】:

    标签: matlab vectorization


    【解决方案1】:

    您可以更改您在求和中使用的公式 (as suggested by Luis),或者您可以保留您的公式,只需将您在 n 向量中采用的步长更改为:

    n = 1:4:1003;
    

    【讨论】:

      【解决方案2】:

      在矢量化代码中,将x 行替换为:

      x = sum(1./n .* (-1).^(0:numel(n)-1))
      

      1./n 之后的术语负责交替符号。

      就目前而言,您的代码 sum(1./n -1./(n+2)) 为您提供 1+1/3+1/5+...+1/1003 - (1/3+1/5+...+1/1005 ),即(取消条款后),1-1/1005。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        • 2013-05-01
        • 2017-01-04
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        相关资源
        最近更新 更多