for循环中的函数求和(matlab)

时间:2016-09-15 18:12:49

标签: matlab function for-loop sum

假设我有一个函数f(x) = cos(x)。我想以f(x)

的形式评估g(x) = 1/2*f(0) + sum(1/4*f(a+h*i)) (for i is odd) + sum(3/4*f(a+h*i)) (for i is even except 0 and 10) + 1/2*f(b)

我在下面编写代码,但它没有给出(1/4*f(a+h*i)(for i is odd)3/4*f(a+h*i)(for i is even except 0 and 10)之和的总和。

a=0
h=0.1571
n=10
b=1.5708
for i = 1: n
    simp_int2 = 0;
    simp_int3 = 0;
    simp_int1 = 1/2*f(0)
    if i < n
        if rem(i,2)~=0
            simp_int2 = simp_int2 + 1/4*f(a+h*i)
        end
        if rem(i,2)==0
            simp_int3 = simp_int3 + 3/4*f(a+h*i)
        end
    end
    simp_int4 = 1/2*f(b)
end
simp_int = simp_int1 + simp_int2 + simp_int3 + simp_int4

我也尝试过cumsum和symsum。两者都不按我的意图工作。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您正在重复每次迭代时的累积变量。将simp_*初始化移至for循环之外。

具体做法是:

a=0
h=0.1571
n=10
b=1.5708
% Change
simp_int1 = 1/2*f(0);
simp_int2 = 0;
simp_int3 = 0;        
simp_int4 = 1/2*f(b);
for i = 1: n
    if i < n
        if rem(i,2)~=0
            simp_int2 = simp_int2 + 1/4*f(a+h*i)
        end
        if rem(i,2)==0
            simp_int3 = simp_int3 + 3/4*f(a+h*i)
        end
    end
end
simp_int = simp_int1 + simp_int2 + simp_int3 + simp_int4;

答案 1 :(得分:1)

由于你的函数将返回向量输入的向量输出,你可以在没有for循环的情况下执行此操作:

a=0
h=0.1571
n=10
b=1.5708
simp_int = 1/2*f(0) + sum(1/4*f(a + h*[1:2:n])) + sum(3/4*f(a+h*[2:2:n-1])) + 1/2*f(b)