【问题标题】:Simpson 1/3 rule辛普森 1/3 法则
【发布时间】:2018-08-18 14:36:53
【问题描述】:

问题的解决方案是辛普森 1/3 规则的 1.732400451459101。相反,程序给我的解决方案是 1.73239801

谁能帮帮我?提前致谢。

clc
clear
close all

f = @(x) sin(x);
a = 0.1; 
g = a;
b = 2.4;
k = 19;   

n = 2*k;
S = 0;
h = (b-a)/n;

for i=1:k
    S=S+(h/3)*(f(a)+4*f(a+h)+f(a+2*h));
    a=a+2*h;

end

fprintf('La integral se aproxima a: %0.8f \n',S)

syms x

y = sin(x);

InT = int(y,g,b);

InT = double(InT)

【问题讨论】:

  • 辛普森规则以数值方式计算积分,也就是说,它是积分真实值的近似。为了提高准确性,您可以增加步数k
  • "问题的解决方案是辛普森 1/3 规则的 1.732400451459101。"如何?有多少步?步骤之间的数值精度是多少?当两个答案如此接近时,通常它们并没有真正的不同。

标签: matlab simpsons-rule


【解决方案1】:

Composite Simpson's rule 近似积分的误差为:

f(x)=sin(x) 的情况下大约是1.7149e-07,这意味着绝对误差范围是9.8990e-08,这对我来说是可以接受的。

此外,这里是上面代码的替代方案:

f = @(x) sin(x);
[a,b,g,k]=deal(0.1,2.4,0.1,19);
[S,n,h]=deal(0,2*k,(b-a)/(2*k));
for i=1:k
    S=S+(h/3)*(f(g)+4*f(g+h)+f(g+2*h));
    g=g+2*h;
end

或者,我们可以直接调用:

f = @(x) sin(x);
[a,b,k]=deal(0.1,2.4,19);
Int = a:(b-a)/(2*k):b;
S=(b-a)/(6*k) * ( f(Int(1)) + 4*sum(f(Int(2:2:end-1))) ...
                + 2*sum(f(Int(3:2:end-2))) + f(Int(end)));

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 2016-01-12
    • 2021-04-19
    • 1970-01-01
    • 2014-01-06
    • 2020-02-26
    • 1970-01-01
    • 2016-05-05
    • 2012-10-19
    相关资源
    最近更新 更多