常微分方程数值方法之欧拉方法

常微分方程数值方法之欧拉方法

对于微分方程初值问题

()

=x y dy f dx

,, ()00y x =y

的解在x y 平面上是一条曲线,称为该微分方程的积分曲线。积分曲线上一点

(),x y 的切线斜率等于函数f 在点(),x y 的值,从初始点()000,P x y 出发,向该点

的切线方向推进到下一个点()111,P x y ,然后依次做下去,得到后面的未知点。一般地,若知道(),n n n P x y 依上述方法推进到点()111,n n n P x y +++,则两点的坐标关系为:

()11,n n n

n n n

y y f

x

y x x ++-=-

()1,n n n n y y hf x y +=+

这种方法就是欧拉(Euler )方法。当初值0y 已知,则n y 可以逐步算出

()1000,y y hf x y =+ ()2111,y y hf x y =+

()111,n n n n y y hf x y ---=+

常微分方程作业欧拉法与改进欧拉法

P77 31.利用改进欧拉方法计算下列初值问题,并画出近似解的草图:dy + =t = t y y ≤ ≤ ,2 ;5.0 0,3 )0( )1(= ,1 ? dt 代码: %改进欧拉法 function Euler(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y+1; 调用:Euler(0,3,[0,2],0.5) 得到解析解:hold on; y=dsolve('Dy=y+1','(y(0)=3)','t'); ezplot(y,[0,2]) 图像:

dy y =t - t y ;2.0 t = ≤ )0( 0,5.0 ,4 )2(2= ≤ ? ,2 dt 代码: function Euler1(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y^2-4*t; 调用: Euler1(0,0.5,[0,2],0.2) 图像:

求欧拉回路的Fleury算法

求欧拉回路的Fleury算法 一、实验内容: 判断图G是否存在欧拉回路,若存在,输出其中一条欧拉回路。否则,显示无回路。 二、实验环境:vc++ 三、实验过程与结果 1.问题简介:通过图(无向图或有向图)中所有边一次且仅一次行遍所有 顶点的回路称为欧拉回路。具有欧拉回路的图称为欧拉图 2.算法思想(框图): (1)任取v0∈V(G),令P0=v0. (2)设Pi=v0e1v1e2…e i v i已经行遍,按下面方法来从E(G)-{e1,e2,…,e i}中选取e i+1: (a)e i+1与v i相关联; (b)除非无别的边可供行遍,否则e i+1不应该为 G i=G-{e1,e2,…,e i}中的桥。 (3)当(2)不能再进行时,算法停止。 可以证明,当算法停止时所得简单回路Pm=v0e1v1e2…e m v m(v m=v0)为G中一条欧拉回路。

3.数据输入: 边数5,点数6 相关联的点1 2 1 3 2 5 4 2 3 2 4 5 4.运行结果: 存在欧拉回路 1,3,2,4,5,2,1 5.分析总结: Fleury算法是求欧拉图的十分有效的算法,在执行过程中需要用到类似于图的深度优先遍历,因为该算法就是需要将已找到的路径不断的扩展下去,直到将所有边扩展进路径。 四、完整源程序 #include #include #include struct stack { int top , node[81]; } T,F,A; //顶点的堆栈 int M[81][81]; //图的邻接矩阵 int n; int degree[81]; bool brigde(int i,int j) { int flag[81],t,s; for(s=1;s<=n;s++) flag[s]=0; if(degree[i]==1) return false; else {

对于欧拉方程的理解

关于欧拉方程的理解 1755年,瑞士数学家L.欧拉在《流体运动的一般原理》一书中首先提出这个方程。 形如:)(1)1(11)(x f y x p y x p y x n n n n n ='+++--- (1) 的方程称为欧拉方程, 其中n p p p ,,,21 为常数。 欧拉方程的特点是: 方程中各项未知函数导数的阶数与其乘积因子自变量的幂次相同。 现阶段欧拉方程的应用领域很广,现只结合流体力学来探讨我对于欧拉方程的理解。 欧拉方程提出采用了连续介质的概念,把静力学中压力的概念推广到了运动流体中。 流体静力学着重研究流体在外力作用下处于平衡状态的规律及其在工程实际中的应用。 这里所指的静止包括绝对静止和相对静止两种。以地球作为惯性参考坐标系,当流体相对于惯性坐标系静止时,称流体处于绝对静止状态;当流体相对于非惯性参考坐标系静止时,称流体处于相对静止状态。 流体处于静止或相对静止状态,两者都表现不出黏性作用,即切向应力都等于零。所以,流体静力学中所得的结论,无论对实际流体还是理想流体都是适用的。 流体静压强的特性 1静压强的方向—沿作用面的内法线方向 2任一点的流体静压强的大小与作用面的方向无关,只与该点的位置有关

由上图可以推到出流体平衡微分方程式,即欧拉平衡方程 x y z p f x p f y p f z ρρρ??=?????=?????=??? 当流体处于平衡状态时,单位体积质量力在某一轴向上的分力,与压强沿该轴的递增率相平衡。 这里的fx 、fy 、fz 是流体质量力在x 、y 、z 轴上的投影,且质量力中包含以下两项:重力和惯性力。在这里如果假定fx 、fy 、fz 仅仅是重力在三个坐标轴上的投影,那么惯性力在x 、y 、z 轴上的投影分别为:-du/dt ,-dv/dt 和-dw/dt 。于是,上式便可写成 d d d d d d x y z u p f t x v p f t y w p f t z ρρρ????-= ???? ??????-=? ??? ??????-=? ??? ?? 上式整理后可得:

常微分方程的Euler解法

毕业论文 题目:常微分方程的Euler解法 及其程序设计 学院:数学与信息科学学院 专业:数学与应用数学 毕业年限: 2011年6月 学生: 学号: 指导教师:

常微分方程的Euler解法及其程序设计 摘要本文总结了常微分方程的Euler解法,对各种格式给出了误差估计,设计了这些格式的计算程序. 关键词常微分方程;Euler解法;误差分析;程序设计 Euler Method of Ordinary Differential Equation and Its Programming Abstract Euler method of ordinary differential equation is summarized,the error of each format is analyzed and its programming is designed in this paper. Keywords Ordinary differential equation; Euler method; Error analysis; Programming

科学技术中常常需要求解常微分方程的定解问题,这类问题最简单的形式,即为微分方程 (,)dy f x y dx = (1) 的初值问题 00(,),(). dy f x y dx y x y ?=???=? (2) 定理 (存在与唯一性定理)如果方程(1)的右端函数(,)f x y 在闭矩形域 000000:,R x a x x a y b y y b -≤≤+-≤≤+ 上满足如下条件: (1)在R 上连续; (2)在R 上关于变量y 满足利普希茨(Lipschitz )条件,即存在常数L ,使 对于R 上任何一对点(,)x y 和(,)x y 有不等式: (,)(,)f x y f x y L y y -≤-, 则初值问题(2)在区间00000x h x x h -≤≤+上存在唯一解 00(),()y y x y x y ==, 其中0(,)min(,),max (,)x y R b h a M f x y M ∈==. 根据存在与唯一性定理,只要(,)f x y 关于y 满足Lipschitz 条件 (,)(,)f x y f x y L y y -≤-, 即可保证其解()y y x =存在并唯一. 然而解析方法只能用来求解少数较简单和典型的常微分方程,例如线性常系数微分方程等,对于变系数常微分方程的解析求解就比较困难,而一般的非线性常微分方程就更不用说,因此,在大多数情况下,实际问题中归结出来的微分方程主要靠数值解法求解.

求欧拉回路的Fleury算法

一、实验内容: 判断图G是否存在欧拉回路,若存在,输出其中一条欧拉回路。否则,显示无回路。 二、实验过程与结果 1.问题简介:通过图(无向图或有向图)中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路。 具有欧拉回路的图称为欧拉图 2.算法思想(框图): (1)任取v0∈V(G),令P0=v0. (2)设Pi=v0e1v1e2…eivi已经行遍,按下面方法来从E(G)-{e1,e2,…,ei}中选取ei+1: (a)ei+1与vi相关联; (b)除非无别的边可供行遍,否则ei+1不应该为Gi=G-{e1,e2,…,ei}中的桥。 (3)当(2)不能再进行时,算法停止。 可以证明,当算法停止时所得简单回路Pm=v0e1v1e2…emvm(vm=v0)为G中一条欧拉回路。 3.数据输入: 边数5,点数6 相关联的点1 2 1 3 2 5 4 2 3 2 4 5 4.运行结果: 存在欧拉回路1,3,2,4,5,2,1 5.分析总结: Fleury算法是求欧拉图的十分有效的算法,在执行过程中需要用到类似于图的深度优先遍历,因为该算法就是需要将已找到的路径不断的扩展下去,直到将所有边扩展进路径。

三、完整源程序 #include <> #include <> #include <> struct stack { int top , node[81]; } T,F,A; //顶点的堆栈 int M[81][81]; //图的邻接矩阵int n; int degree[81]; bool brigde(int i,int j) { int flag[81],t,s; for(s=1;s<=n;s++) flag[s]=0; if(degree[i]==1) return false; else { M[i][j]=0;M[j][i]=0; =1; [1]=i; flag[i]=1; t=i; while>0) { for(s=1;s<=n;s++) { if(degree[s]>0){ if(M[t][s]==1) if(flag[s]==0) { ++; []=s; flag[s]=1; t=s; break; } } } if(s>n){ ; t=[]; } } for(s=1;s<=n;s++) { if(degree[s]>0) if(flag[s]==0) { M[i][j]=M[i][j]=1; return true; break; } } if(s>n) return false; } } void Fleury(int x) //Fleury算法{ int i,b=0; if<=n+1){ ++;[]=x; for(i=1;i<=n;i++) if(M[x][i]==1) if(brigde(x,i)==false) { b=1; break; } if(b==1) { M[x][i]=M[i][x]=0; degree[x]--; degree[i]--; Fleury(i); } }

欧拉及改进的欧拉法求解常微分方程

生物信息技术0801 徐聪U200812594 #include #include void f1(double *y,double *x,double *yy) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); yy[i]=x[i]+1+exp(x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f2(double *y,double *x,double *yy) { y[0]=1.0; x[0]=0.0; yy[0]=1.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]); yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f3(double *y,double *x,double *yy,double *y0) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y0[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); y[i]=y[i-1]+0.1*(y[i-1]-x[i-1]+y0[i-1]-x[i-1]);

欧拉路径(欧拉回路)算法

. 欧拉路径(欧拉回路)相关定义: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉回路。 具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。 判断图是否为欧拉图: 无向图为欧拉图,当且仅当为连通图且所有顶点的度为偶数。 无向图为半欧拉图,当且仅当为连通图且除了两个顶点的度为奇数之外,其它所有顶点的度为偶数。 有向图为欧拉图,当且仅当其基图(忽略有向图所有边的方向,得到的无向图称为该有向图的基图)连通,且所有顶点的入度等于出度。 有向图为半欧拉图,当且仅当其基图连通,且有且仅有一个顶点的入度比出度大1、有且仅有一个顶点的入度比出度小1,其它所有顶点的入度等于出度。 欧拉回路(路径)的算法: 有向图: 第一步,判断是否存在欧拉路径(欧拉回路),如果不存在,算法结束。 第二步,如果存在欧拉路径,从入度比出度小1的点开始BFS;如果存在欧拉回路,从任意一点开始。 第三步,设DFS到点u,遍历u的出边e(u,v)。 第四步,如果e未被标记,转到第五步,否则转到第三步。 第五步,标记e(u,v),DFS点v。 第六步,边e(u,v)入栈。 第七步,完成DFS后,从栈顶顺序输出边构成一个欧拉路径(欧拉回路)。 无向图: 第一步,判断是否存在欧拉路径(欧拉回路),如果不存在,算法结束。 第二步,如果存在欧拉路径,从度为奇数的点开始BFS;如果存在欧拉回路,从任意一点开始。 第三步,设DFS到点u,遍历u的出边e(u,v)。 第四步,如果e未被标记,转到第五步,否则转到第三步。 第五步,标记e(u,v)及它的反向边,DFS点v。 第六步,边e(u,v)入栈。 第七步,完成DFS后,从栈顶顺序输出边构成一个欧拉路径(欧拉回路)。 '.

微分方程常用的两种数值解法:欧拉方法与龙格—库塔法

四川师范大学本科毕业论文 微分方程常用的两种数值解法:欧拉方法与龙 格—库塔法 学生姓名XXX 院系名称数学与软件科学学院 专业名称信息与计算科学 班级2006级 4 班 学号20060640XX 指导教师Xxx 四川师范大学教务处 二○一○年五月

微分方程常用的两种数值解法:欧拉方法与龙格—库塔法 学生姓名:xxx 指导教师:xx 【内容摘要】微分方程是最有生命力的数学分支,在自然科学的许多领域中,都 会遇到常微分方程的求解问题。当前计算机的发展为常微分方程的应用及理论研究提供了非常有力的工具,利用计算机解微分方程主要使用数值方法,欧拉方法和龙格——库塔方法是求解微分方程最典型常用的数值方法。本文详细研究了这两类数值计算方法的构造过程,分析了它们的优缺点,以及它们的收敛性,相容性,及稳定性。讨论了步长的变化对数值方法的影响和系数不同的同阶龙格—库塔方法的差别。通过编制C程序在计算机上实现这两类方法及对一些典型算例的结果分析比较,能更深切体会它们的功能,优缺点及适用场合,从而在实际应用中能对不同类型和不同要求的常微分方程会选取适当的求解方法。 关键词:显式单步法欧拉(Euler)方法龙格—库塔(Runge—Kutta)方法截断误差收敛性 Two commonly used numerical solution of differential equations:Euler method and Runge - Kutta method Student Name: Xiong Shiying Tutor:Zhang Li 【Abstract】The differential equation is the most vitality branch in mathematics. In many domains of natural science, we can meet the ordinary differential equation solution question. Currently, the development of computer has provided the extremely powerful tool for the ordinary differential equation application and the fundamental research, the computer solving differential equation mainly uses value method. The Euler method and the Runge—Kutta method are the most typical commonly value method to solve the differential equation. This article dissects the structure process of these two kinds of values commonly value method to solve the analyses their good and bad points, to their astringency, the compatibility, and the stability has made the proof. At the same time, the article discuss the length of stride to the numerical method changing influence and the difference of the coefficient different same step Runge—kutta method. Through establishing C program on the computer can realize these two kind of methods, Anglicizing some models of calculate example result can sincerely realize their function, the advantage and disadvantage points and the suitable situation, thus the suitable solution method can be selected to solve the different type and the

欧拉回路的求解matlab

欧拉回路的求解 左图是一个井田图,由于2、3、5、8、9、12、14、15几个点都是奇数连线,故不存在欧拉回路。而右图增加几条连线后,该图就存在欧拉回路。 a)假设点1和点2 之间的连线消失, b)建立数学模型把右图的拓扑关系(并考虑a中连线消失的因素)表达出来 c)理解fleury算法,并计算一条欧拉迹,使得该欧拉迹从点1出发,经过b中的每一条边, 最终达到点2 d)使用plot命令把该欧拉迹显示出来。这个动画过程可以用一个for循环语句实现,如下。 其中pos是个2x16的矩阵,2行分别代表x/y轴坐标,每一列表示每个点的坐标,共16个点;另外,T是个2xN的矩阵,每一列表示一条边从T(1,i) 点到T(2,i)点。fleury 算法的目的就是要产生这样一个T 矩阵。 for i … draw_arrow(pos(:,T(1,i))',pos(:,T(2,i))',0.5) pause; end 以下是这段动画的其中几个截图

