MATLAB 多项式与微积分

一.多项式和函数
1.多项式的表示:

多项式:an * x^n + a(n-1) * x^(n-1) + ... + a1 * x + a0
MATLAB中表示为:[an a(n-1) ... a1 a0]
  #注意:最后1项一定是a0,第1项是系数不为0的最高次项的系数
  #如果某项的系数为0,也不能省略

#实例:
%多项式x^3 - 2 * x - 5
>> p = [1 0 -2 -5];

2.计算多项式的值:

[<y>[,<delta>]] = polyval(<p>,<x>[,<S>,<mu>]):计算多项式在指定位置的值
  #参数说明:详情参见官方文档
    p:指定多项式(多项式表示方法见上)
    x:指定要计算在哪些位置的值(即多项式中的x的值);为num/num array
    S:使用polyfit()生成的可选输出结构体S来生成误差估计值
    y:返回结果;为num/num array
    delta:使用p(x)预测x处的未来观测值时的标准误差估计值
    mu:使用polyfit()生成的可选输出mu来中心化和缩放数据
      #详情参见官方文档
      #如果要在指定该参数的同时不指定S,S的位置应使用[ ]来占位

#实例:
>> p = [3 2 1];
>> x = [5 7 9];
>> y = polyval(p,x)
y = 1×3

    86   162   262

3.函数的表示:

<f> = @(<x1>[,<x2>...])<func_expr>:定义函数
  #参数说明:
    x1,x2...:指定自变量
    func_expr:指定函数表达式(其中的自变量应∈(x1,x2...))
    f:函数句柄;用于调用函数

#注意:定义函数都是在直角坐标系下进行的,如果要使用极坐标系,需进行如下转换
>> polarfunc = @(theta,r) fun(r.*cos(theta),r.*sin(theta)).*r

@(<x1>,<x2>...)<f>([<x1>,<c1>...]):执行函数
  #参数说明:
    f:之前定义的函数;为函数句柄
    x1,x2...:调用时作为未知数的自变量(即参与运算的自变量)
    c1,c2...:调用时作为常数的自变量(即不参与运算的自变量)
      #但是传入的不一定是常数

#实例:
>> fun = @(x,c) 1./(x.^3-2*x-c);%定义了2个自变量x,c
>> q = integral(@(x)fun(x,5),0,2)%x传入的是未知数x,c传入的是常数5
q =

     -0.4605

二.多项式的微分与积分
1.求多项式的导数:

<k> = polyder(<p>):计算多项式的导数
  #即k(x)=d[p(x)]/dx
  #参数说明:
    p:指定多项式
    k:返回结果
<k> = polyder(<a>,<b>):计算多项式的积的导数
  #即k(x)=d[a(x)*b(x)]/dx
  #参数说明:k同上
    a,b:各指定1个多项式
[q,d] = polyder(<a>,<b>):计算多项式的商的导数
  即q(x)/d(x)=d[a(x)/b(x)]/dx
  #参数说明:
    a:指定分子处的多项式
    b:指定分母处的多项式
    q:结果中分子的部分
    d:结果中分母的部分

#实例:
>> p = [3 0 -2 0 1 5];
>> q = polyder(p)
q = 1×5

    15     0    -6     0     1

>> a = [1 -2 0 0 11];
>> b = [1 -10 15];
>> q = polyder(a,b)
q = 1×6

     6   -60   140   -90    22  -110

>> p = [1 0 -3 0 -1];
>> v = [1 4];
>> [q,d] = polyder(p,v)
q = 1×5

     3    16    -3   -24     1

d = 1×3

     1     8    16

2.求多项式的不定积分:

<q> = polyint(<p>[,<k>]):计算多项式的不定积分
  #参数说明:
    p:指定多项式
    k:指定求不定积分后的常数项;默认为0
      #相当于q中的最后1个元素;即q(x)=polyint(q(x),k)=ployint(p(x))+k
    q:返回结果

#实例:
>> p = [3 0 -4 10 -25];
>> q = polyint(p)
q = 1×6

    0.6000         0   -1.3333    5.0000  -25.0000         0

