精华内容
下载资源
问答
  • 数值求解常微分方程,数值求解常微分方程初值问题,matlab源码
  • 8程序包含两种方法,四阶显式Runge-Kutta法和隐式Runge-Kutta法。代码清晰,注释简明,方便数值分析学习使用。
  • 本文档利用 C 语言编写求解常微分方程的方法,包括改进欧拉方法求解常微分方 程的初值问题,以及四阶龙格-库塔法求解常微分方程初值问题。程序均采用 txt 文 件输入输出方式。 /* 改进欧拉方法求解常微分方程的...

    本文档利用 C 语言编写求解常微分方程的方法,包括改进欧拉方法求解常微分方 程的初值问题,以及四阶龙格-库塔法求解常微分方程的初值问题。程序均采用 txt 文 件输入输出方式。 /* 改进欧拉方法求解常微分方程的初值问题 */ #include #include #include #define f(x,y) (y-2*x/y) void main() { FILE *fp1; /*依次输入初值、步长、下限、上限*/ float x,h,l,f0,f1,f2; if((fp1=fopen(“in.txt“,“r“))==NULL) { printf(“Can't open this file!\n“); exit(0); } fscanf(fp1,“%f%f%f%f“, fclose(fp1); FILE *fp2; if((fp2=fopen(“out.txt“,“w“))==NULL) { printf(“Can't open this file!\n“); exit(0); } while(x #include #include float f(float x,float y) /*定义一个函数*/ { float f; f=(y-2*x/y); return f; } void main() { int n,N; /*定义各变量*/ float x0,y0,h,x1,y1,l; float k1,k2,k3,k4; FILE *fp1; /*依次输入初值、步长、下限、上限*/ if((fp1=fopen(“in.txt“,“r“))==NULL) { printf(“Can't open this file!\n“); exit(0); } fscanf(fp1,“%f%f%f%f“, fclose(fp1); FILE *fp2; if((fp2=fopen(“out.txt“,“w“))==NULL) { printf(“Can't open this file!\n“); exit(0); } for(n=1;x0l;n++) /*四阶龙格- 库塔法*/ { x1=x0+h; k1=f(x0,y0); k2=f(x0+h/2,y0+h/2*k1); k3=f(x0+h/2,y0+h/2*k2); k4=f(x1,y0+h*k3); y1=y0+h/6*(k1+2*k2+2*k3+k4); fprintf(fp2,“x%d=%3.1f,y%d=%f\n“,n,x1,n,y1); x0=x1; y0=y1; } fclose(fp2); }

    展开阅读全文

    展开全文
  • 科技信息SCIENCE & TECHNOLOGY INFORMATION2012 年 第 7 期 0 引言 在自然科学和经济生活的许多领域中,常常会遇到一阶常微分方程的初值问题如下:y'(t)=f(t,y)y(t0 )=y0 0 , t0≤t (1... 1 常微分方程初值问题...

    科技信息SCIENCE & TECHNOLOGY INFORMATION2012 年 第 7 期 0 引言 在自然科学和经济生活的许多领域中,常常会遇到一阶常微分方程的初值问题如下:y'(t)=f(t,y)y(t0 )=y0 0 , t0≤t (1) 这里 f 是凸区域 D 上的连续且满足 Lipschitz 条件的函数,可以证明常微分方程初值问题(1)具有唯一解. 1 常微分方程初值问题的数值解法 常微分方程初值问题的数值解法一般分为两大类,即单步法和多步法. 所谓单步法是指这类方法在计算 yn+1 时只用到前一步的 yn,这个算法的代表是 Runge-Kutta 法. Runge-Kutta 方法关于初值是稳定的, 每步的步长可以独立选取. 四阶显式 Runge-Kutta 方法是求解普通常微分方程初值问题的重要方法, 而隐式 Runge-Kutta 方法是求解刚性常微分方程初值问题的重要方法. 所谓多步法是指在计算 yn+1 时,除了用到前一步的值 yn 之外,还要用到 yn-p(p=1,2,…,k,k>0)的值,这个算法的代表就是 Adams 方法. 1.1 龙格—库塔方法(R-K 方法) R-K 方法通过计算不同点上的函数值,并对这些函数值作线性组合,构造近似公式,利用待定系数法确定近似精度,它是非线性高阶单步法.事实上,Runge-Kutta 可以看作在(tn,tn+1)上取若干条积分曲线的若干个点的切线斜率,再进行一次(或多次)算术(或加权)平均后产生的新斜率,再按这个斜率从(tm,ym)出发,以直线带曲线向前推进一步的过 程. 由常微分方程理论,初值问题(1-1)可改写成等价的积分形式 y(t)=y0+ t t0 乙f(x,y(x))dx, 由上式及积分中值定理可得 y(tn+h)=y(tn)+hf(tn+hθ,y(tn+hθ))=yn+hk*(tn,yn,h),0<θ<1. (2)但 f(tn+hθ,y(tn+hθ))未知,我们用 f 在区间[tn,tn+h]上的一些点处值的线性组合来近似它,即用下列公式代替式(2) y(tn+h)=y(tn)+h r i Σλiki, i=2,…,s, 其中 k1=fn=f(tn,yn),kj=f(tn+djh,yn+h j-1 s=1 Σβjsks),j=2,3,…,r,dj,βjs,都是 待定的系数, 由待定系数法可以得到各阶 R-K 方法. 我们考虑 r=2 情形,应用双变量泰勒级数展式k2=f(tn+d2h,yn+β21k1h) =f(tn,yn)+h(d2 鄣 鄣t +β21k1 鄣 鄣y )f(tn,yn) +…+ h p-1 (p-1)! (d2 鄣 鄣t +β21k1 鄣 鄣y )p-1f(tn,yn)+O(hp), 将其代入 R-K 公式,整理得 yn+1=yn+h(λ1+λ2)f(tn,yn)+h2λ2(d2ft+β21k1fy)f(tn,yn) +…+ λ2h p-1 (p-1)! (d2 鄣 鄣t +β21k1 鄣 鄣y )p-1f(tn,yn)+O(hp) 上式与 yn+1 在 yn 处的泰勒展开对比,令 h 和 h2 项的系数相同,可得 λ1+λ2=1,λ2d2= 1 2 ,λ2β21= 1 2 . d2 取不同值时可得到不同的二阶 Runge-kutta 公式. 利用上面的思想,可得经典的四阶 R-K 公式 yn+1=yn+ 1 6 h(k1+2k2+2k3+k4 ) k1=f(tn ,yn ) k2=f(tn+ 1 2 h,yn+ 1 2 hk1 ) k3=f(

    展开全文
  • 常微分方程初值问题的数值求解及MATLAB实现.pdf
  • 讨论了求解二阶线性常微分方程初值问题的差分法,给出了边界条件的2种处理方法,并对数值结果与理论计算结果进行了比较。
  • 它包括以下程序:Euler 方法、改进或修改的 Euler 方法和 Runge-Krutta 方法。 RK 方法包括一阶(欧拉法)、二阶... *图片由 Dennis Zill 和 Michael Cullen 在他们的书中提供:具有边界值问题微分方程(第 7 版)*
  • Legendre-Gauss谱配置法解一阶常微分方程初值问题的超收敛性,易利军,孙涛,本文主要研究一阶线性常微分方程初值问题的谱配置法.我们基于Legendre-Gauss点构造了一阶线性常微分方程初值问题的谱配置格式,并通过
  • (二)要求 用编程语言实现用改进的欧拉(Euler)公式求解常微分方程初值问题、用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题的程序。 二、示例 1、问题用改进的欧拉(Euler)公式求解常微分方程初值问题...

    一、目的与要求
    (一)目的通过设计、编制、调试1~2个求常微分方程初值问题的数值解解的程序,加深对其数值计算方法及有关的基础理论知识的理解。
    (二)要求 用编程语言实现用改进的欧拉(Euler)公式求解常微分方程初值问题、用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题的程序。
    二、示例
    1、问题用改进的欧拉(Euler)公式求解常微分方程初值问题。
    2、算法描述(略)
    3、程序中变量说明 (略)
    4、源程序清单及运行结果(略)
    5、按以上4点要求编写上机实验报告。
    三、实验题用编程语言编程实现以下算法:
    1、用改进的欧拉(Euler)公式求解常微分方程初值问题。2、用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题。
    数值分析实验真的都是直接套公式即可…
    做法:首先理解书上关于欧拉公式以及四阶龙贝格库塔方法,明白其中的道题,模拟程序流程。
    只是图画的有点丑…
    代码

    import numpy as np
    import matplotlib.pyplot as plt
    import math
    def func(x,y):
        return y - 2*x/y
    #模拟常微分方程为:
    #      f'(x)=y-2*x/y
    #      f(x0)=y0
    #另外:解析法可知f(x) = 根号下(2*x+1)
    x0 = 0
    y0 = 1
    h = 0.1
    N = 10
    # 改进的欧拉(Euler)公式
    def ImproEuler():
        x1 = np.zeros(N+1)
        y1 = np.zeros(N+1)
        for i in range(N+1):
            x1[i] = x0 + h*(i)
        # 计算y数组各值
        for i in range(N+1):
            if i==0:
                y1[i] = y0
            else:
                k1 = y1[i-1] + h*func(x1[i-1],y1[i-1])
                k2 = y1[i-1] + h*func(x1[i],k1)
                y1[i] = (k1+k2)*1/2
        return x1,y1
    # 四阶龙格-库塔(Runge-Kutta)方法
    def RungeKutta():
        x1 = np.zeros(N+1)
        y1 = np.zeros(N+1)
        for i in range(N+1):
            x1[i] = x0 + h*(i)
        for i in range(N+1):
            if i==0:
                y1[i] = y0
            else:
                k1 = func(x1[i-1],y1[i-1])
                k2 = func(x1[i-1]+h/2,y1[i-1]+k1*h/2)
                k3 = func(x1[i-1]+h/2,y1[i-1]+k2*h/2)
                k4 = func(x1[i-1]+h,y1[i-1]+h*k3)
                y1[i] = y1[i-1] + (k1+2*k2+2*k3+k4)*h/6
        print(x1,y1)
        return x1,y1
    def Draw():
    #三条线画在同一张图中 发现误差很小
        xEuler,yEuler = ImproEuler()
        xKutta,yKutta = RungeKutta()
        plt.plot(xEuler,yEuler,'*',xKutta,yKutta,'gx',xEuler,np.sqrt(2*xEuler+1),'r')
        plt.annotate(r'Euler Formula or Runge Kutta',xy=(xEuler[5],yEuler[5]),xytext=(xEuler[5],yEuler[5]-0.2),arrowprops=dict(facecolor='black',shrink=0.1,width=2))
        plt.annotate(r'Correct results',xy=(xEuler[10]-0.05,np.sqrt(2*xEuler[10]+1)),xytext=(xEuler[10]-0.05,np.sqrt(2*xEuler[10]+1)-0.2),arrowprops=dict(facecolor='black',shrink=0.1,width=2))
        plt.grid(True)
        plt.savefig('ODE test',dpi = 600)
        plt.show()
    if __name__ == '__main__':
        Draw()
    展开全文
  • 常微分方程初值问题的欧拉方法及其改进的欧拉方法的Matlab实现,纪秀浩,,欧拉(Euler)方法及改进的欧拉方法是解决常微分方程初值问题常用的数值解法,但Matlab的工具箱中没有Euler方法的功能函数。本文在简要介
  • 常微分方程初值问题(ODE-IVP)-Euler法

    千次阅读 2020-08-01 14:30:42
    常微分方程初值问题

    常微分方程初值问题

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

    matlab代码如下:

    function euler_mothod
    %求解初值问题(ode-IVP)
    %/  u'=f(t,u)
    %/  u(0)=u0
    
    T=1;
    h=0.05;
    t=
    展开全文
  • 常微分方程初值问题数值解法问题一、一阶常微分方程初值问题的有限差分方法与误差分析二、向前Euler法及误差分析1.向前Euler法2.误差分析3.后退Euler法三、改进欧拉公式四、龙格—库塔方法 问题 一阶常微分方程的...
  • 改进的欧拉法计算常微分方程初值问题
  • 本文提出了一些基于Legendre多项式作为基函数的k步线性多步方法的... 利用导出的方法对常微分方程的一些数值例子进行了求解,以证明其有效性和准确性。 获得的数值结果表明,所提出的方法也可以有效地解决此类问题
  • 引用B样条插值函数讨论了一阶常微分方程初值问题的数值解,给出一个隐式近似求解公式,并得到此公式的局部截断误差为O(h5),整体截断误差为O(h4)。在此基础上又给出了一个校正显式求解公式,其局部截断误差为O...
  • \qquad常微分方程是描述连续变化的...考虑一阶常微分方程初值问题 y′=f(x,y),x∈[x0,b],(1)y(x0)=y0(2) y^{'}=f(x,y),\quad x\in [x_{0},b],\quad(1)\\ y(x_{0})=y_{0}\quad(2) y′=f(x,y),x∈[x0​,...
  • 常微分方程初值问题数值解法 一、问题提出 科学计算中经常遇到微分方程(组)初值问题,需要利用Euler法,改进Euler法,Rung-Kutta方法求其数值解,诸如以下问题: (1) (3) (4)利用四阶标准R- K...
  • 1、用改进的欧拉(Euler)公式求解常微分方程初值问题。 2、用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题。 欧拉公式求解y’=y-2x/y和y(0)=1在[0,1]上的结果 sy3_1.m clear; clc; x0=0; y0=1; h=0.1; N=...
  • 常微分方程组数值求解;主要内容 数值求解常微分方程组函数概述 非刚性/刚性常微分方程问题求解 隐式微分方程组求解 微分代数方程(DAE)与延迟微分方程(DDE)求解 边值问题求解 ;...第二节 非刚性/刚性常微分方程初值问题
  • 1. 熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉法; 2. 会编制上述方法的计算程序,包括求解微分方程组的计算程序; 3. 针对实习编制程序,并上机计算其所需要的结果; 4. 通过对各种求解方法的...
  • 此处参考教材为李荣华的《微分方程数值解法》 使用工具:Matlab 1. 算法 [^8)最后一行应为k4,上面为笔误] 2. 算法 I.需要求解的函数 function f=f1D(t,u,ft) % ft为方程编号,u1D为精确解函数u(t),注意与f1D对应...
  • (ODE)的初值问题(IVP)本节考虑一阶常微分方程uf(t,u<br>)t0tTu(t)u0</p>0(1.1)的数值求解问题,包括算法公式及编程问题。对一阶常微分方程组的初值问题u1(<p>t0)u10f1(t,...
  • 常微分方程初值问题的数值解法 本文参考书为马东升著《数值计算方法》 引言 未知函数为一元函数的微分方程叫常微分方程,讨论一阶常微分方程的初值问题 {y′=f(x,y)y(x0)=y0 \begin{cases}y'=f(x,y)\\y(x_0)=y_0\...
  • 问题:用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题。 算法描述 算法的程序框图: 具体算法: (1)读取a,b,n,f (2)计算步长h = (b-a)/n,x0=a,y0=f (3)从i = 1开始每次i++,重复以下操作,直到i=n...
  • //用RKG法求解微分方程 #include #include #include using namespace std; class rkg { private:  int i, n;  double a, b, c, d, f, h, k1, k2, k3, k4, x, xf, y; public:  double func(double z, double t)
  • 我们的重点是开发和实施新的两步混合方法,用于直接求解一般的二阶常微分方程。 在该方法的开发中,采用幂级数作为基础函数,并且将出现的方程组微分系统并置在所有电网和离网点。 所得方程在选定点处插值。 然后,...
  • 【作业内容】: 用Euler法、改进的欧拉法、四阶龙格-库塔法求如下一阶常微分方程 {y′=y−2xyy(0)=1 \left\{\begin{array}{l} {y}^{\prime}={y}-\frac{2 {x}}{{y}} \\ {y}({0})={1} \end{array}\right. {y′=y−y2x...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,100
精华内容 440
关键字:

常微分方程初值问题求解