文档库 最新最全的文档下载
当前位置:文档库 › 基于原灰微分方程的优化白微分方程(ijeme-v1-n6-07)

基于原灰微分方程的优化白微分方程(ijeme-v1-n6-07)

基于原灰微分方程的优化白微分方程(ijeme-v1-n6-07)
基于原灰微分方程的优化白微分方程(ijeme-v1-n6-07)

龙格库塔解微分方程

《数值分析》课程实验报告 一、实验目的 1.掌握用MA TLAB求微分方程初值问题数值解的方法; 2.通过实例学习微分方程模型解决简化的实际问题; 3.了解龙格库塔方法的基本思想。 二、实验内容 用龙格库塔方法求下列微分方程初值问题的数值解 y’=x+y y(0)=1 0

end fprintf(‘结果矩阵,第一列为x(n),第二列~第五列为k1~k4,第六列为y(n+1)的结果') z %在命令框输入下列语句 %yy=inline('x+y'); %>> rk(yy,0,1,0.2,0,1) %将得到结果 四、实验小结 通过实验结果分析可知,龙格库塔方法求解常微分方程能获得比较好的数值解,龙格库塔方法的数值解的精度较高,方法比较简便易懂。

MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程

姓名:樊元君学号:02 日期: 一、实验目的 掌握MATLAB语言、C/C++语言编写计算程序的方法、掌握改进欧拉法与四阶龙格-库塔求解一阶常微分方程的初值问题。掌握使用MATLAB程序求解常微分方程问题的方法。 : 二、实验内容 1、分别写出改进欧拉法与四阶龙格-库塔求解的算法,编写程序上机调试出结果,要求所编程序适用于任何一阶常微分方程的数值解问题,即能解决这一类问题,而不是某一个问题。 实验中以下列数据验证程序的正确性。 求,步长h=。 * 2、实验注意事项 的精确解为,通过调整步长,观察结果的精度的变化 ^ )

三、程序流程图: ●改进欧拉格式流程图: ~ |

●四阶龙格库塔流程图: ] 四、源程序: ●改进后欧拉格式程序源代码: function [] = GJOL(h,x0,y0,X,Y) format long h=input('h='); … x0=input('x0='); y0=input('y0='); disp('输入的范围是:'); X=input('X=');Y=input('Y='); n=round((Y-X)/h); \

i=1;x1=0;yp=0;yc=0; for i=1:1:n x1=x0+h; yp=y0+h*(-x0*(y0)^2);%yp=y0+h*(y0-2*x0/y0);% · yc=y0+h*(-x1*(yp)^2);%yc=y0+h*(yp-2*x1/yp);% y1=(yp+yc)/2; x0=x1;y0=y1; y=2/(1+x0^2);%y=sqrt(1+2*x0);% fprintf('结果=%.3f,%.8f,%.8f\n',x1,y1,y); : end end ●四阶龙格库塔程序源代码: function [] = LGKT(h,x0,y0,X,Y) 。 format long h=input('h='); x0=input('x0='); y0=input('y0='); disp('输入的范围是:'); " X=input('X=');Y=input('Y='); n=round((Y-X)/h); i=1;x1=0;k1=0;k2=0;k3=0;k4=0; for i=1:1:n ~ x1=x0+h; k1=-x0*y0^2;%k1=y0-2*x0/y0;% k2=(-(x0+h/2)*(y0+h/2*k1)^2);%k2=(y0+h/2*k1)-2*(x0+h/2)/(y0+h/2*k1);% k3=(-(x0+h/2)*(y0+h/2*k2)^2);%k3=(y0+h/2*k2)-2*(x0+h/2)/(y0+h/2*k2);% k4=(-(x1)*(y0+h*k3)^2);%k4=(y0+h*k3)-2*(x1)/(y0+h*k3);% … y1=y0+h/6*(k1+2*k2+2*k3+k4);%y1=y0+h/6*(k1+2*k2+2*k3+k4);% x0=x1;y0=y1; y=2/(1+x0^2);%y=sqrt(1+2*x0);% fprintf('结果=%.3f,%.7f,%.7f\n',x1,y1,y); end · end

matlab编的4阶龙格库塔法解微分方程的程序