>> p = [1 0 -1 0 0 1];
>> v = [1 0 1];
>> k = 3;
>> q = polyint(conv(p,v),k)
q = 1×9

    0.1250         0         0         0   -0.2500    0.3333         0    1.0000    3.0000

三.数值微分和积分
1.求差分和近似导数:

<Y> = diff(<X>[,<n>,<dim>]):沿指定维度计算相邻元素间的差分
  #参数说明:
    X:指定n维数组
      如果为长度为m的向量,则返回长度为m-1的向量,Y的元素是X相邻元素间的差分
        #即Y=[X(2)-X(1),X(3)-X(2),...,X(m)-X(m-1)]
      如果为p×m的矩阵,则返回大小为(p-1)×m的矩阵,其元素是X的行之间的差分
        #即Y=[X(2,:)-X(1,:);X(3,:)-X(2,:);...;X(p,:)-X(p-1,:)]
      以此类推
    n:指定求沿指定维度的n阶差分;默认为1
      #在实际操作中,这表示diff(X,2)与diff(diff(X))相同
    dim:指定沿哪个维度计算差分;默认为第1个长度>1的维度
      #如果要指定该参数,则必须指定参数n
    Y:返回结果

#实例:
>> X = [1 1 2 3 5 8 13 21];
>> Y = diff(X)
Y = 1×7

     0     1     1     2     3     5     8

>> X = [1 1 1; 5 5 5; 25 25 25];
>> Y = diff(X)
Y = 2×3

     4     4     4
    20    20    20

>> X = [0 5 15 30 50 75 105];
>> Y = diff(X,2)
Y = 1×5

     5     5     5     5     5

>> X = [1 3 5;7 11 13;17 19 23];
>> Y = diff(X,1,2)
Y = 3×2

     2     2
     4     2
     2     4

%使用差分求导数近似值:
>> h = 0.001;
>> X = -pi:h:pi;
>> f = sin(X);
>> Y = diff(f)/h;%计算1阶近似导数;也可以是Y = diff(f)/diff(X)
>> Z = diff(Y)/h;%计算2阶近似导数
>> plot(X(:,1:length(Y)),Y,'r',X,f,'b',X(:,1:length(Z)),Z,'k')%结果见下图
%蓝线对应原始函数sin(),红线对应1阶导数cos(),黑线对应2阶导数-sin()

在这里插入图片描述
2.求数值积分
(1)策略:求面积法(Quadrature Method)
在这里插入图片描述

#以下方法分割的每个条段都等宽

1.中点策略(Midpoint Rule):布喇格-威廉姆近似(Zeroth-order Approximation)
用矩形的面积近似曲边梯形的面积(见下图1)
2.梯形策略(Trapezoid Rule):一阶近似(First-order Approximation)
用梯形的面积近似曲边梯形的面积(见下图2)
3.1/3辛普森策略(1/3 Simpson's Rule):二阶近似(Second-order Approximation)
用h * (f0 + 4 * f1 + f2)/3某一小段上的积分近似(见下图3)

3种方法比较见下图4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)使用内置函数求数值积分:

<Q> = trapz([<X>,]<Y>[,<dim>]):基于梯形策略计算数值积分
  #参数说明:
    Y:计算Y的近似积分;为arrar/matrix/多维数组
      如果为array,则计算Y的近似积分(见下图)
        此时Y中的元素代表函数的一系列值,或各直边梯形2侧的高
      如果为matrix,则默认对Y列计算每列的积分
      如果为多维数组,则默认对其长度>1的第1个维度求积分
        #该维度的长度变为1,其他维度的长度不变
    X:指定Y中各元素对应的x坐标/梯形(在x轴上)的宽度;分别为array/num
      默认为1,表示梯形(在x轴上)的宽度为1
      如果为array,则length(X)等于Y在第1个长度>1的维度上的长度
      如果为num,则trapz(X,Y) = X * trapz(Y)
    dim:指定沿哪个维度求积分;
      #例如:如果Y为matrix,则trapz(X,Y,2)对Y的每行求积分
    Q:返回结果

#实例:
>> h = 0.05;
>> x = 0:h:2;
>> y = 4 * x.^3
>> s = h * trapz(y)%相当于h * sum((y(1:end-1) + y(2:end)) / 2)
s =

     16.0100

