matlab求积分的误差,科学网-MATLAB中的数值积分方法-王福昌的博文

news/2024/7/8 13:07:35 标签: matlab求积分的误差

实际应用中在MATLAB里面都有开发好的命令可以使用,如  quad(), quadl(),quad2d(),triplequad() 。需要掌握这些命令的用法。

1. 定积分 trapz(),quad(),quadl()

trapz() 函数采用复化梯形公式求积分,其使用格式为

I = trapz(x,y)

参数x为自变量,y为节点处的值,返回值为积分的近似值。

quad() 函数采用自适应步长是Simpson 求积法,其格式为

I = quad(fun,a,b,tol)

参数 fun 为被积函数 $f(x)$;a,b 分别为变量~$x$ 的积分下限和上限; tol 为积分精度要求,默认为1e-6($10^{-6}$)

计算定积分 $\displaystyle{\int_0^1\dfrac{d x}{1+x^2}}.$

>> I = quad(@(x)1./(1+x.^2),0,1)

I =

0.7854

精确解为 $\dfrac{\,\pi\,}{4}$.

计算二重积分

$$\iint\limits_D\sqrt{|y-x^2|}dxdy,D =\{(x,y)|-1\leqslant x \leqslant 1, 0\leqslant y\leqslant 2\}.$$

>> fun = @(x,y)(sqrt(abs(y-x.^2)))

>> I = dblquad(fun,-1,1,0,2)

I =

3.2375

精确解为 $\dfrac{\,5\,}{3}+\dfrac{\,\pi\,}{2}$.

对于非矩形积分区域,也可以用矩形区域积分来处理,但是需要令超出边界的部分函数值为0.

计算二重积分

$\iint\limits_D\sqrt{1-x^2-y^2}dxdy,D =\{(x,y)|x^2+y^2\leqslant 1\}.$

$$\iint\limits_D\sqrt{1-x^2-y^2}dxdy,D =\{(x,y)|x^2+y^2\leqslant 1\}.$$

>> fun = @(x,y)(sqrt(1-x.^2-y.^2).*(x.^2+y.^2<=1));% 或 fun = @(x,y)(sqrt(max(1-x.^2-y.^2,0)));

>>  I = dblquad(fun,-1,1,-1,1)

I =

2.0944

精确解为 $\dfrac{\,2\,}{3}\pi$.

3. 三重积分 triplequad

triplequad() 是在立方体区域上求三重积分的函数,其格式为

I = triplequad(fun,a,b,c,d,e,f,tol,method)

参数 fun 为三元被积函数 $f(x,y,z)$;a,b 分别为变量 $x$ 的积分下限和上限; c,d 分别为变量 $y$ 的积分下限和上限;e,f 分别为变量~$z$ 的积分下限和上限;tol 为积分精度要求,默认为1e-6($10^{-6}$);method 为求积分的方法,有两种,一种是@quad,另一种是@quadl,默认是@quadl。

计算三重积分$$\iiint\limits_\Omega \bigg[y\sin  x + z\cos x\bigg] d v,\Omega=\{(x,y,z)|0\leqslant x \leqslant\pi, 0\leqslant y\leqslant 1,-1\leqslant z\leqslant 1\}.$$

>> fun = @(x,y,z)(y.*sin(x)+z.*cos(x));

>> I = triplequad(fun,0,pi,0,1,-1,1)

I =

2.0000

对于非立方体的积分区域,可以采用令边界外的函数值为 0 的方法。

计算三重积分$$\iiint\limits_\Omega \bigg|\sqrt{x^2+y^2+z^2-1} \bigg|d v,\quad \Omega=\{(x,y,z)|\sqrt{x^2+y^2}\leqslant z\leqslant 1\}.$$

>> fun = @(x,y,z)(abs(sqrt(x.^2+y.^2+z.^2)-1).*((z<=1)&(z>=sqrt(x.^2+y.^2))));

>> I = triplequad(fun,-1,1,-1,1,0,1)

I =

0.2169

精确解是 $\dfrac{\pi(\sqrt{2}-1)}{6}$,计算误差为 $4.5220\times 10^{-6}$.

转载本文请联系原作者获取授权,同时请注明本文来自王福昌科学网博客。

收藏

分享

分享到:


http://www.niftyadmin.cn/n/1669467.html

相关文章

Node.js中的事件循环(Event Loop),计时器(Timers)以及process.nextTick()

什么是事件循环&#xff08;Event Loop&#xff09;&#xff1f; 事件环使得Node.js可以执行非阻塞I/O 操作&#xff0c;只要有可能就将操作卸载到系统内核&#xff0c;尽管JavaScript是单线程的。 由于大多数现代&#xff08;终端&#xff09;内核都是多线程的&#xff0c;他们…

PowerShell图形化编程1-原理

九叔最近开始做一个基于PowerShell的图形化程序。很多人可能会说了&#xff0c;PowerShell能写个毛的图形化程序&#xff0c;一个脚本语言效率多低啊。其实我也没啥好说的&#xff0c;用PowerShell的好处就是开发简单&#xff0c;实现简单&#xff0c;当然VB也很简单&#xff0…

linux下的oracle中文乱码,linux系统中oracle出现中文乱码怎么办

linux系统中oracle出现中文乱码怎么办发布时间&#xff1a;2020-06-10 10:04:55来源&#xff1a;亿速云阅读&#xff1a;148作者&#xff1a;Leahlinux系统中oracle出现中文乱码怎么办&#xff1f;这篇文章总结了linux系统中oracle出现中文乱码的解决办法&#xff0c;通过这篇文…

Sublime text 3 新手倒腾

Sublime 版本选择 选 sublime text 3 &#xff0c;妥妥的&#xff0c;可以跳转至函数定义&#xff0c;方便查找&#xff0c;最起码这一点非常吸引用户 Sublime插件管理 1.安装插件管理Package ControllCtrl ~调出控制台&#xff0c;复制代码并回车 &#xff08;网上提供的有的…

基于R语言的关联规则实现

1993年&#xff0c;Agrawal等人首先提出关联规则概念&#xff0c;同时给出了相应的挖掘算法AIS&#xff0c;但是性能较差。1994年&#xff0c;他们建立了项目集格空间理论&#xff0c;并依据上述两个定理&#xff0c;提出了著名的Apriori算法&#xff0c;至今Apriori仍然作为关…

Bellman-Ford算法的改进---SPFA算法

传送门&#xff1a; Dijkstra Bellman-Ford SPFA Floyd 1.算法思想 Bellman-Ford算法时间复杂度比较高&#xff0c;在于Bellman-Ford需要递推n次&#xff0c;每次递推需要扫描所有的边&#xff0c;在递推n次的过程中&#xff0c;很多判断是多余的&#xff0c;所以考虑用队列优化…

Linux inl()函数,inl_p()函数 Unix/Linux

outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_p, inw_p, inl_p - 端口I/O描述This family of functions is used to do low level port input and output. The out* functions do port output, the in* functions do…