matlab编的4阶龙格库塔法解微分方程的程序 2010-03-10 20:16 function varargout=saxplaxliu(varargin) clc,clear x0=0;xn=1.2;y0=1;h=0.1; [y,x]=lgkt4j(x0,xn,y0,h); n=length(x); fprintf(' i x(i) y(i)\n'); for i=1:n fprintf('%2d %4.4f %4.4f\n',i,x(i),y(i)); end function z=f(x,y) z=-2*x*y^2; function [y,x]=lgkt4j(x0,xn,y0,h) x=x0:h:xn; n=length(x); y1=x; y1(1)=y0; for i=1:n-1 K1=f(x(i),y1(i)); K2=f(x(i)+h/2,y1(i)+h/2*K1); K3=f(x(i)+h/2,y1(i)+h/2*K2); K4=f(x(i)+h,y1(i)+h*K3); y1(i+1)=y1(i)+h/6*(K1+2*K2+2*K3+K4); end y=y1; 结果: i x(i) y(i) 1 0.0000 1.0000 2 0.1000 0.9901 3 0.2000 0.9615 4 0.3000 0.9174 5 0.4000 0.8621 6 0.5000 0.8000 7 0.6000 0.7353 8 0.7000 0.6711 9 0.8000 0.6098 10 0.9000 0.5525 11 1.0000 0.5000 12 1.1000 0.4525 13 1.2000 0.4098

经典四阶龙格库塔法解一阶微分方程组