>> X = 0:pi/100:pi;
>> Y = sin(X);
>> Q = trapz(X,Y)
Q =

     1.9998

在这里插入图片描述

<q> = integral(<fun>,<xmin>,<xmax>[,"<Name>",<Value>]):使用全局自适应积分策略和默认误差容限求数值积分
  #这里的数值积分是包括瑕积分和无穷积分在内的广义积分(∞的表示为Inf)
  #参数说明:
    func:指定被积函数;为函数句柄
    xmin:指定积分下限
    xmax:指定积分上限
    q:返回计算结果
    Name,Value:指定其他参数
      如指定"WayPoints",为要使用的积分器指示特定点;为实/复数向量(见下例5)
      指定"ArrayValued"为true以便计算数组值/向量值函数(见下例6)
      "RelTol"和"AbsTol"分别指定相对误差和绝对误差
      "Method"指定方法???(什么方法)

#实例:
>> fun = @(x) exp(-x.^2).*log(x).^2;%定义函数
>> q = integral(fun,0,Inf)
q =

     1.9475

#########################################################
>> fun = @(x,c) 1./(x.^3-2*x-c);
>> q = integral(@(x)fun(x,5),0,2)
q =

     -0.4605

#########################################################
>> fun = @(x)log(x);
>> format long
>> q1 = integral(fun,0,1)
q1 =

  -1.000000010959678

#########################################################
%再次计算积分:使用12位小数精度;将RelTol设为0,以便integral()仅尝试满足绝对误差容限
>> q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
>> q2 =

  -1.000000000000010

#########################################################
>> fun = @(z) 1./(2*z-1);
%通过指定路点,在复平面中从0至1+1i到1-1i至0的三角形路径上计算积分
>> q = integral(fun,0,0,'Waypoints',[1+1i,1-1i])
q =

     -0.0000 - 3.1416i

#########################################################
>> fun = @(x)sin((1:5)*x);
%指定"ArrayValued"为true以便计算数组值/向量值函数的积分
q = integral(fun,0,1,'ArrayValued',true)
q = 1×5

    0.4597    0.7081    0.6633    0.4134    0.1433

#########################################################
>> fun = @(x)x.^5.*exp(-x).*sin(x);
>> format long
q = integral(fun,0,Inf,'RelTol',1e-8,'AbsTol',1e-13)
q = 

 -14.999999999998360

(3)自定义计算数值积分:

  • 使用布喇格-威廉姆近似计算定积分的近似值:
使用sum()进行求和,从而得到近似的积分结果

#实例:计算4 * x^3在[0,2]上的定积分
>> h = 0.05;
>> x = 0:h:2;
>> midpoint = (x(1:end - 1) + x(2:end)) ./ 2;
>> y = 4 * midpoint.^3;
>> s = sum(h * y)
s =

     15.9950

  • 使用二阶近似计算定积分的近似值:
同样使用sum()进行求和,得到定积分的近似值

#实例:
>> h = 0.05;
>> x = 0:h:2;
>> y = 4 * x.^3
>> s = h * (y(1) + 2 * sum(y(3:2:end-2)) + 4 * sum(y(2:2:end)) + y(end)) / 3
s =

     16

3.求重积分
(1)计算2重数值积分:

<q> = integral2(<func>,<xmin>,<xmax>,<ymin>,<ymax>[,"<Name>",<Value>])
  #参数说明:q/func/Name/Value同integral()
    xmin,xmax,ymin,ymax:指定第1/2个变量的积分下限和积分上限

#实例:
%将三角形区域与奇异性在边界处集成:
>> fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 )
fun = function_handle with value:
    @(x,y)1./(sqrt(x+y).*(1+x+y).^2)

>> ymax = @(x) 1 - x;
>> q = integral2(fun,0,1,0,ymax)
q =

     0.2854

#########################################################
%在极坐标中计算2重积分:
>> fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 );
>> polarfun = @(theta,r) fun(r.*cos(theta),r.*sin(theta)).*r;
>> rmax = @(theta) 1./(sin(theta) + cos(theta));
>> q = integral2(polarfun,0,pi/2,0,rmax)
q =

     0.2854

