假设我有一个函数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。两者都不按我的意图工作。谢谢你的帮助!
答案 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)