1.经典四阶龙格库塔法解一阶微分方程组 1.1运用四阶龙格库塔法解一阶微分方程组算法分析 ),,(1k k k y x t f f =, )2,2,2(112g h y f h x h t f f k k k +++= )2 ,2,2(223g h y f h x h t f f k k k +++= ),,(334hg y hf x h t f f k k k +++= ),,(1k k k y x t g g = )2,2,2(112g h y f h x h t g g k k k +++= )2,2,2(223g h y f h x h t g g k k k +++= ),,(334hg y hf x h t g g k k k +++= ) 22(6 )22(6 43211 43211g g g g h y y f f f f h x x k k k k ++++=++++=++ 1k k t t h +=+ 经过循环计算由 推得 …… 每个龙格-库塔方法都是由一个合适的泰勒方法推导而来,使得其最终全局误差为() N O h ,一种折中方法是每次进行若干次函数求值,从而省去高阶导数计算。4阶龙格-库塔方法(RK4)是最常用的,它适用于一般的应用,因为它非常精 准,稳定,且易于编程。 000,,t x y ()()111222,,,,t x y t x y (1-1) (1-2) (1-3) (1-4) (1-5) (1-6) (1-7) (1-8) (1-9) (1-10)

1.2经典四阶龙格库塔法解一阶微分方程流程图 图1-1 经典四阶龙格库塔法解一阶微分方程流程图 1.3经典四阶龙格库塔法解一阶微分方程程序代码: #include #include using namespace std; void RK4( double (*f)(double t,double x, double y),double (*g)(double t,double x, double y) ,double initial[3], double resu[3],double h) { double f1,f2,f3,f4,g1,g2,g3,g4,t0,x0,y0,x1,y1; t0=initial[0];x0=initial[1];y0=initial[2]; f1=f(t0,x0,y0); g1=g(t0,x0,y0); f2=f(t0+h/2, x0+h*f1/2,y0+h*g1/2); g2=g(t0+h/2, x0+h*f1/2,y0+h*g1/2); f3=f(t0+h/2, x0+h*f2/2,y0+h*g2/2); g3=g(t0+h/2,

偏微分方程理论的归纳与总结

偏微分方程基本理论的归纳与总结 偏微分方程是储存自然信息的载体,自然现象的深层次性质可以通过数学手段从方程中推导出来.最为一种语言,微分方程在表达自然定律方面比文字具有更强的优越性.微分方程是一个庞大的体系,它的基本问题就是解的存在性和唯一性.该学科的主要特征是不存在一种可以统一处理大多数偏微分方程的适定性问题的普适的方法和理论.这是与常微分方程有显著差异的地方.这种特性使得我们将方程分为许多种不同类型,这种分类的依据主要来自数学与自然现象这两个方面.从数学的角度,方程的类型一般总是对应于一些普遍的理论和工具.换句话讲,如果能建立一个普遍性的方法统一处理一大类方程问题,那么这个类型就被划分出来.而从自然现象的角度,我们又可以根据不同的运动类型以及性质将方程进行分类.当然这两种方式常常不能截然区分,通常它们是相互关联的,这就造成方程的概念有许多重叠现象. 根据数学的特征,偏微分方程主要被分为五大类,它们是: (1)线性与拟微分方程,研究这类方程的主要工具是Fourier分析方法; (2)椭圆型方程,它的方法是先验估计+泛函分析手段; (3)抛物型方程,主要是Galerkin方法,算子半群,及正则性估计; (4)双曲型方程,对应于Galerkin方法; (5)一阶偏微分方程,主要工具是数学分析方法. 从自然界的运动类型出发,偏微分方程可分为如下几大类: (1)稳态方程(非时间演化方程); (2)耗散型演化方程,这类方程描述了时间演化过程中伴有能量损耗与补充的自然运动.相变与混沌是它们的主要内容; (3)保守系统,如具有势能的波方程.该系统控制的运动是与外界隔离的,及无能量输入,也无能量损耗.行波现象与周期运动是它们的主要特征; (4)守恒律系统,这类方程是一阶偏微分方程组,它们与保守系统具有类似的性质,可视为物质流的守恒.激波行为是由守恒律系统来控制. 下面具体来介绍三类经典方程: 三类典型方程:椭圆型方程,抛物型方程,双曲型方程,即偏微分方程模型的建立,解问题的解法以及三类典型方程的基本理论. 关于三类典型方程定解问题的解题方法,它们主要是分离变量法、积分变换法、特征线法、球面平均法、降维法和Green 函数方法. 关于三类典型方程的基本理论——极值原理和能量估计,并由此给出了解的唯一性和稳定性的相关结论. 具体来说,关于二阶线性椭圆形方程,我们研究它的古典解和弱解.前者主要介绍了基本解、调和函数的基本性质、Green 函数、极值原理、最大模估计、能量方法和变分原理;而后者的研究则需要知道Sobolev空间的相关知识再加以研究;关于二阶线性抛物型方程,主要研究它的Fourier 变换、特殊的求解方法、基本解、方程式和方程组的最大值原理以及最大模估计、带有非经典边界条件和非局部项的方程式的最大值原理及能量方法;关于二阶线性双曲型方程,主要研究初值问题的求解方法、初值问题的能量不等式与解的适定性、以及混合问题的能量模估计与解的适定性. 椭圆、抛物和双曲这三类线性偏微分方程解的适定性问题,它们分别以拉普拉斯方程、热传导方程和波动方程作为代表.具体地说,对于某些规则的求解区域试图求出满足特定线性偏微分方程和定解条件的具体解,这就决定了存在性问题;再利用方程本身所具有的特殊性质,将证明所求解是唯一的,也就解决了唯一性问题;关于连续依赖性问题,需要在不同函数空

二次微分方程的通解

教学目的:使学生掌握二阶常系数齐次线性微分方程的解法,了解二阶常系数非齐 次线性微分方程的解法 教学重点:二阶常系数齐次线性微分方程的解法 教学过程: 一、二阶常系数齐次线性微分方程 二阶常系数齐次线性微分方程 方程 y py qy 0 称为二阶常系数齐次线性微分方程 其中p 、q 均为常数 如果y 1、y 2是二阶常系数齐次线性微分方程的两个线性无关解 那么y C 1y 1C 2y 2就是它的通解 我们看看 能否适当选取r 使y e rx 满足二阶常系数齐次线性微分方程 为此将 y e rx 代入方程 y py qy 0 得 (r 2 pr q )e rx 0 由此可见 只要r 满足代数方程r 2 pr q 0 函数y e rx 就是微分方程的解 特征方程 方程r 2 pr q 0叫做微分方程y py qy 0的特征方程 特征方程 的两个根r 1、r 2可用公式 2 422,1q p p r -±+-= 求出 特征方程的根与通解的关系 (1)特征方程有两个不相等的实根r 1、r 2时 函数x r e y 11=、x r e y 22=是方程的两个线性无 关的解 这是因为

函数x r e y 11=、x r e y 22=是方程的解 又x r r x r x r e e e y y )(212121-==不是常数 因此方程的通解为 x r x r e C e C y 2121+= (2)特征方程有两个相等的实根r 1r 2时 函数x r e y 11=、x r xe y 12=是二阶常系数齐次线性微分方程的两个线性无关的解 这是因为 x r e y 11=是方程的解 又 x r x r x r x r x r x r qxe e xr p e xr r xe q xe p xe 111111)1()2()()()(1211++++=+'+'' 0 )()2(121111=++++=q pr r xe p r e x r x r 所以x r xe y 12=也是方程的解 且x e xe y y x r x r ==1112不是常数 因此方程的通解为 x r x r xe C e C y 1121+= (3)特征方程有一对共轭复根r 1, 2i 时 函数y e ( i )x 、y e (i )x 是微分方程的 两个线性无关的复数形式的解 函数y e x cos x 、y e x sin x 是微分方程的两个线性无关 的实数形式的解 函数y 1e ( i )x 和y 2e (i )x 都是方程的解 而由欧拉公式 得 y 1e ( i )x e x (cos x i sin x ) y 2e ( i )x e x (cos x i sin x ) y 1y 22e x cos x ) (2 1cos 21y y x e x +=βα y 1y 22ie x sin x ) (21sin 21y y i x e x -=βα 故e x cos x 、y 2e x sin x 也是方程解 可以验证 y 1e x cos x 、y 2e x sin x 是方程的线性无关解 因此方程的通解为

MATLAB龙格-库塔方法解微分方程

龙格-库塔方法是一种经典方法,具有很高的精度,它间接的利用了泰勒级数展开,避免了高阶偏导数的计算。此处以最为经典的四级四阶龙格-库塔方法为例,计算格式如下 ()()()11234121324 3226,,22,+22,n n n n n n n n n n h y y K K K K K f x y h h K f x y K h h K f x y K K f x h y hK +?=++++???=????=++? ???????=+? ?????=++? 1龙格-库塔法解一阶ODE 对于形如()()0, dy f x y a x b dx y a y ?=<≤???=? 的一阶ODE 初值问题,可以直接套用公式,如今可以借助计算机方便的进行计算,下面给出一个实例 ()2 0101dy x y x dx y y ?=-<≤???=? 取步长h=0.1 ,此处由数学知识可得该方程的精确解为y =。在这里利用MATLAB 编程,计算数值解并与精确解相比,代码如下: (1)写出微分方程,便于调用和修改 function val = odefun( x,y ) val = y-2*x/y; end (2)编写runge-kutta 方法的函数代码

function y = runge_kutta( h,x0,y0 ) k1 = odefun(x0,y0); k2 = odefun(x0+h/2,y0+h/2*k1); k3 = odefun(x0+h/2,y0+h/2*k2); k4 = odefun(x0+h,y0+h*k3); y = y0+h*(k1+2*k2+2*k3+k4)/6; end (3)编写主函数解微分方程,并观察数值解与精确解的差异clear all h = 0.1; x0 = 0; y0 = 1; x = 0.1:h:1; y(1) = runge_kutta(h,x0,y0); for k=1:length(x) x(k) = x0+k*h; y(k+1) = runge_kutta(h,x(k),y(k)); end z = sqrt(1+2*x); plot(x,y,’*’);

龙格库塔算法解微分方程组-c语言

This program is to solve the initial value problem of following system of differential equations: dx/dt=x+2*y,x(0)=0, dy/dt=2*x+y,y(0)=2, x and y are to be calculated ****************************************************************************/ #include<> #include<> #define steplength //步长?è可¨|根¨′据Y需¨¨要°a调ì??整; #define FuncNumber 2 //FuncNumber为a微?é分¤方¤程¨?的ì数oy目; void main() { float x[200],Yn[20][200],reachpoint;int i; x[0]=0;Yn[0][0]=0;Yn[1][0]=2; //初值|ì条?件t; reachpoint=; //所¨′求¨?点ì可¨|根¨′据Y需¨¨要°a调ì??整; void rightfunctions(float x ,float *Auxiliary,float *Func); void Runge_Kutta(float *x,float reachpoint, float(*Yn)[200]); Runge_Kutta(x ,reachpoint, Yn); printf("x "); for(i=0;i<=(reachpoint-x[0])/steplength;i++) printf("%f ",x[i]); printf("\nY1 "); for(i=0;i<=(reachpoint-x[0])/steplength;i++) printf("%f ",Yn[0][i]); printf("\nY2 "); for(i=0;i<=(reachpoint-x[0])/steplength;i++) printf("%f ",Yn[1][i]); getchar(); } void rightfunctions(float x ,float *Auxiliary,float *Func)//当ì?à右?¨°方¤程¨?改变à时o?à,ê需¨¨要°a改变à; { Func[0]=Auxiliary[0]+2*Auxiliary[1]; Func[1]=2*Auxiliary[0]+Auxiliary[1]; } void Runge_Kutta(float *x,float reachpoint, float(*Yn)[200]) { int i,j; float Func[FuncNumber],K[FuncNumber][4],Auxiliary[FuncNumber]; for(i=0;i<=(reachpoint-x[0])/steplength;i++) { for(j=0;j

龙格库塔算法解微分方程组 c语言

/*************************************************************************** This program is to solve the initial value problem of following system of differential equati ons: dx/dt=x+2*y,x(0)=0, dy/dt=2*x+y,y(0)=2, x(0.2) and y(0.2) are to be calculated ****************************************************************************/ #include #include #define steplength 0.1 //步?长?è可¨|根¨′据Y需¨¨要°a调ì??整?; #define FuncNumber 2 //FuncNumber为a微?é分¤?方¤?程¨?的ì?数oy目?; void main() { float x[200],Yn[20][200],reachpoint;i nt i; x[0]=0;Yn[0][0]=0;Yn[1][0]=2; //初?值|ì条??件t; reachpoint=0.2; //所¨′求¨?点ì?可¨|根¨′据Y需¨¨要°a调ì??整?; void rightfunctions(float x ,float *Auxiliary,float *Func); void R unge_Kutta(float *x,float reachpoint, float(*Yn)[200]); Runge_Kutta(x ,reachpoi nt, Yn); printf("x "); for(i=0;i<=(reachpoint-x[0])/steplength;i++) printf("%f ",x[i]); printf("\nY1 "); for(i=0;i<=(reachpoint-x[0])/steplength;i++) printf("%f ",Yn[0][i]); printf("\nY2 "); for(i=0;i<=(reachpoint-x[0])/steplength;i++) printf("%f ",Yn[1][i]); getchar(); } void rightfunctions(float x ,float *Auxiliary,float *Func)//当ì?à右?¨°方¤?程¨?改?变à?时o?à,ê?需¨¨要°a改?变à?; { Func[0]=Auxiliary[0]+2*Auxiliary[1]; Func[1]=2*Auxiliary[0]+Auxiliary[1]; } void R unge_Kutta(float *x,float reachpoint, float(*Yn)[200]) { int i,j; float Func[FuncNumber],K[FuncNumber][4],Auxiliary[FuncNumber]; for(i=0;i<=(reachpoint-x[0])/steplength;i++) { for(j=0;j

偏微分方程理论学习-USTC

偏微分方程理论学习 一. 偏微分方程发展简介 1. 常微分方程 十七世纪微积分创立之后,常微分方程理论立刻就发展起来,当时应用常微分方程,解决几何与理学中的新问题。结果是在天体理学中不仅能得到并解释早先已经知晓的那些事实,而且得到了性的发现(例如,海王星的发现就是在对微分方程分析的基础上作出的)。 2. 偏微分方程 偏微分方程的研究要晚得多,对物理学中出现的偏微分方程研究在十八世纪中叶导致了分析学的一个新的分支------数学物理方程的建立。 J.达朗贝尔(D’Alembert )(1717-1783)、L.欧拉(Euler )(1707-1783)、D.伯努利(Bernoulli )(1700-1782)、J.拉格朗日(Lagrange )(1736-1813)、P.拉普拉斯(Laplace )(1749-1827)、S.泊松(Poisson )(1781-1840)、J.傅里叶(Fourier )(1768-1830)等人的工作为这一学科分支奠定了基础。它们在考察具体的数学物理问题中,所提出的思想与方法,竟适用于众多类型的微分方程,成为十九世纪末偏微分方程一般理论发展的基础。 十九世纪,偏微分方程发展的序幕是由法国数学家傅里叶拉开的,他于1822年发表的《热的解析理论》是数学史上的经典文献之一。傅里叶研究的主要是吸热或放热物体内部任何点处的温度随空间和时间的变化规律。在对物体的物理性状作出一定的限制(如均匀、各向同性)后,他根据物理原理推导出了三维空间的热传导方程 其中k 是一个参数,其值依赖于物体的质料。傅里叶当时解决的是如下特殊的热传导问题:设所考虑的物体为两端保持在温度0度、表面绝热且无热流通过的柱轴。在此情形下求解上述热传导方程,因为柱轴只涉及一维空间,所以这个问题也就是求解偏微分方程 ??? ????<<=>==??=??,0),()0,(,0,0),(,0),0(T T 222l x x f x T t t l T t T x k x , 其中后面两项分别是边界条件和初始条件。傅里叶为解这个方程用了分离变量法,他得到满足方程和边界条件的级数解为 为了满足初始条件,必须有

高阶线性微分方程常用解法介绍

高阶线性微分方程常用解法简介 关键词:高阶线性微分方程 求解方法 在微分方程的理论中,线性微分方程是非常值得重视的一部分内容,这不仅 因为线性微分方程的一般理论已被研究的十分清楚,而且线性微分方程是研究非线性微分方程的基础,它在物理、力学和工程技术、自然科学中也有着广泛应用。下面对高阶线性微分方程解法做一些简单介绍. 讨论如下n 阶线性微分方程:1111()()()()n n n n n n d x d x dx a t a t a t x f t dt dt dt ---++++= (1),其中()i a t (i=1,2,3,,n )及f(t)都是区间a t b ≤≤上的连续函数,如果 ()0f t ≡,则方程(1)变为 1111()()()0n n n n n n d x d x dx a t a t a t x dt dt dt ---++++= (2),称为n 阶齐次线性微分方程,而称一般方程(1)为n 阶非齐次线性微分方程,简称非齐次线性微分方程,并且把方程(2)叫做对应于方程(1)的齐次线性微分方程. 1.欧拉待定指数函数法 此方法又叫特征根法,用于求常系数齐次线性微分方程的基本解组。形如 111121[]0,(3),n n n n n n n d x d x dx L x a a a x dt dt dt ---≡++++=其中a a a 为常数,称为n 阶常系数齐次线性微分方程。 111111111111[]()()()n t n t t t t n n n n n n n t t n n n n n n n d e d e de L e a a a e dt dt dt a a a e F e F a a a n λλλλλλλλλλλλλλλλ---------≡++++=++++≡≡++++其中=0(4)是的次多项式. ()F λ为特征方程,它的根为特征根. 1.1特征根是单根的情形 设12,,,n λλλ是特征方程111()0n n n n F a a a λλλλ--≡++++=的n 个彼此不相等的根,则应相应地方程(3)有如下n 个解:12,,,.n t t t e e e λλλ(5)我们指出这n 个解在区间a t b ≤≤上线性无关,从而组成方程的基本解组. 如果(1,2,,)i i n λ=均为实数,则(5)是方程(3)的n 个线性无关的实值 解,而方程(3)的通解可表示为1212,n t t t n x c e c e c e λλλ=+++其中12,,,n c c c 为任意常数. 如果特征方程有复根,则因方程的系数是实常数,复根将称对共轭的出现.设1i λαβ=+是一特征根,则2i λαβ=-也是特征根,因而于这对共轭复根

四阶龙格库塔法解微分方程

四阶龙格库塔法解微分方程 一、四阶龙格库塔法解一阶微分方程 ①一阶微分方程:cos ,初始值y(0)=0,求 y t 解区间[0 10]。 MATLAB程序: %%%%%%%%%%% 四阶龙哥库塔法解一阶微分方程%%%%%%%%%%% y'=cost %%%%%%%%%%% y(0)=0, 0≤t≤10,h=0.01 %%%%%%%%%%% y=sint h=0.01; hf=10; t=0:h:hf; y=zeros(1,length(t)); y(1)=0; F=@(t,y)(cos(t)); for i=1:(length(t)-1) k1=F(t(i),y(i)); k2=F(t(i)+h/2,y(i)+k1*h/2); k3=F(t(i)+h/2,y(i)+k2*h/2); k4=F(t(i)+h,y(i)+k3*h); y(i+1)=y(i)+1/6*(k1+2*k2+2*k3+k4)*h; end subplot(211) plot(t,y,'-') xlabel('t'); ylabel('y'); title('Approximation'); span=[0,10]; p=y(1); [t1,y1]=ode45(F,span,p); subplot(212)

plot(t1,y1) xlabel('t'); ylabel('y'); title('Exact'); 图1 ②一阶微分方程:()22*/x t x x t =- ,初始值x(1)=2,求解区间[1 3]。 MATLAB 程序: %%%%%%%%%%% 四阶龙哥库塔法解微分方程 %%%%%%%%%%% x'(t)=(t*x-x^2)/t^2 %%%%%%%%%%% x(1)=2, 1≤t ≤3, h=1/128 %%%%%%%%%%% 精确解:x(t)=t/(0.5+lnt) h=1/128; %%%%% 步长 tf=3; t=1:h:tf; x=zeros(1,length(t)); x(1)=2; %%%%% 初始值

龙格库塔法求微分方程2

《MATLAB 程序设计实践》课程考核 一、编程实现“四阶龙格-库塔(R-K )方法求常微分方程”,并举一 例应用之。 【实例】采用龙格-库塔法求微分方程: ?? ?==+-=0 , 0)(1 '00 x x y y y 1、算法说明: 在龙格-库塔法中,四阶龙格-库塔法的局部截断误差约为o(h5),被广泛应用于解微分方程的初值问题。其算法公式为: )22(6 3211k k k h y y n n +++=+ 其中: ?????????++=++=++ ==) ,() 21 ,21()21 ,21() ,(34 23121hk y h x f k hk y h x f k hk y h x f k y x f k n n n n n n n n 2、流程图: 2.1、四阶龙格-库塔(R-K )方法流程图:

2.2、实例求解流程图:

3、源程序代码 3.1、四阶龙格-库塔(R-K)方法源程序: function [x,y] = MyRunge_Kutta(fun,x0,xt,y0,PointNum,varargin) %Runge-Kutta 方法解微分方程形为 y'(t)=f(x,y(x)) %此程序可解高阶的微分方程。只要将其形式写为上述微分方程的向量形式 %函数 f(x,y): fun %自变量的初值和终值:x0, xt %y0表示函数在x0处的值,输入初值为列向量形式 %自变量在[x0,xt]上取的点数:PointNum %varargin为可输入项,可传适当参数给函数f(x,y) %x:所取的点的x值 %y:对应点上的函数值 if nargin<4 | PointNum<=0 PointNum=100; end if nargin<3 y0=0; end y(1,:)=y0(:)'; %初值存为行向量形式h=(xt-x0)/(PointNum-1); %计算步长 x=x0+[0:(PointNum-1)]'*h; %得x向量值 for k=1:(PointNum)%迭代计算 f1=h*feval(fun,x(k),y(k,:),varargin{:}); f1=f1(:)'; %得公式k1 f2=h*feval(fun,x(k)+h/2,y(k,:)+f1/2,varargin{:}); f2=f2(:)'; %得公式k2 f3=h*feval(fun,x(k)+h/2,y(k,:)+f2/2,varargin{:}); f3=f3(:)'; %得公式k3 f4=h*feval(fun,x(k)+h,y(k,:)+f3,varargin{:}); f4=f4(:)'; %得公式k4 y(k+1,:)=y(k,:)+(f1+2*(f2+f3)+f4)/6; %得y(n+1) end 3.2、实例求解源程序: %运行四阶R-K法

浅谈微分方程的起源与发展史

浅谈微分方程的起源与发展史 摘要:微分方程起源于17世纪,简单的微分方程分别是牛顿、莱布尼茨和伯努利从几何和力学问题上解决的问题。这些早期发现开始于1690年,这逐渐导致一些特殊的微分方程的“特殊技能”的发展。虽然这些特殊的技术只适用于相对较少的情况下,但是他们可以解决许多微分方程在力学和几何中的问题,所以,他们的研究具有非常重要的现实意义。这些特殊的方法和问题,将有助于我们解决很多问题。 引言:很多的科学问题是需要人们根据事物的变化率来确定事物的特征。比如,我们可以 试着用已知的速度或加速度来计算粒子的位置,又比如,一些放射性物质可能是已知的衰变率,这就要求我们在一个给定的时间内确定材料的总量。通过这些例子,我们可以发现,如果知道自变量、未知函数以及函数的导数(或者微分)组成的关系式,得到的就是微分方程。最后再通过微分方程求出未知函数。 关键字:微分方程起源发展史 一、微分方程的思想萌芽 微分方程就是联系着自变量,未知函数以及其导数的关系式。微分方程理论的发展是跟随着微积分理论的建立发展起来的,一般地,客观世界的时间要服从一定的客观规律,这种连接,用数学语言表达,即是抽象为微分方程,一旦获得或研究的解决方案是明确的空气动力学行为,变量之间的规律是一目了然的。例如在物体运动中,唯一的计算就与瞬间速度之间有着紧密的联系,其结果往往形成一个微分方程,一旦求出解或研究清楚气动力学行为,就明确的掌握了物体的运动规律。 1.1微分方程的起源:微分方程起源于17世纪,简单的微分方程分别是牛顿、莱布 尼茨和伯努利从几何和力学问题上解决的问题。这些早期发现开始于1690年,这逐渐导致一些特殊的微分方程的“特殊技能”的发展。 1.2微分方程在实际问题中的应用:运用微分方程理论解决一些实际问题,即根 据生物学,物理学,化学,几何学等学科的实际问题及相关知识建立微分方程,讨论该方程解的性质,并由所得的解或解的性质反过来解释该实际过程。物质运动和它的变化规律在数学上是用函数关系描述的,但是在实际问题中往往不能直接写出反映运动规律的函数,却比较容易建立这些变量与他们的导数之间的关系式,即微分方程。只有一个自变量的微分方程称为常微分方程,简称微分方程。 例1 传染病模型 传染病(瘟疫)经常在全世界各地流行,假设传染病传播期间其他地区的总 x,在t时的健康人数为)(t y,染病人数不变,为常数n,最开始的染病人数为 人数为)(t x。 因为总人数为常数n

高数(下)要点(含微分方程)——自己整理的

第六章 微分方程 一、一阶微分方程 1、一阶线性方程 )()(x Q y x P dx dy =+ ])([)()(C dx e x Q e y dx x P dx x P +?? =?-通解 2、伯努利方程 )1,0()()(d d ≠=+n y x Q y x P x y n ).()(d d 1111x Q y x P x y n n n =+?---令.1n y z -= 二、可降阶的高阶方程 1.)()(x f y n = n 次积分 2. )',("y x f y = 不显含y 令)('x p y =,化为一阶方程 ),('p x f p =。 3. )',("y y f y = 不显含自变量 令)('y p y =,dy dp p dx y d =22,化为一阶方程。 三、线性微分方程 )()()()(1)1(1)(x f y x a y x a y x a y n n n n =+'+++-- , 0)(≡x f 时称为齐次的,0)(≡/x f 称为非齐次的。 1.二阶线性齐次线性方程 0)()(=+'+''y x Q y x P y (1) 如果函数)(1x y 与)(2x y 是方程(1)的两个解, 则 )()(2211x y C x y C y += 也是(1)的解,其中21,C C 是任意常数。 如果)(1x y 与)(2x y 是方程(1)的两个线性无关的特解, 则 )()(2211x y C x y C y += (21,C C 是任意常数)是(1)的通解. 两个函数)(1x y 与)(2x y 线性无关的充要条件为

C x y x y ≡/) () (21(常数) 2.二阶线性非齐次线性方程 设 )(*x y 是二阶线性非齐次线性方程 )()()(x f y x Q y x P y =+'+'' 的一个特解,)(x Y 是它对应的齐次方程(1)的通解,则 )()(*x y x Y y += 是该方程 的通解. 设)(* 1x y 与 )(*2x y 分别是二阶线性非齐次方程 )()()(1x f y x Q y x P y =+'+'' 与 )()()(2x f y x Q y x P y =+'+'' 的两个特解。则+ )(* 1x y )(* 2x y 是 )()()()(21x f x f y x Q y x P y +=+'+'' 的特解。(叠加原理) 3.二阶线性常系数齐次方程 0'"=++qy py y 特征方程02 =++q pr r ,特征根 ,r r 4.二阶线性常系数非齐次方程 i) 如果 x m e x P x f λ)()(=, 则二阶线性常系数非齐次方程具有形如 x m k e x Q x y λ)(*= 的特解。 其中,)(x P m 是 m 次多项式, )(x Q m 也是系数待定的m 次多项式; 2,1,0=k 依照λ为特征根的重数而取值. i) 如果 []x x P x x P e x f n l x ωωλsin )(cos )()(+=, 则二阶线性常系数非齐次方程的特解可设为 [] x x R x x R e x y m m x k ωωλsin )(cos )() 2()1(*+=

蒙特卡洛求定积及龙哥库塔解微分方程

蒙特卡洛法求定积分: 整体思路,蒙特卡洛求定积分的主要思想就是通过在取值范围内大量随机数的随机选取对函数进行求值,进而除以所取次数并乘以其区间,即为所积值。 Step 1: 在执行程序前,打开matlab,执行以下操作打开File—>New—>Function,并点击Function,弹出Editor窗口,将其中内容修改为 function [ y ] = f( x ) y=cos(x)+2.0; end (如图所示)。 Step 2: 在Editor窗口中点击File—>Save As,保存至所建立的文件夹内,保存名称必须为f.m。 Step 3: 回到Matlab程序中,将Current Folder改为与刚刚Function函数定义的保存路径一致的路径。Step 4: 在Command Window里输入以下源程序。 源程序: >> n=10^6; %用来表示精度,表示需要执行次数。 >> y=0; %初始化y=0,因为f(x)=cos(x)+2.0,下面出现y=y+f(x),故尔y用来统计计算出的所有f(x)值的和。 >> count=1; %从1开始计数,显然要执行n次。 >> while count<=n %当执行次数少于n次时,继续执行 x=unifrnd(0,4); %在matlab中,unifrnd是在某个区间内均匀选取实数(可为小数或整 数),表示x取0到4的任意数。 y=y+f(x); %求出到目前为止执行出的所有f(x)值的和,并用y表示 count=count+1; %count+1表示已执行次数再加一,将来通过与n的比对,判断是否执行下一次 end %如果执行次数已达n次,那么结束循环 z=y/n*4 %用y除以执行次数n,那么取得平均值,并用它乘以区间长度4,即可得到z 的近似值 z=7.2430 由于matlab中不能使用θ字符,故用z代替,即可得到θ=7.2395。 在执行过程中,发现每一次执行结果都会不一样,这是因为是随机选取,所以不同次数的计算结果会有偏差,但由于执行次数很多,从概率的角度来讲都是与真实值相近似的值。

相关文档
相关文档 最新文档