#########################################################
%使用特定方法和误差容限计算参数化函数的2重积分:
>> a = 3; 
>> b = 5;
>> fun = @(x,y) a*x.^2 + b*y.^2;
>> format long
>> q = integral2(fun,0,5,-5,0,'Method','iterated',...
'AbsTol',0,'RelTol',1e-10)
q =

     1.666666666666667e+03

(2)计算3重数值积分:

<q> = integral3(<fun>,<xmin>,<xmax>,<ymin>,<ymax>,<zmin>,<zmax>[,"<Name>",<Value>])
  #参数说明:q/func/Name/Value同integral()
    xim,xmax,ymin,ymax,zmin,zmax:分别指定第1/2/3个参数的积分下限和积分上限

#实例:
>> fun = @(x,y,z) y.*sin(x)+z.*cos(x)
fun = function_handle with value:
    @(x,y,z)y.*sin(x)+z.*cos(x)

>> q = integral3(fun,0,pi,0,1,-1,1)
q =

     2.0000

#########################################################
%在笛卡尔坐标中对单位球面计算积分:
>> fun = @(x,y,z) x.*cos(y) + x.^2.*cos(z)
fun = function_handle with value:
    @(x,y,z)x.*cos(y)+x.^2.*cos(z)

>> xmin = -1;
>> xmax = 1;
>> ymin = @(x)-sqrt(1 - x.^2);
>> ymax = @(x) sqrt(1 - x.^2);
>> zmin = @(x,y)-sqrt(1 - x.^2 - y.^2);
>> zmax = @(x,y) sqrt(1 - x.^2 - y.^2);
>> q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,'Method','tiled')
q =

     0.7796

#########################################################
%计算参数化函数的错误3重积分:
>> a = 2;
>> f = @(x,y,z) 10./(x.^2 + y.^2 + z.^2 + a);
>> format long
>> q1 = integral3(f,-Inf,0,-100,0,-100,0)
q1 =

     2.734244598320928e+03

>> q2 = integral3(f,-Inf,0,-100,0,-100,0,'AbsTol', 0,'RelTol',1e-9)
q2 =

     2.734244599944285e+03

(3)计算4重及以上的数值积分:

依靠嵌套使用上述3个函数:integral(),integral2(),integral3()

#实例:
>> f = @(r,theta,phi,xi) r.^3 .* sin(theta).^2 .* sin(phi);
>> Q = @(r) integral3(@(theta,phi,xi) f(r,theta,phi,xi),0,pi,0,pi,0,2*pi);
>> I = integral(Q,0,2,'ArrayValued',true)
I =

     78.9568

>> I_exact = pi^2*2^4/(2*gamma(2))
I_exact =

     78.9568

四.符号微分与积分
1.微分:

求符号化函数的微分:Y = diff(X[,n])
  #参数说明:
  	X:指定符号化的函数
  	n:指定求n阶微分;默认为1
  	Y:返回结果

#实例:
>> x=sym("x");
>> diff(x^3)
 
ans =
 
3*x^2
 
>> diff(x^3,2)
 
ans =
 
6*x
 

2.积分
(1)不定积分:

求符号化的不定积分:F = int(expr[,var,Name,Value])
  #也可以求多重不定积分
  #参数说明:
  	expr:指定函数
  	var:指定对哪个变量积分
  	F:返回结果

#实例:
>> x=sym("x");
>> y=sym("y");
>> int(x^3)
 
ans =
 
x^4/4
 
>> int(x+y^3)
 
ans =
 
(x*(2*y^3 + x))/2
 
>> int(x+y^3,x)
 
ans =
 
(x*(2*y^3 + x))/2
 
>> int(x+y^3,y)
 
ans =
 
y^4/4 + x*y
 
 >> int(x+y^3,[x,y])
 
ans =
 
-((x - y)*(2*y^3 + y + x))/2
 

(2)定积分:

求符号化的定积分:F = int(expr[,var],a,b[,Name,Value])
  #参数说明:
    a,b:指定积分下/上限

#实例:
>> int(x+y^3,y,1,3)
 
ans =
 
2*x + 20
 
>> int(x^3-2,1,3)
 
ans =
 
16
 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值