clear all hold off

A=zeros(16); for i=1:16 %A(i,i)=1/2; if i+1<=16 && mod(i,4)~=0 A(i,i+1)=1; end if i+4<=16 A(i,i+4)=1; end end A(2,5)=1; A(3,8)=1; A(9,14)=1; A(12,15)=1; A=A+A'; [T3 c3]=fleury3(A); pos3(1:2,1)=0; for i=1:16 if i==1, pos3(1:2,i)=0; else if mod(i-1,4)~=0 pos3(1,i)=pos3(1,i-1)+1; pos3(2,i)=pos3(2,i-1); else pos3(1,i)=pos3(1,i-4); pos3(2,i)=pos3(2,i-4)-1; end end end figure (1), title('3rd Question') for i=1:16 for j=i:16 if A(i,j)==1, plot([pos3(1,i),pos3(1,j)],[pos3(2,i),pos3(2,j)]); hold on, end end end for i=2:size(T3,2) draw_arrow(pos3(:,T3(1,i))',pos3(:,T3(2,i))',0.5)

求欧拉回路,Fleury算法的C语言实现[1]

欧拉(Euler)通路/回路 1、基本概念: (1)定义 欧拉通路(欧拉迹)—通过图中每条边一次且仅一次,并且过每一顶点的通路。 欧拉回路(欧拉闭迹)—通过图中每条边一次且仅一次,并且过每一顶点的回路。 欧拉图—存在欧拉回路的图。欧拉图就是从一顶出发每条边恰通过一次又能回到出发顶点的那种图,即不重复的行遍所有的边再回到出发点。 通路和回路-称v i e1e2…e n v j为一条从v i到v j且长度为n的通路,其中长度是指通路中边的条数.称起点和终点相同的通路为一条回路。 简单图-不含平行边和自回路的图。 混合图-既有有向边,也有无向边的图 平凡图-仅有一个结点的图 完全图-有n个结点的且每对结点都有边相连的无向简单图,称为无向完全图;有n个结点的且每对结点之间都有两条方向相反的边相连的有向简单图为有向完全图。 (2)欧拉图的特征: 无向图 a)G有欧拉通路的充分必要条件为:G 连通,G中只有两个奇度顶点(它们分别是欧拉通路的两个端点)。 b)G有欧拉回路(G为欧拉图):G连通,G中均为偶度顶点。 有向图 a)D有欧拉通路:D连通,除两个顶点外,其余顶点的入度均等于出度,这两个特殊的顶点中,一个顶点的入度比出度大1,另一个顶点的入度比出度小1。 b)D有欧拉回路(D为欧拉图):D连通,D中所有顶点的入度等于出度。一个有向图是欧拉图,当且仅当该图所有顶点度数都是0。 2、弗罗莱(Fleury)算法思想-解决欧拉回路 Fleury算法: 任取v0∈V(G),令P0=v0; 设Pi=v0e1v1e2…ei vi已经行遍,按下面方法从中选取ei+1: (a)ei+1与vi相关联; (b)除非无别的边可供行遍,否则ei+1不应该为Gi=G-{e1,e2, …, ei}中的桥(所谓桥是一条删除后使连通图不再连通的边); (c)当(b)不能再进行时,算法停止。 可以证明,当算法停止时所得的简单回路Wm=v0e1v1e2….emvm(vm=v0)为G中的一条欧拉回路,复杂度为O(e*e)。 3、欧拉算法C语言描述 如下为算法的图示动态过程:

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法. 2.龙格-库塔法。 3.单步法的收敛性与稳定性。 重点、难点 一、微分方程的数值解法 在工程技术或自然科学中,我们会遇到的许多微分方程的问题,而我们只能对其中具有较简单形式的微分方程才能够求出它们的精确解。对于大量的微分方程问题我们需要考虑求它们的满足一定精度要求的近似解的方法,称为微分方程的数值解法。本章我们主要 讨论常微分方程初值问题?????==00 )() ,(y x y y x f dx dy 的数值解法。 数值解法的基本思想是:在常微分方程初值问题解的存在区间[a,b]内,取n+1个节点a=x 0<x 1<…<x N =b (其中差h n = x n –x n-1称为步长,一般取h 为常数,即等步长),在这些节点上把常微分方程的初值问题离散化为差分方程的相应问题,再求出这些点的上的差分方程值作为相应的微分方程的近似值(满足精度要求)。 二、欧拉法与改进欧拉法 欧拉法与改进欧拉法是用数值积分方法对微分方程进行离散化的一种方法。 将常微分方程),(y x f y ='变为() *+=?++1 1))(,()()(n x n x n n dt t y t f x y x y 1.欧拉法(欧拉折线法) 欧拉法是求解常微分方程初值问题的一种最简单的数值解法。 欧拉法的基本思想:用左矩阵公式计算(*)式右端积分,则得欧拉法的计算公式为:N a b h N n y x hf y y n n n n -= -=+=+)1,...,1,0(),(1 欧拉法局部截断误差 11121 )(2 ++++≤≤''=n n n n n x x y h R ξξ或简记为O (h 2)。

MATLAB Euler法解常微分方程

Euler 法解常微分方程 Euler 法解常微分方程算法: Step 1 分别取积分上限、积分下限、步长 Step 2计算h n n +=判断b n ≤是否成立,成立转到Step 3,否则继续进行Step 4 Step 3 计算),(1n n n n y x hf y y +=+ Step 4 ),(1n n n n y x hf y y +=+ Euler 法解常微分方程算程序: function euler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x 取值范围 %a----x 左区间端点值 %b----x 右区间端点值 %h----给定步长 x=min(A); b=max(A); y=y0; while x

0.4613 指导教师: 年 月 日 改进Euelr 法解常微分方程 改进Euler 法解常微分方程算法: Step 1 分别取积分上限、积分下限、步长 Step 2 取一个以h 为步长,a ,b 分别为左右端点的矩阵 Step 3 (1)做显性Euler 预测),( 1n n i i y x hf y y +=+ (2)将1+i y 带入,(),([2h 11++++=i i i i i x f y x f y y Step 4计算h n n +=判断b n ≤是否成立,成立返回Step 5 )],(),([2h 111+++++=i i i i i i y x f y x f y y 改进Euler 法解常微分方程算程序: function gaijineuler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x 取值范围 %a----x 左区间端点值 %b----x 右区间端点值 %h----给定步长 a=min(A); b=max(A); x=a:h:b; y(1)=y0; for i=1:length(x)-1 w1=feval(fun,x(i),y(i)); y(i+1)=y(i)+h*w1; w2=feval(fun,x(i+1),y(i+1)); y(i+1)=y(i)+h*(w1+w2)/2; end x=x'

常微分方程欧拉算法

常微分方程欧拉算法 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

常微分方程欧拉算法 摘要:本文主要论述了常微分方程的欧拉算法的算法原理,误差分析,实例,程序,以及算法比较等内容。 关键词:常微分方程 显式欧拉法 隐式欧拉法 引言:微分方程初值问题模型是常见的一类数学模型。对于一些简单而典型的微分方程模型,譬如线性方程、某些特殊的一阶非线性方程等是可以设法求出其解析解的,并有理论上的结果可资利用。但在数学建模中碰到的常微分方程初值问题模型,通常很难,甚至根本无法求出其解析解,而只能求其近似解。因此,研究其数值方法,以便快速求得数值鳃有其重大意义。 一、欧拉算法原理 对于微分方程初值问题 的解在xy 平面上是一条曲线,称为该微分方程的积分曲线。积分曲线上一点(),x y 的切线斜率等于函数f 在点(),x y 的值,从初始点()000,P x y 出发,向该点的切线方向推进到下一个点()111,P x y ,然后依次做下去,得到后面的未知点。一般地,若知道(),n n n P x y 依上述方法推进到点()111,n n n P x y +++,则两点的坐标关系为: 即 这种方法就是欧拉(Euler )方法(也叫显式欧拉法或向前欧拉法)。当初值0y 已知,则n y 可以逐步算出 对微分方程()=x y dy f dx ,从n x 到1n x +积分,那么有 现在用左矩形公式()(),n n hf x y x 代替()()1 ,n n x x f t y t dt +?,n y 代替()n y x ,1n y +代替() 1n y x +就得到了欧拉方法。如果用右矩形公式()()11,n n hf x y x ++去代替右端积分,则得到另外一 个公式,该方法就称为隐式欧拉法(或后退欧拉法),其公式为 欧拉公式与隐式欧拉公式的区别在于欧拉公式是关于1n y +的一个直接计算公式,然而隐式欧拉公式右端含有1n y +,所以它实际上是关于1n y +的一个函数方程。 二、实例 例 取h=,用Euler 方法解

MATLAB求解常微分方程数值解

利用MATLAB求解常微分方程数值解

目录 1. 内容简介 (1) 2. Euler Method(欧拉法)求解 (1) 2.1. 显式Euler法和隐式Euler法 (2) 2.2. 梯形公式和改进Euler法 (3) 2.3. Euler法实用性 (4) 3. Runge-Kutta Method(龙格库塔法)求解 (5) 3.1. Runge-Kutta基本原理 (5) 3.2. MATLAB中使用Runge-Kutta法的函数 (7) 4. 使用MATLAB求解常微分方程 (7) 4.1. 使用ode45函数求解非刚性常微分方程 (8) 4.2. 刚性常微分方程 (9) 5. 总结 (9) 参考文献 (11) 附录 (12) 1. 显式Euler法数值求解 (12) 2. 改进Euler法数值求解 (12) 3. 四阶四级Runge-Kutta法数值求解 (13) 4.使用ode45求解 (14)

1.内容简介 把《高等工程数学》看了一遍,增加对数学内容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。 实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。 文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。最后考察MATLAB中各个函数的适用范围,当遇到实际工程问题时能够正确地得到问题的数值解。 2.Euler Method(欧拉法)求解 Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节内容分别介绍这3种方法的具体内容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

fortran下欧拉法求解常微分方程(实例)

1. Euler 公式 100(,)() i i i i y y hf x y y y x +=+??=? 实例: ,00(,),0,1,01f x y x y x y x =-==≤≤ 精确解为:1x y x e -=+- 程序代码: DIMENSION x(0:20),y(0:20),z(0:20),k(0:21) DOUBLE PRECISION x,y,z,k,h,x0,y0,z0,k0,n f(x,y)=x-y n=20 h=1/n x(0)=0 y(0)=0 DO i=0,n-1 y(i+1)=y(i)+f(x(i),y(i))*h x(i+1)=x(i)+h ENDDO k(0)=0 DO i=0,n z(i)=k(i)+exp(-k(i))-1 k(i+1)=k(i)+h END DO open(10,file='1.txt') WRITE(10,10) (x(i),y(i),z(i),i=0,20) WRITE(*,10) (x(i),y(i),z(i),i=0,20) 10 FORMAT(1x,f10.8,2x,f10.8,2x,f10.8/) END 输出结果: 0.00000000 0.00000000 0.00000000 0.05000000 0.00000000 0.00122942 0.10000000 0.00250000 0.00483742 0.15000000 0.00737500 0.01070798 0.20000000 0.01450625 0.01873075 0.25000000 0.02378094 0.02880078 ???=='00)(),(y x y y x f y ???=='0 0)(),(y x y y x f y

MATLABEuler法解常微分方程

Euler法解常微分方程 Euler法解常微分方程算法: Step 1 分别取积分上限、积分下限、步长 Step 2计算判断是否成立,成立转到Step 3,否则继续进行Step 4 Step 3 计算 Step 4 Euler法解常微分方程算程序: function euler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 x=min(A); b=max(A); y=y0; while x

Step 3 (1)做显性Euler预测 (2)将带入 Step 4计算判断是否成立,成立返回Step 3,否则继续进行Step 5 Step 5 改进Euler法解常微分方程算程序: function gaijineuler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 a=min(A); b=max(A); x=a:h:b; y(1)=y0; for i=1:length(x)-1 w1=feval(fun,x(i),y(i)); y(i+1)=y(i)+h*w1; w2=feval(fun,x(i+1),y(i+1)); y(i+1)=y(i)+h*(w1+w2)/2; end x=x' y=y' 例:用改进Euler法计算下列初值问题(取步长h=0.25) 输入:fun=inline('-x*y^2') gaijineuler2(fun,2,[0 5],0.25) 得到: x = 0.2500 0.5000 0.7500 1.0000 1.2500 1.5000 1.7500 2.0000 2.2500 2.5000 2.7500

图的随机生成及欧拉(回)路的确定

《离散数学》实验报告 (2015 / 2016 学年第一学期) 题目:图的随机生成及欧拉(回)路的确定 专业信息安全 学生姓名 班级学号 指导教师 指导单位计算机学院计算机科学与技术系 日期2015年12月29日

图的随机生成及欧拉(回)路的确定 一、实验内容和要求 内容:编程随机生成n个结点的无向图并能进行(半)欧拉图的判定,若是则给出欧拉(回)路。 要求:对给定n个结点,随机生成邻接矩阵以确定某无向简单图并进行欧拉图和半欧拉图的判定,若符合则给出至少一条欧拉回路或欧拉路。 二、实验目的 对给定n个结点,随机生成邻接矩阵以确定某无向简单图并进行欧拉图和半欧拉图的判定,若符合则给出至少一条欧拉回路或欧拉路。 三、实验任务 1、输入结点个数据生成随机图 2、进行(半)欧拉图的判定 3、若是则给出欧拉(回)路。 四、实验内容 #include #include #include using namespace std; class Euler { public: Euler(int num); ~Euler(); void DFS(int begin); //公有的深度优先搜索函数void inputEdge(); //输入边 void PrintAM(); //打印邻接矩阵 void PrintRM(); //打印可达性矩阵 void Warshall(); //Warshall算法求可达性矩阵bool IsConnected(); / /判断图是否连通 int IsEorSE(); //判断图是欧拉图还是半欧拉图 bool isEuler; private: void DFS(int u,int v,bool **visited); / /私有的深度优先搜索函数 int n; int **a; //定义动态二维数组 int **p; //定义可达性矩阵

常微分方程欧拉算法

常微分方程欧拉算法 Prepared on 22 November 2020

常微分方程欧拉算法 摘要:本文主要论述了常微分方程的欧拉算法的算法原理,误差分析,实例,程序,以及算法比较等内容。 关键词:常微分方程 显式欧拉法 隐式欧拉法 引言:微分方程初值问题模型是常见的一类数学模型。对于一些简单而典型的微分方程模型,譬如线性方程、某些特殊的一阶非线性方程等是可以设法求出其解析解的,并有理论上的结果可资利用。但在数学建模中碰到的常微分方程初值问题模型,通常很难,甚至根本无法求出其解析解,而只能求其近似解。因此,研究其数值方法,以便快速求得数值鳃有其重大意义。 一、欧拉算法原理 对于微分方程初值问题 的解在xy 平面上是一条曲线,称为该微分方程的积分曲线。积分曲线上一点(),x y 的切线斜率等于函数f 在点(),x y 的值,从初始点()000,P x y 出发,向该点的切线方向推进到下一个点()111,P x y ,然后依次做下去,得到后面的未知点。一般地,若知道(),n n n P x y 依上述方法推进到点()111,n n n P x y +++,则两点的坐标关系为: 即 这种方法就是欧拉(Euler )方法(也叫显式欧拉法或向前欧拉法)。当初值0y 已知,则n y 可以逐步算出 对微分方程()=x y dy f dx ,从n x 到1n x +积分,那么有 现在用左矩形公式()(),n n hf x y x 代替()()1 ,n n x x f t y t dt +?,n y 代替()n y x ,1n y +代替() 1n y x +就得到了欧拉方法。如果用右矩形公式()()11,n n hf x y x ++去代替右端积分,则得到另外一 个公式,该方法就称为隐式欧拉法(或后退欧拉法),其公式为 欧拉公式与隐式欧拉公式的区别在于欧拉公式是关于1n y +的一个直接计算公式,然而隐式欧拉公式右端含有1n y +,所以它实际上是关于1n y +的一个函数方程。 二、实例 例 取h=,用Euler 方法解

欧拉运动微分方程各项的单位

第四章 1 欧 拉 运 动 微 分 方 程 d d u f t p =-?1 ζ 各 项 的 单 位 是: (1) 单 位 质 量 力 (2) 单 位 重 能 量 (3) 单 位 重 的 力 (4) 上 述 回 答 都 不 对 2. 欧 拉 运 动 微 分 方 程 在 每 点 的 数 学 描 述 是: (1)流入的质量流量等于流出的质量流量(2) 单 位 质 量 力 等 于 加 速 度 (3) 能 量 不 随 时 间 而 改 变 (4) 服 从 牛 顿 第 二 定 律 3. 欧 拉 运 动 微 分 方 程: (1) 适 用 于 不 可 压 缩 流 体, 不 适 用 于 可 压 缩 流 体 (2) 适 用 于 恒 定 流, 不 适 用 非 恒 定 流 (3) 适 用 于 无 涡 流, 不 适 用 于 有 涡 流 (4) 适 用 于 上 述 所 提 及 的 各 种 情 况 下 流 体 流 动 4. 水 流 一 定 方 向 应 该 是( ) (1) 从 高 处 向 低 处 流; (2) 从 压 强 大 处 向 压 强 小 处 流; (3) 从 流 速 大 的 地 方 向 流 速 小 的 地 方 流; (4) 从 单 位 重 量 流 体 机 械 能 高 的 地 方 向 低 的 地 方 流。 5. 理 想 流 体 流 经 管 道 突 然 放 大 断 面 时, 其 测 压 管 水 头 线( ) (1) 只 可 能 上 升; (2) 只 可 能 下 降; (3) 只 可 能 水 平; (4) 以 上 三 种 情 况 均 有 可 能。 6 在应用恒定总流的能量方程时,可选用图中的( ) 断 面, 作为计算断面。 (a )1,2,3,4,5 (b )1,3,5 (c )2,4 (d )2,3,4 1 122 3 3 4 4 5 5 7. 设有一恒定汇流,如图所示,Q Q Q 312=+, 根据总流伯努力方程式,则有( ) ()12221111 2 2222 2 3333 2 13 23 z p g V g z p g V g z p g V g h h w w + + ++ + =+ + ++--ραραρα ()()() 22211111 2 22222 2 ρραρραgQ z p g V g gQ z p g V g + + ++ + =++ + ++--ρραρρg Q Q z p g V g gQ h gQ h w w ()()123333 2 12213 23 (3) 上 述 两 式 均 不 成 立, 都 有 错 误;

相关文档
最新文档