zoukankan      html  css  js  c++  java
  • Matlab与微积分计算

    一.极限问题的解析解

      1.1 单变量函数的极限

      格式1: L= limit( fun, x, x0)
      格式2: L= limit( fun, x, x0, ‘left’ 或 ‘right’)

    >> syms x a b;
    >> f=x*(1+a/x)^x*sin(b/x);
    >> L=limit(f,x,inf) 
    L = 
    b*exp(a)

      可以结合函数图像来观察。

      1.2 多变量

      格式: L1=limit(limit(f,x,x0),y,y0)
      或 L1=limit(limit(f,y,y0), x,x0)

      如果x0 或y0不是确定的值,而是另一个变量的函数,如x->g(y),则上述的极限求取顺序不能交换。

    相当于换元法,那肯定是先还原。

    >> syms x y a; 
    >> f=exp(-1/(y^2+x^2)) … *sin(x)^2/x^2*(1+1/y^2)^(x+a^2*y^2);
    >> L=limit(limit(f,x,1/sqrt(y)),y,inf)
    L =
    exp(a^2)

    二.函数导数的解析解  

      2.1 导数

      格式: y=diff(fun,x) %求导数
      y= diff(fun,x,n) %求n阶导数

      例:

    >> syms x; f=sin(x)/(x^2+4*x+3);
    >> f1=diff(f); pretty(f1)
    
    pretty函数可以使多项式看起来更清晰。
    
    cos(x) sin(x) (2 x + 4)
    --------------- - -------------------
    2 2 2
    x + 4 x + 3 (x + 4 x + 3)
    
    否则是 cos(x)/(x^2 + 4*x + 3) - (sin(x)*(2*x + 4))/(x^2 + 4*x + 3)^2
    
    原函数及一阶导数图:
    >> x1=0:.01:5; 
    >> y=subs(f, x, x1);
    >> y1=subs(f1, x, x1);
    >> plot(x1,y,x1,y1,‘:’)
    
    更高阶导数:
    >> tic, diff(f,x,100); toc
    elapsed_time =
    4.6860

      2.2 多元函数偏导  

      和求多远极限的方法类似。
      格式: f=diff(diff(f,x,m),y,n)
      或 f=diff(diff(f,y,n),x,m)

      例:求其偏导数并用图表示。

    >> syms x y; z=(x^2-2*x)*exp(-x^2-y^2-x*y);
    >> zx=simple(diff(z,x))
    zx =
    -exp(-x^2-y^2-x*y)*(-2*x+2+2*x^3+x^2*y-4*x^2-2*x*y)
    
    >> zy=diff(z,y)
    zy =
    (x^2-2*x)*(-2*y-x)*exp(-x^2-y^2-x*y)
    直接绘制三维曲面
    >> [x,y]=meshgrid(-3:.2:3,-2:.2:2);
    >> z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
    >> surf(x,y,z), axis([-3 3 -2 2 -0.7 1.5]) %直接surf(x,y,z)就行
    
    axis([-3 3 -2 2 -0.7 1.5])产生三维坐标系。

      matlab中三维网格图(mesh)和三维曲面图(surf)区别?
      感觉没啥区别,颜色不同。
      http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html#3218180

    三.积分问题解析解  

      格式: F=int(fun,x)
      定积分 格式: I=int(f,x,a,b)
      无穷积分 格式: I=int(f,x,a,inf)

      多重积分:顺序的改变使化简结果不同于原函数,但其误差为0,表明二者实际完全一致。这是由于积分顺序不同,得不出实际的最简形式。
    用simple(f-f1),看结果是不是0

    四.级数展开

      taylor(f,x,k,a)
      在x = a出展开的前k项。没a的话默认在0出。

    例:对y=sinx进行Taylor幂级数展开,并观察不同阶次的近似效果。

    >> x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
    >> plot(x0,y0,'r-.'), axis([-2*pi,2*pi,-1.5,1.5]); hold on
    >> for n=[8:2:16] p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1) end % p=taylor(y,n) (2009b
    
     

      line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标]),

      例line([1,2],[3,4])将画出(1,3)到(2,4)的一条直线,而不是(1,2)到(3,4)。

      当line(a,b)中,a b是相同大小的矩阵时,将会在对应的每一列做一条直线。

      当line(a,b,c)时,相应地会在三维图中画一条线。

      a b c 均为2XN矩阵。
      注意:实际上就是连接了几个点,说成折现比较好。

      其他的用到再说吧。

    五.级数求和

     

     

    >> x = [1 2 3]
    
    x =
    
    1 2 3
    
    >> y = [4 5 6 ]
    
    y =
    
    4 5 6
    
    >> x*y
    错误使用 * 
    内部矩阵维度必须一致。
    
    >> x.*y
    
    ans =
    
    4 10 18

      别被.*理解错了,我理解的是对于两个行向量a和b,a*b会是向量乘法,就是的到了一个数,a.*b也会是向量乘法,其实这是因为对matlab不熟悉所致,想想对min/max函数的误解。其实*就是矩阵乘法,提示维度不同,.*就是对应位置相乘,且并没有自动连加操作。

    >> syms m,n
    未定义函数或变量 'n'。
    
    >> syms m n
    >> f = symsum(1/m,m,1,n)-log(n)
    
    f =
    
    eulergamma + psi(n + 1) - log(n)
    
    >> limit(f,n,1,inf)
    错误使用 mupadmex
    Unexpected second parameter to mupadmex.
    
    出错 sym/limit (line 50)
    rSym = mupadmex('symobj::map', args{1}.s, 'symobj::limit', args{2}.s, args{3}.s, dir);
    
    >> limit(f,n,inf)
    
    ans =
    
    eulergamma

    六.数值微分

      d(x+1)-d(x)/Δx或者d(x)-d(x-1)/Δx或者d(x+1)-d(x-1)/2*Δx。

  • 相关阅读:
    mysql-5.7(centos-6.9环境)源码安装
    Oracle 11g 体系结构思维导图
    my.cnf 配置文件参数优化
    职业生涯规划
    技能栈规划图
    操作文档 Oracle 11g (CentOS7.2环境) 静默安装
    oracle 静默安装响应文件 参数说明
    oracle em企业管理器的安装、配置及相关问题
    大数据第51天—Mysql练习题12道之六-今年10月份第一次购买商品的金额-杨大伟
    大数据第50天—Mysql练习题12道之五-活跃用户的总数-杨大伟
  • 原文地址:https://www.cnblogs.com/hxsyl/p/4611009.html
Copyright © 2011-2022 走看看