求解积分的数值方法——Matlab实现

本文介绍了复合梯形公式与复合辛普森公式在计算sin(x)/x从0到1区间积分的应用。通过不同采样点数量的实验,展示了这两种方法逼近精确解的效果,并分析了采样点数量增加对积分精度的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求解节分的数值方法

方法主要是以下两种的实现:

  • 复合梯形公式
  • 复合辛普森公式

实现代码见最下方


算法实现

  • 请采用复合梯形公式与复合辛普森公式,计算 sin(x)/x 在[0, 1]范围内的积分。采样点数目为 5、9、17、33。

设计思路

  • 复合梯形公式,利用采样点,每两个相邻的采样点,利用梯形公式计算其积分,最后将所有小部分的积分加在一起
  • 复合辛普森公式,同样是利用采样点,不过每相邻的采样点,在中间再取一个点,三点插值计算该部分的积分,最后加起来

数值实验

  • 复合梯形公式,不同数目采样点的结果与精确解的关系
    这里写图片描述
  • 复合辛普森公式,不同数目采样点的结果与精确解的关系
    这里写图片描述

结果分析

  • 由复合梯形公式的结果可见,采样点数越高,所要求的式子所求积分更加接近于精确解
  • 复合辛普森公式则不同,在本道题题目要求下,采样点越多,一开始越接近精确解,但是当超过一定数目后,远离精确解

实现代码

  • 复合型梯形公式
clear;
format long;
a1 = 0;
b1 = 1;
x = [5,9,17,33];
y(1) = oula(a1, b1, x(1));
y(2) = oula(a1, b1, x(2));
y(3) = oula(a1, b1, x(3));
y(4) = oula(a1, b1, x(4));
for s = 1:4
    z(s) = 0.9460831;
end
y(2,:) = z;
plot(x,y);

function result =  oula(a, b, n)
	
	h = (b-a)/n;
	x = 0.0;
    
	for m = 1:n
		x0 = a + (m-1)*h;
		x1 = a + m*h;
        if(x0 == a) 
            y0 = 1;
        else
            y0 = (sin(x0))/x0;
        end
		y1 = (sin(x1))/x1;
		x = x + y0 + y1;
	end

	result = x * (h/2);
end
  • 复合型辛普森公式
clear;
format long;
a = 0;
b = 1;
x = [5,9,17,33];
y(1) = simpson(a, b, x(1));
y(2) = simpson(a, b, x(2));
y(3) = simpson(a, b, x(3));
y(4) = simpson(a, b, x(4));
for s = 1:4
    z(s) = 0.9460831;
end
y(2,:) = z;
plot(x,y);

function result = simpson(a, b, n)
	h = (b-a)/n;
    y0 = 0.0;
    y1 = 0.0;

	for m = 0:n-1
		x0 = a + m*h;
		x1 = x0 + h/2;
		if(x0 == a) 
            y0 = 1;
        else
            y0 = y0 + (sin(x0))/x0;
        end
		y1 = y1 + (sin(x1))/x1;
	end

	fa = 1;
	fb = (sin(b))/b;
	result = (4*y1 + 2*y0 - fa + fb) * (h/6);
end
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值