matlab 数值微分和积分

数值微分和积分

数值微分

(1)数值微分和差商

向前差商:
f ′ ( x 0 ) = f ( x 0 + h ) − f ( x 0 ) h f^{'}(x_0) = \frac{f(x_0+h)-f(x_0)}{h} f(x0)=hf(x0+h)f(x0)
向后差商:
f ′ ( x 0 ) = f ( x 0 ) − f ( x 0 − h ) h f^{'}(x_0) = \frac{f(x_0)-f(x_0-h)}{h} f(x0)=hf(x0)f(x0h)
中心差商:
f ′ ( x 0 ) = f ( x 0 + h 2 ) − f ( x 0 − h 2 ) h f^{'}(x_0) = \frac{f(x_0+\frac{h}{2})-f(x_0-\frac{h}{2})}{h} f(x0)=hf(x0+2h)f(x02h)

(2)数值微分的实现

MATLAB提供了求向前差分的函数 diff,其调用格式有三种

  • dx = diff(x):计算向量x的一阶向前差分,dx(i) = x(i+1)-x(i),i=1,2,……,n-1。
  • dx = diff(x,n):计算向量 x 的 n阶向前差分。例如diff(x,2) = diff(diff(x))。
  • dx = diff(A,n,dim): 计算矩阵A的 n 阶差分,dim = 1(默认状态),按列计算差分;dim = 2,按行计算差分。

例1:设 f(x) = sinx,在[0,2π]范围内随机采样,计算 f '(x) 的近似值,并与理论值 f '(x)=cosx进行比较。

x = [0,sort(2*pi*rand(1,5000),2*pi)]
y = sin(x);
f1 = diff(y)./diff(x)
f2 = cos(x(1:end-1))
plot(x(1:end-1),f1,x(1:end-1),f2);
d = norm(f1-f2)			% d= 0.0433,求范数,相接近

数值积分

(1)数值积分基本原理

牛顿-莱布尼兹(Newton-Leibniz)公式:
∫ a b f ( x ) d x = F ( b ) − F ( a ) \int_{a}^{b}{f(x)}dx = F(b)-F(a) abf(x)dx=F(b)F(a)
将积分区间[a,b]分成 n 个子区间 [xi, x_i+1],i = 1,2,……,n,其中x1= a, x_(n+1) = b 这样求定积分问题就分解为下面的求和问题
S = ∫ a b f ( x ) d x = ∑ ∫ x i x i + 1 f ( x ) d x S = \int_{a}^{b}f(x)dx = \sum\int_{x_i}^{x_{i+1}}f(x)dx S=abf(x)dx=xixi+1f(x)dx

(2)数值积分的实现

  • 基于自适应辛普森方法

    [l , n] = quad(filename, a, b, tol, trace)

  • 基于自适应Gauss-Lobatto 方法

    [l , n] = quadl (filename, a, b, tol, trace)

    其中,

    1、filename是被积函数名;

    2、a和b分别是定积分的下限和上限,积分限[a, b] 必须是有限的,不能为无穷大( lnf );

    3、tol 用来控制积分精度,默认时取 tol = 10^-6;

    4、 trace 控制是是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认时 trace = 0;

    5、返回参数 l 即定积分的值, n为被积函数的调用次数。

例2 分别用quad 和 quadl 函数求定积分的近似值,并在相同积分精度下,计较被积函数调用的次数。
∫ 0 1 4 1 + x 2 d x \int_{0}^{1}\frac{4}{1+x^2}dx 011+x24dx

format long
f = @(x) 4./(1+x.^2)
[l,n] = quad(f,0,1,1e-8)
% l =  3.141592653733437
% n = 61

[l,n] = quadl(f,0,1,1e-8)
%l = 3.141592653589806
%n = 48
  • 基于全局自适应积分方法

    l = integral(filename, a, b)

其中

1、l 是计算得到的积分;

2、filename 是被积函数;

3、a和b是积分上下限,积分限可以为无穷大

例3 求定积分
I = ∫ 1 e 1 x 1 − l n 2 x d x I = \int_{1}^{e}\frac{1}{x\sqrt{1-ln^2x}}dx I=1ex1ln2x 1dx

%被积函数文件 fe.m
function f = fe(x)
f = 1./(x.*sqrt(1-log(x).^2));


>>I = integral(@fe,1,exp(1))
I = 1.5708
  • 基于自适应高斯-克朗罗德方法**(计算振荡函数的定积分)**

    [l, err] = quadgk(filename,a,b)

    1、err 返回近似误差范围

    2、其他参数的含义和用法与 quad 函数相同。

    3、积分上下限可以是无穷大(-lnf 或 lnf),也可以是复数,如果积分上下限是复数,则quadgk函数在复平面上求积分

例4、求定积分
∫ 2 π + ∞ 1 x 2 s i n 1 x d x \int_{\frac{2}{\pi}}^{+\infty}\frac{1}{x^2}sin\frac{1}{x}dx π2+x21sinx1dx

% 被积函数文件 fsx.m
function f = fsx(x)
f = sin(1./x)./x.^2

>> I = quadgk(@fsx,2/pi,+Inf)

I =

    1.0000
  • 基于梯形积分法(当不知道/被积函数,只知道部分积分点时)

    已知(xi, yi) (i = 1,2,……,n),且a = x1<x2<x3<……<xn = b

    求 I = ∫ a b f ( x ) d x \int_a^bf(x)dx abf(x)dx 的近似值。

    I = trapz(x,y)

    其中,向量x, y 定义函数关系 y = f(x)。

    trapz 函数采用梯形积分法则,积分近似值为
    I = ∑ i = 1 n − 1 h i y i + 1 + y i 2 I = \sum_{i=1}^{n-1}hi\frac{y_{i+1}+y_i}{2} I=i=1n1hi2yi+1+yi
    其中,hi = x i + 1 x_{i+1} xi+1- x i x_i xi

可以用以下语句实现

sum(diff(x).*(y(1:end-1)+y(2:end))/2)

例5 设x = 1:6, y = [6,8,11,7,5,2],用trapz函数计算定积分。

x = 1:6;
y = [6,8,11,7,5,2];
plot(x,y,'-ko');
grid on
axis([1,6,0,11])
I1 = trapz(x,y)
I2 = sum(diff(x).*(y(1:end-1)+y(2:end))/2)
% I1 = I2 = 35
  • 多重积分的数值求解

    1、求二重积分的数值解 ∫ c d ∫ a b f ( x , y ) d x d y \int_c^d\int_a^bf(x,y)dxdy cdabf(x,y)dxdy

    I = integral2(filename,a,b,c,d)

    I = quad2d(filename,a,b,c,d)

    I = dblquad(filename,a,b,c,d,tol)

  • 求三重积分的数值解 ∫ e f ∫ c d ∫ a b f ( x , y ) d x d y \int_e^f\int_c^d\int_a^bf(x,y)dxdy efcdabf(x,y)dxdy

    I = integral3(filename,a,b,c,d,e,f)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值