精华内容
下载资源
问答
  • 一重数值积分的实现方法 变步长辛普森法高斯 - 克朗罗德法梯形积分法 1.1 变步长辛普森法 Matlab 提供了 quad 函数和 quadl 函数用于实现变步长 辛普森法求数值积分 . 调用格式为 : [I,n]=Quad@fname,a,b,tol,trace...
  • 数值微分和数值积分数值微分(1)数值差分与差商(2)数值微分的实现数值积分原理函数调用 数值微分 (1)数值差分与差商 可以用差商近似计算导数值: (2)数值微分的实现 diff() 向前差分函数 dx=diff(x):...

    数值微分

    (1)数值差分与差商

    在这里插入图片描述
    在这里插入图片描述

    可以用差商近似计算导数值:在这里插入图片描述

    (2)数值微分的实现

    diff() 向前差分函数

    • dx=diff(x):计算向量x的一阶向前差分,dx[i]=x[i+1]-x[i],i=1,2,3…n-1.
    • dx=diff(x,n):计算向量x的n阶向前差分。
    • dx=diff(A,n,dim):计算矩阵A的n阶差分。dim=1时按列计算差分,=2时按行计算差分。

    举个例子
    在这里插入图片描述

    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,'r:')
    

    两者较接近
    在这里插入图片描述

    数值积分

    原理

    在这里插入图片描述

    函数调用

    • [l,n]=quad(filename,a,b,tol,trace)基于自适应辛普森方法
    • [l,n]=quadl(filename,a,b,tol,trace)基于自适应GL方法(效率比较高)
      参数含义:在这里插入图片描述
    • I=integral(filename,a,b) 基于全局自适应积分方法。I是计算得到的积分。
    • [I,err]=quadgk(filename,a,b) 基于自适应高斯—克朗罗得方法。err返回近似误差。
    • I=trapz(x,y)x自变量,y因变量。在这里插入图片描述
      举个例子
      在这里插入图片描述
    format long
    f=@(x) 4./(1+x.^2);
    [I,n]=quad(f,0,1,1e-8)
    [I,n]=quadl(f,0,1,1e-8)
    (atan(1)-atan(0))*4
    结果
    I =3.141592653733437
    n =61
    I =3.141592653589806
    n =48
    ans =3.141592653589793
    

    在这里插入图片描述

    f=@(x) 1./(x.*sqrt(1-log(x).^2));
    I=integral(f,1,exp(1))
    结果:
    I =1.570796326795570
    

    在这里插入图片描述

    f=@(x) sin(1./x)./x.^2;
    I=quadgk(f,2/pi,+Inf)
    结果:
    I = 1.000000000000000
    

    在这里插入图片描述

    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 =35
    I2 =35
    

    下图是x—y图像
    在这里插入图片描述

    展开全文
  • Matlab数值微分法汇总:MidPoint 中点公式取导数ThreePoint 三点法函数的导数FivePoint 五点法函数的导数DiffBSample 三次样条法函数的导数SmartDF 自适应法函数的导数CISimpson 辛普森数值微分法法函数...
  • MATLAB算法-求解微分方程数值解和解析解.ppt
  • 第7章 MATLAB数值微分与积分_习题答案.doc.pdf
  • Matlab求微分方程组的数值

    万次阅读 多人点赞 2020-03-08 09:50:50
    微分方程组复杂时,无法出解析解时,就需要求其数值解,这里来介绍。 以下内容按照Matlab官方文档提供的方程来展开(提议多看官方文档) 介绍一下核心函数ode45() 一般形式:[t,y] = ode45(odefun,tspan,y0) 其中...

    上篇博客介绍了Matlab求解常微分方程组解析解的方法:博客地址
    微分方程组复杂时,无法求出解析解时,就需要求其数值解,这里来介绍。
    以下内容按照Matlab官方文档提供的方程来展开(提议多看官方文档)

    介绍一下核心函数ode45()

    一般形式:[t,y] = ode45(odefun,tspan,y0) 其中 tspan = [t0 tf]
    功能介绍:求微分方程组 y′=f(t,y) 从 t0 到 tf 的积分,初始条件为 y0。解数组 y 中的每一行都与列向量 t 中返回的值相对应。

    1. 一阶微分方程求解(简单调用即可)

    方程:y’=2*t
    代码

    tspan=[1 6]; %定义自变量x的取值空间为1-6
    y0=0;%定义因变量的初值,当x=1(x取值空间的第一个数)时,y0=0
    [t,y]=ode45(@(t,y) 2*t,tspan,y0); %定义函数y'=2*t,使用ode45求解
    plot(t,y,'-o'); %绘制求得的数值曲线
    

    说明:简单的odefun参数就是这个形式,@(x,y) fun 中间是空格,不能用逗号
    结果
    在这里插入图片描述

    2. 二阶微分方程求解(引入函数文件)

    方程:范德波尔方程 y1’’-u(1-y1²)*y1’+y1=0;(这里设u=1)
    代码
    定义输入的方程,以函数形式定义

    function dydt=odefun(t,y)
    %二阶方程为y1''-(1-y1²)*y1'+y1=0;
    %降阶为两个方程:y1'=y2; 
    %               y2'=(1-y1²)*y2-y1;
    %t虽然没有使用,但必须要作为参数写入
    dydt=[y(2);(1-y(1)^2)*y(2)-y(1)];
    

    求解作图

    tspan=[0 20]; %定义自变量x的取值空间为0-20
    y0=[2;0];%定义因变量的初值,当x=0时,y1=2,y2=y1'=0;
    [t,y]=ode45(@odefun,tspan,y0); %使用ode45求解
    %%下面为作图过程,不解释
    plot(t,y(:,1),'-o',t,y(:,2),'-o')
    title('Solution of van der Pol Equation (\mu = 1) with ODE45');
    xlabel('Time t');
    ylabel('Solution y');
    legend('y_1','y_2')
    

    说明:先进行降阶,使y2=y1’,这时候y2’=y1’’,然后把两个方程写成列向量形式就行了
    结果
    在这里插入图片描述

    3. 求解微分方程组(和2类似)

    这里就和求解二阶方程类似的,只不过不需要降阶,仍旧需要一个函数来定义方程组。我们这里不用官方文档的例子,用同学的循坏摆问题来进行演示。
    方程在这里插入图片描述
    给定的初值(w接近0,但实际上不能设置为0):
    在这里插入图片描述
    代码
    定义输入的方程

    function dRvw=func(t,Rvw)
    %% 函数功能:为ode45提供微分方程
    %输入:t:时间序列,就是θ;Rvw:因变量,Rvw(1)代表R,Rvw(2)代表v,Rvw(3)代表w
    %输出:dRvw:因变量的一阶微分,dRvw(1)代表dR,dRvw(2)代表dv,dRvw(3)代表dw
    %% 初始化因变量的一阶微分,3×1的向量
    dRvw=zeros(3,1);
    %% 参数初始化
    r=0.01;u=0.1;g=9.8;M=10;m=1;
    %% 输入微分方程式
    dRvw(1)=-Rvw(2)/Rvw(3)-r;
    dRvw(2)=(M*g-(m*Rvw(3)^2*Rvw(1)+m*g*sin(t)) *exp(u*(t+pi/2)))/(Rvw(3)*(M+m));
    dRvw(3)=Rvw(3)*r/Rvw(1)+2*Rvw(2)/Rvw(1)+g*cos(t)/(Rvw(3)*Rvw(1));
    

    求解作图

    %% 参数初始化 start_Theta是θ的初始值 end_Theta是θ的结束值
    %R是半径初值;v是线速度初值;w是角速度初值
    start_Theta=0;end_Theta=2*pi;R=1;v=0;w=1e-5;
    %% 使用ode45方法计算微分方程组func的数值解
    %func是带有方程组的函数 
    %[start_Theta end_Theta]是自变量范围
    %[R;v;w]是方程初值
    %T是自变量的数组,Rvw是对应的因变量的数值。Rvw(:,1)=R;Rvw(:,2)=v;Rvw(:,3)=w;
    [T,Rvw]=ode45(@func,[start_Theta end_Theta],[R;v;w]);
    %% 组合自变量和因变量。TRvw(:,1)=θ;TRvw(:,2)=R;TRvw(:,3)=v;Trvw(:,4);
    TRvw=[T,Rvw];
    %% 绘制自变量-因变量图像.figure1是R-θ,figure2是v-θ,figure3是w-θ
    plot(T,Rvw(:,1),'-o',T,Rvw(:,2),'-o',T,Rvw(:,3),'-o')
    title('自变量-因变量图像');
    xlabel('Angle θ');
    ylabel('Solution');
    legend('R','v','w')
    

    说明:注释的应该是比较清楚的,把三个方程写成列向量的形式就行

    PS:有些人和我说不能运行,然后我看了他们出错的原因,有点儿哭笑不得。出错的基本上都是运行上面的dRvw=func(t,Rvw)这个函数的。说明一下,这是有参数的函数,不给参数不能直接运行的。下面的求解作图脚本才是需要运行的哈,它调用了函数,才得到的结果。如果大家还发现什么问题,欢迎私戳或评论。

    PS+ 有了PS之后,还是很多人问我参数的问题,我在这里直接把文件给大家:cupt.zip
    提取码:6k8n。
    解压后,有两个文件,大家直接运行cupt.m即可。

    结果
    在这里插入图片描述

    4. 更多形式

    讲到这里,大部分我们用到的微分方程形式都可以求解了,Matlab还支持带有时变项和额外参数的微分方程求解,这里不再赘述,大家可以自行参阅官方文档。

    展开全文
  • 利用 MATLAB 求解常微分方程数值解 目录 1. 内容简介 把高等工程数学看了一遍增加对数学内容的了解对其中数值解法比较感兴趣 这大概是因为在其它各方面的学习和研究经常会遇到数值解法的问题理解模型然后列出 微分...
  • matlab数值微分

    千次阅读 2018-10-03 11:35:46
    文章目录标签(空格分隔): matlab 数值 微分 算法@[toc]matlab数值微分1 测试数值微分函数midD2Diff()2 中心二阶差商微分 midD2Diff()3 中心差商微分 midDiff()4 前向差商微分 forwardDiff()5 后向差商微分 ...

    标签(空格分隔): matlab 数值 微分 算法

    matlab数值微分

    1 测试数值微分函数midD2Diff()

    clc,clear
    format long
    % f=@(x)((x+1).^(-2))
    % f=@(x)(exp(-x.^2))
    % f=@(x)(exp(x))
    f=@(x)(x*sin(x))
    d2f=@(x)(cos(x)+cos(x)-x*sin(x))
    disp('二阶中心差商求微分 ')
    x=1
    n=10
    hdiff=[];h=10.^(-[1:n]);gErrer=[];
    for i=1:n
        [hdiffi,gErreri]=midD2Diff(f,x,h(i),true);
        hdiff=[hdiff,hdiffi];
        gErrer=[gErrer,gErreri];
    end,h,hdiff,gErrer
    % %% 系统计算的积分精确值
    % diff_system=f(x)
    diff_system=d2f(x)
    d_my_system=abs(hdiff-diff_system);
    log_darea=round(log10(gErrer)*10)
    log_d_my_system=round(log10(d_my_system)*10)
    

    运行结果:

    f = 
        @(x)(x*sin(x))
    d2f = 
        @(x)(cos(x)+cos(x)-x*sin(x))
    二阶中心差商求微分 
    x =
         1
    n =
        10
    h =
      Columns 1 through 6
       0.100000000000000   0.010000000000000   0.001000000000000   0.000100000000000   0.000010000000000   0.000001000000000
      Columns 7 through 10
       0.000000100000000   0.000000010000000   0.000000001000000   0.000000000100000
    hdiff =
       1.0e+02 *
      Columns 1 through 6
       0.002380345116521   0.002391226291765   0.002391335168772   0.002391336240137   0.002391353781661   0.002389199948993
      Columns 7 through 10
       0.002553512956638  -0.011102230246252   1.110223024625156                   0
    gErrer =
       1.0e+02 *
      Columns 1 through 6
       0.000032893550397   0.000000329924557   0.000000003298750                   0   0.000000022204460   0.000002220446049
      Columns 7 through 10
       0.000222044604925   0.016653345369377   1.387778780781446                   0
    diff_system =
       0.239133626928383
    

    2 中心二阶差商微分 midD2Diff()

    function [hd2diff,gErrer]=midD2Diff(func,x,h,withError)
    %中心二阶差商微分
    %理论依据:数值分析方法 奚梅成
    %func 求导函数;
    %x 微分点
    %h 微分步长
    %%
    %name:邓能财     Date: 2013/12/23
    %% 默认参数
    if nargin<4 withError=false; gErrer=0;
        if nargin<3 h=1e-3; %试验确定
        end,end
    %% 计算
    hd2diff=(func(x+h)-2*func(x)+func(x-h))/(h*h);
    %% 误差:区间倍增差商作为事后误差估计
    if withError
        hd2diff_=midD2Diff(func,x,h*2,false);
        gErrer=abs(hd2diff-hd2diff_);
    end
    end
    

    3 中心差商微分 midDiff()

    function [hdiff,gErrer]=midDiff(func,x,h,withError)
    %中心差商微分
    %理论依据:数值分析方法 奚梅成
    %func 求导函数;
    %x 微分点
    %h 微分步长
    %%
    %name:邓能财     Date: 2013/12/23
    %% 默认参数
    if nargin<4 withError=false; gErrer=0;
        if nargin<3 h=1e-5; %试验确定
        end,end
    %% 计算
    hdiff=(func(x+h)-func(x-h))/(2*h);
    %% 误差:区间倍增差商作为事后误差估计
    if withError
        hdiff_=midDiff(func,x,h*2,false);
        gErrer=abs(hdiff-hdiff_);
    end
    end
    

    4 前向差商微分 forwardDiff()

    function [hdiff,gErrer]=forwardDiff(func,x,h,withError)
    %前向差商微分
    %理论依据:数值分析方法 奚梅成
    %func 求导函数;
    %x 微分点
    %h 微分步长
    %%
    %name:邓能财     Date: 2013/12/23
    %% 默认参数
    if nargin<4 withError=false; gErrer=0;
        if nargin<3 h=1e-7;
        end,end
    %% 计算
    hdiff=(func(x+h)-func(x))/h;
    %% 误差:区间倍增差商作为事后误差估计
    if withError
        hdiff_=forwardDiff(func,x,h*2,false);
        gErrer=abs(hdiff-hdiff_);
    end
    end
    

    5 后向差商微分 backwardDiff()

    function [hdiff,gErrer]=backwardDiff(func,x,h,withError)
    %后向差商微分
    %理论依据:数值分析方法 奚梅成
    %func 求导函数;
    %x 微分点
    %h 微分步长
    %%
    %name:邓能财     Date: 2013/12/23
    %% 默认参数
    if nargin<4 withError=false; gErrer=0;
        if nargin<3 h=1e-7;
        end,end
    %% 计算
    hdiff=(func(x)-func(x-h))/h;
    %% 误差:区间倍增差商作为事后误差估计
    if withError
        hdiff_=backwardDiff(func,x,h*2,false);
        gErrer=abs(hdiff-hdiff_);
    end
    end
    

    联系作者 definedone@163.com

    end

    展开全文
  • MATLAB学习笔记:求数值微分

    万次阅读 2018-01-08 16:14:00
    数值微分是用离散方法近似计算函数的导数值或偏导数值。 向前差商公式: 向后差商公式: ...例1:利用数值微分求y=4*x^2+3*sin(x)在x=1处的近似导数。 先利用导函数出其一阶和二阶

    数值微分是用离散方法近似计算函数的导数值或偏导数值。

    向前差商公式:






    向后差商公式:





    中心差商公式:





    二阶导数的中心差商公式:







    例1:利用数值微分求y=4*x^2+3*sin(x)在x=1处的近似导数。

    先利用导函数求出其一阶和二阶导数值:

    dy_1=diff(4*x^2+3*sin(x))
    dy_1 =
     
    8*x + 3*cos(x)
    x=1;
    dy_1=9.620906917604419
    dy_2=diff(4*x^2+3*sin(x),2)
    dy_2 =
     
    8 - 3*sin(x)
    x=1;
    dy_2=5.475587045576311
    一阶和二阶中心差商公式求导:

    x=1;
    h=[0.1 0.01 0.001 0.0001];
    x1=x+h;
    x2=x-h;
    y=4*x^2+3*sin(x);
    y1=4*x1.^2+3*sin(x1);
    y2=4*x2.^2+3*sin(x2);
    ysw_1=(y1-y2)./(2*h)
    ysw_2=(y1+y2-2.*y)./(h.^2)
    ysw_1 =
    
       9.618206756509284   9.620879902624191   9.620906647452632   9.620906914897809
    
    
    ysw_2 =
    
       5.477690021937852   5.475608082274874   5.475587256498216   5.475587094849743
    例2:计算出生人口年增长率。








    px=[650 781 914 1005 1471 1861 1468 2479 2801 2114 1839 2043 2621 1693 1379 1617 1574 1655];
    for k=2:17
        zzl(k)=(px(k+1)-px(k-1))/10;
    end
    zzl
    plot(zzl)
    zzl =
    
      Columns 1 through 10
    
             0   26.4000   22.4000   55.7000   85.6000   -0.3000   61.8000  133.3000  -36.5000  -96.2000
    
      Columns 11 through 17
    
       -7.1000   78.2000  -35.0000 -124.2000   -7.6000   19.5000    3.8000




    展开全文
  • %% 学习目标:使用MATLAB求解常微分方程 通解 特解 数值解 %% 求微分方程的通解 clear all; f1=dsolve(‘Dy-y=sin(x)’) %默认情况下以t为自变量求解 出的C2为积分常数 f2=dsolve(‘Dy-y=sin(x)’,‘x’) % 以x为...
  • MATLAB数值微分与数值积分

    千次阅读 2020-09-06 14:29:31
    通过MATLAB实现微积分的数值解法
  • MATLAB数值微分

    2013-04-16 22:34:33
    MATLAB进行数值微分程序,主要包括微分函数,适合简单的编程
  • 本文是自己写的关于怎样利用MATLAB求解常微分方程数值解的,文中从Euler法讲起,最后总结了常用的odeXX的用法及其原理,其中包含各个函数怎样使用的MATLAB代码
  • 微分方程数值解的MATLAB实现,提供了求解一维偏微分方程的函数和求解二维偏微分方程的工具箱
  • matlab实现数值微分(diff_ctr函数)

    千次阅读 2020-08-07 01:26:16
    如果已知函数表达式,可以通过diff()函数取各阶导数解析解的方法,并得出结论,高达100阶的导数也可以用MATLAB语言在...由于在MATLAB语言没有现成的数值微分函数,所以本文将介绍一种数值微分算法——中心差分方法
  • 本人收集的MATLAB基础教程-第8章 MATLAB数值积分与微分.ppt 第13章 在Word环境下使用MATLAB.ppt 第12章 Simulink动态仿真集成环境.ppt 第11章 MATLAB图形...
  • 对于本节内容,主要分为两个部分讲解,数值微分和数值积分,那么下面,就开始今天的学习吧! 一、数值微分 在正式开始之前,有几个新概念需要讲解一下 (1) 数值差分与差商: 微积分 ,任意函数 f(x) 在x0 点的...
  • Matlab数值微分与数值积分

    千次阅读 2020-06-11 22:40:13
    matlab中数值微分与数值积分的实现
  • Matlab求微分方程的数值

    万次阅读 多人点赞 2020-08-10 17:53:00
    一、Matlab中求微分方程的数值解函数 [x,y]=solver('f',ts,x0,options) 1)x代表自变量 2)y代表函数值 3)solver代表求解函数,常用的为ode45->函数图像变化较为平稳,ode15s->函数图像存在突变(一...
  • 微分方程是自然科学和工程技术常见的数学问题。高阶微分方程由于具有较复杂的形式,其解析解往往难于计算,运用数学软件进行数值模拟来辅助分析十分必要。运用MATLAB软件求解高阶微分方程初值问题,分析了高阶非刚性...
  • 数值分析梯形法的matlab代码数值微分.jl 关于这个包 该模块使用 Tikhonov 或 Total Variation 方法的正则化来实现潜在噪声输入的数值微分。 它需要通过多种方式进行扩展: 我无法通过预处理在大型系统上为 TV 方法做...
  • 1、数值微分 有两种方式计算任意函数f(x)在给定点x的数值导数。第一种方式是用多项式或样条函数g(x)对f(x)进行逼近(插值或拟合),然后用逼近函数g(x)在点x处的导数作为f(x)在点x处的导数。第二种方式是用f(x)在点x...
  • Matlab实现数值微分

    千次阅读 2016-03-05 17:28:28
    基本证明就不说啦,基本上就是运用泰勒公式实现对函数的近似运算。 对于f(x)=-u‘’(x),u=sinx这个例子,代码如下 a(1)=2; a(2)=-1; for i=3:99 a(i)=0; end for i=1:97 for j=1:99 C(i,j)=0;... C(i
  • matlab求解偏微分方程,相比较把偏微分转成长分为方程再调用ode函数,利用离散差分法,使用迎风格式迭代求解数值解。
  • 实验目的 1学会用Matlab软件求解微分方程的初值问题 2了解微分方程数值解思想掌握基本的微分方程数值解方法 3学会根据实际问题建立简单微分方程数学模型 4了解计算机数据仿真数据模拟的基本方法 ;17世纪初等解法 18...
  • 一节课精通matlab入门求微分方程组的通解特解数值解,包括详细的代码资料和讲解注释
  • Matlab微分方程的数值解法常用程序-偏微分方程的数值解法_程序.rar 包括解决一些解偏微分方程的常用程序,希望对大家有用,欢迎下载!!:)
  • matlab开发-随机微分方程解算。用于LSDE前两个矩的函数
  • [MATLAB]数值微分与数值积分(diff/quad)

    千次阅读 2020-03-24 12:05:56
    diff quad 数值微分与数值积分 MATLAB
  • (二)用向前欧拉公式和改进的欧拉公式方程 的数值解 要求编写程序。 (三)Rossler微分方程组 当固定参数时 ,试讨论随参数a由小到大变化(如 )而方程解的变化情况,并且画出空间曲线图形,观察空间曲线是否形成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,777
精华内容 2,710
关键字:

matlab中求数值微分

matlab 订阅