蒙特卡洛求定积及龙哥库塔解微分方程
龙格库塔法解微分方程组
龙格库塔法解微分方程组引言微分方程组是数学中经常遇到的问题,在物理、工程和自然科学中都有广泛的应用。
为了求解微分方程组,我们需要利用数值方法来逼近解析解。
本文将介绍一种常用的数值方法——龙格库塔法(Runge-Kutta method),并探讨如何利用该方法来解微分方程组。
龙格库塔法概述龙格库塔法是一种迭代数值方法,用于求解常微分方程的初值问题。
它的主要思想是将微分方程的解进行离散化,将其转化为一系列的逼近值。
龙格库塔法的基本步骤如下:1.确定步长h和迭代次数n。
2.初始化初始条件,并假设第一个逼近值为y(xi)。
3.依次计算每个逼近值,直到得到y(xi+n*h)为止。
在每个迭代步骤中,龙格库塔法根据前一步的逼近值来计算下一步的逼近值。
该方法具有高阶精度和较好的稳定性,在实际应用中广泛使用。
单一微分方程的龙格库塔法首先,我们来看如何利用龙格库塔法来解一阶常微分方程。
以方程dy/dx = f(x, y)为例,其中f(x, y)为给定的函数。
步骤一:确定步长和迭代次数选择合适的步长h和迭代次数n来进行数值计算。
步长h决定了离散化的精度,而迭代次数n决定了逼近解的数目。
步骤二:初始化条件并计算逼近值设初始条件为y(x0) = y0,其中x0为起始点,y0为起始点处的函数值。
我们先通过欧拉法计算出y(x0 + h)的逼近值,然后再通过该逼近值来计算下一个逼近值。
逼近值的计算公式如下:k1 = h * f(x0, y0)k2 = h * f(x0 + h/2, y0 + k1/2)k3 = h * f(x0 + h/2, y0 + k2/2)k4 = h * f(x0 + h, y0 + k3)y(x0 + h) = y0 + 1/6 * (k1 + 2k2 + 2k3 + k4)步骤三:重复步骤二直到得到y(xi+n*h)依次利用上一步计算出的逼近值来计算下一个逼近值,直到得到y(xi+n*h)为止。
微分方程组的龙格库塔法对于一阶微分方程组的初值问题,我们可以将其转化为向量形式。
4阶经典龙格库塔公式求解微分方程
4阶经典龙格库塔公式求解微分方程4阶龙格库塔法(也称为四阶Runge-Kutta方法)是一种常用于求解常微分方程的数值方法。
它是由德国数学家卡尔·龙格以及他的学生马丁·威尔海姆·库塔于1901年独立提出的。
以下是详细的介绍。
1.问题描述我们考虑一个典型的常微分方程初值问题:dy/dx = f(x, y),y(x0) = y0其中,x0是给定的初始点,y(x)是我们要求解的函数,f(x,y)是已知的函数。
2.方法原理四阶龙格库塔方法的基本思想是通过使用全区间的函数信息来估计下一步的函数值。
在每个步骤中,我们计算四个不同的估计量,然后将它们组合起来以获取最终的解。
具体来说,我们首先计算在初始点x0上的斜率k1=f(x0,y0)。
然后我们计算在x0+h/2处的斜率k2=f(x0+h/2,y0+h/2*k1),其中h是步长。
以此类推,我们计算k3和k4分别在x0+h/2和x0+h处的斜率。
然后,我们通过加权组合这些斜率来计算下一个点的函数值y1:y1=y0+(h/6)*(k1+2*k2+2*k3+k4)。
3.算法步骤以下是使用四阶龙格库塔法求解常微分方程的详细步骤:步骤1:给定初始条件 y(x0) = y0,选择步长 h 和积分终点 x_end。
步骤2:计算积分步数n:n = (x_end - x0)/h。
步骤3:设置变量x=x0和y=y0,并将步长设置为h。
步骤4:对每个步数i=1,2,...,n,执行以下计算:4.1:计算斜率k1=f(x,y)。
4.2:计算斜率k2=f(x+h/2,y+h/2*k1)。
4.3:计算斜率k3=f(x+h/2,y+h/2*k2)。
4.4:计算斜率k4=f(x+h,y+h*k3)。
4.5:计算下一个点的函数值y1=y+(h/6)*(k1+2*k2+2*k3+k4)。
4.6:将x更新为x+h,y更新为y1步骤5:重复步骤4,直到达到积分终点 x_end。
第四讲龙格-库塔方法
第四讲龙格-库塔⽅法龙格-库塔⽅法3.2 Runge-Kutta法3.2.1 显式Runge-Kutta法的⼀般形式上节已给出与初值问题(1.2.1)等价的积分形式(3.2.1)只要对右端积分⽤不同的数值求积公式近似就可得到不同的求解初值问题(1.2.1)的数值⽅法,若⽤显式单步法(3.2.2)当,即数值求积⽤左矩形公式,它就是Euler法(3.1.2),⽅法只有⼀阶精度,若取(3.2.3)就是改进Euler法,这时数值求积公式是梯形公式的⼀种近似,计算时要⽤⼆个右端函数f的值,但⽅法是⼆阶精度的.若要得到更⾼阶的公式,则求积分时必须⽤更多的f值,根据数值积分公式,可将(3.2.1)右端积分表⽰为注意,右端f中还不能直接得到,需要像改进Euler法(3.1.11)⼀样,⽤前⾯已算得的f值表⽰为(3.2.3),⼀般情况可将(3.2.2)的表⽰为(3.2.4)其中这⾥均为待定常数,公式(3.2.2),(3.2.4)称为r级的显式Runge-Kutta法,简称R-K⽅法.它每步计算r个f值(即),⽽k由前⾯(i-1)个已算出的表⽰,故公式是显式的.例i如当r=2时,公式可表⽰为(3.2.5) 其中.改进Euler 法(3.1.11)就是⼀个⼆级显式R-K ⽅法.参数取不同的值,可得到不同公式.3.2.2 ⼆、三级显式R-K ⽅法对r=2的显式R-K ⽅法(3.2.5),要求选择参数,使公式的精度阶p 尽量⾼,由局部截断误差定义11122211()()[(,())(,)]n n n n n n n T y x y x h c f x y x c f x a h y b hk ++=--+++ (3.2.6)令,对(3.2.6)式在处按Taylor 公式展开,由于将上述结果代⼊(3.2.6)得要使公式(3.2.5)具有的阶p=2,即,必须(3.2.7)即由此三式求的解不唯⼀.因r=2,由(3.2.5)式可知,于是有解(3.2.8)它表明使(3.2.5)具有⼆阶的⽅法很多,只要都可得到⼆阶精度R-K⽅法.若取,则,则得改进Euler法(3.1.11),若取,则得,此时(3.2.5)为(3.2.9)其中称为中点公式.改进的Euler法(3.1.11)及中点公式(3.2.9)是两个常⽤的⼆级R-K⽅法,注意⼆级R-K⽅法只能达到⼆阶,⽽不可能达到三阶.因为r=2只有4个参数,要达到p=3则在(3.2.6)的展开式中要增加3项,即增加三个⽅程,加上(3.2.7)的三个⽅程,共计六个⽅程求4个待定参数,验证得出是⽆解的.当然r=2,p=2的R-K⽅法(3.2.5)当取其他数时,也可得到其他公式,但系数较复杂,⼀般不再给出.对r=3的情形,要计算三个k值,即其中将按⼆元函数在处按Taylor公式展开,然后代⼊局部截断误差表达式,可得可得三阶⽅法,其系数共有8个,所应满⾜的⽅程为(3.2.10)这是8个未知数6个⽅程的⽅程组,解也是不唯⼀的,通常.⼀种常见的三级三阶R-K⽅法是下⾯的三级Kutta⽅法:(3.2.11)附:R-K 的三级Kutta ⽅法程序如下function y = DELGKT3_kuta(f, h,a,b,y0,varvec) format long; N = (b-a)/h;y = zeros(N+1,1); y(1) = y0; x = a:h:b;var = findsym(f); for i=2:N+1K1 = Funval(f,varvec,[x(i-1) y(i-1)]);K2 = Funval(f,varvec,[x(i-1)+h/2 y(i-1)+K1*h/2]); K3 = Funval(f,varvec,[x(i-1)+h y(i-1)-h*K1+K2*2*h]);y(i) = y(i-1)+h*(K1+4*K2+K3)/6; %满⾜c1+c2+c3=1,(1/6 4/6 1/6)endformat short; 3.2.3 四阶R-K ⽅法及步长的⾃动选择利⽤⼆元函数Taylor 展开式可以确定(3.2.4)中r=4,p=4的R-K ⽅法,其迭代公式为111223344()n n y y h c k c k c k c k +=++++其中1(,)n n k f x y =,2221(,(,))n n n n k f x a h y b hf x y =++,⽽33311322(,)n n k f x a h y b hk b hk =+++ 44411422433(,)n n k f x a h y b hk b hk b hk =++++共计13个参数待定,Taylor 展开分析局部截断误差,使得精度达到四阶,即误差为5()O h 。
龙格库塔法解常微分方程
龙格库塔法解常微分方程龙格库塔法是一种常用的数值解决常微分方程(ODE)的数值计算方法。
它于1960年末由古斯塔夫·龙格库塔(Gustav Runge-Kutta)提出,并多次得到不同的改进和拓展,成为经典的数值解决ODE的一种方法。
龙格库塔法的基本思想是,将ODE的微分方程化为一组非线性的简单方程,通过求解这些简单方程来近似解决ODE。
龙格库塔法比较通用,可以解决一阶和多阶的常微分方程,其代表性的多阶龙格库塔方程有隐式四阶龙格库塔方程和显式四阶龙格库塔方程。
设微分方程组如下:$$\frac{ d y}{ d x }=f(x,y(x))$$由此可以推导出隐式四阶龙格库塔方程(前向差分形式):$$y_{n+1}=y_{n}+\frac{h}{6}(k_{1}+2k_{2}+2k_{3}+k_{4}) $$其中$h$是步长,$k_{1}=f(x_{n},y_{n})$,$k_{2}=f(x_{n}+\frac{h}{2},y_{n}+\frac{h}{2}k_{1})$,$k_{3}=f(x_{n}+\frac{h}{2},y_{n}+\frac{h}{2}k_{2})$,$k_{4}=f(x_{n}+h,y_{n}+hk_{3})$。
龙格库塔法有一个重要特点,就是具有“四步”方案,即在一个步长下只计算四次,完成整个迭代计算过程。
这使得龙格库塔法可以获得高效、稳定可靠的数值解。
补充来说,不同的函数问题有不同的龙格库塔方程,比如一阶非线性龙格库塔方程、二阶线性龙格库塔方程等。
总的说来,龙格库塔法是一种用来数值解常微分方程的有效、可靠的方法,它可以有效解决一阶、多阶和非线性的微分方程。
以分析性形式构建的方程组都可以得到精确的数值解,而且计算量也比较少,速度较快,是一种常用的数值求解ODE的方法。
因此,龙格库塔法作为一种能够有效解决常微分方程的数值计算方法,在理论和实践中均受到广泛的应用。
相比传统的求解方法,它具有更高的计算效率,能够更快速、更准确地给出ODE的数值解。
常微分方程龙格库塔法
常微分方程龙格库塔法在数学的世界里,有一种神秘的生物叫常微分方程。
它们就像是一道道难解的难题,让很多人抓耳挠腮,心里直叫苦。
不过,别担心,今天我们要聊的就是一种解这些难题的法宝——龙格库塔法。
听起来高大上,但其实它并没有那么可怕,反而可以说是我们的好帮手。
想象一下,你在山顶上,俯瞰着山谷。
你能看到小溪、绿树,还有那些蜿蜒的小路。
常微分方程就像是这些小路,虽然看起来复杂,但其实我们只需要找到合适的路径,顺着它一路走下去。
龙格库塔法就像是一双好鞋,能让你在这条路上走得稳稳当当,不用担心摔跤。
你可能会问,什么是龙格库塔法呢?简单来说,它就是一种数值解法,帮助我们在找不到解析解的时候,用一些聪明的方法来近似解决。
这玩意儿有几个版本,最常用的就是四阶龙格库塔法。
你可以把它想象成一个厨师,做菜的时候得先准备好材料,对吧?龙格库塔法也是如此,得先准备好初始条件和方程。
然后,它就开始了它的“烹饪”过程。
先把这些材料混合,取一些小样本,然后再慢慢调味,最后出炉的就是你想要的结果。
想想看,这个过程就像是我们做饭时不断尝味道,直到找到最佳口感。
你可能会觉得,这个方法听起来简单,但它却隐藏着许多智慧。
在每一步中,我们都得计算出一些斜率,这些斜率就像是那条小溪的流速,告诉我们水的流动方向。
通过这些信息,我们就能预测下一个位置在哪里。
每一步都在“拼图”,一点一点把整个图案拼凑起来。
这也挺像我们的生活,逐步向前,调整方向,不断摸索,最终才能看到那幅完整的画面。
这个过程并不是一帆风顺的。
方程可能会“发脾气”,变得特别复杂,让你心里直犯嘀咕。
不过别灰心,龙格库塔法就像是个灵活的解题高手,总能找到突破口。
关键在于,咱们要有耐心,细致入微,才能真正领悟它的奥秘。
数学就像一场旅行,虽然有时会迷路,但只要不放弃,最后总能找到回家的路。
别忘了,随着计算机技术的发展,龙格库塔法也有了更便捷的实现方式。
你只需要轻轻一按,电脑就能帮你完成复杂的计算,简直像是给了你一双“魔法手”。
四阶龙格库塔法求解微分方程组
四阶龙格库塔法求解微分方程组微分方程是数学中的一个重要分支,它描述了自然界中许多现象的发展规律。
在实际应用中,我们经常需要求解微分方程组,以得到系统的演化规律和性质。
本文将介绍一种常用的求解微分方程组的数值方法——四阶龙格库塔法。
一、微分方程组的数值解法微分方程组是形如下式的方程集合:begin{cases} frac{dy_1}{dx}=f_1(x,y_1,y_2,cdots,y_n) frac{dy_2}{dx}=f_2(x,y_1,y_2,cdots,y_n) cdotsfrac{dy_n}{dx}=f_n(x,y_1,y_2,cdots,y_n) end{cases} 其中,$y_1,y_2,cdots,y_n$是关于自变量$x$的未知函数,$f_1,f_2,cdots,f_n$是已知的函数。
求解微分方程组的数值方法主要有以下两种:1.欧拉法欧拉法是最简单的数值方法之一,它的基本思想是将微分方程组中的导数用差分代替,从而得到一个递推公式。
具体而言,欧拉法的递推公式为:$$y_{i+1}=y_i+hf(x_i,y_i)$$其中,$h$是步长,$x_i$和$y_i$分别是第$i$个点的自变量和因变量的值。
欧拉法的精度较低,容易出现数值误差,但是它的计算速度快,适用于一些简单的微分方程组。
2.龙格库塔法龙格库塔法是一种常用的高精度数值方法,它的基本思想是将微分方程组中的导数用一系列加权的差分代替,从而得到一个递推公式。
其中,四阶龙格库塔法是最为常用的一种。
具体而言,四阶龙格库塔法的递推公式为:begin{aligned} k_1&=hf(x_i,y_i)k_2&=hf(x_i+frac{h}{2},y_i+frac{k_1}{2})k_3&=hf(x_i+frac{h}{2},y_i+frac{k_2}{2})k_4&=hf(x_i+h,y_i+k_3)y_{i+1}&=y_i+frac{k_1+2k_2+2k_3+k_4}{6} end{aligned} 其中,$k_1,k_2,k_3,k_4$是加权的差分,$h$是步长,$x_i$和$y_i$分别是第$i$个点的自变量和因变量的值。
用Monte Carlo方法计算定积分
机投点。若点落在 y f (x) 下方称为中的,否则成为不中,则点中的概率为:
p ,若进行了N 次投点,其中n 次中的,则得到 的一个估计 M (b a)
1
M (b a)
n N
。
其实施步骤为:
1)独立产生2N 个U(0,1)的随机数 ui , vi ,i 1, 2,..., N;
2)计算 xi a ui (b a), yi Mvi 和 f (xi ) ;
10
0.9431
11
0.8474
12
0.4438
13
0.4385
14
0.6692
15
0.9327
16
0.2334
17
0.2148
18
0.9569
19
0.4379
20
0.5157
则满足条件 yi f (xi ) 的 yi 个数 n=12,利用公式(1)得到,所求积分的估计值为
M (b a) n 12 1.885 N 20
关个方面的 Monte Carlo 的使用,特别是在对数值结果的精确的讨论。 Monte Carlo 理论的应用非常广泛,由于作者的知识水平,研究能力有限,
Monte Carlo 理论在各行各业中都有广泛使用,思想、理论等方面仍存在欠缺之
处,但这些都是以后的努力研究的方向,有侍继续发掘。
参考文献: [1]曲双石,王会娟;MonteCarlo 方法及其应用[J];统计教育;2009.1. [2]柴中林,银俊成;蒙特卡罗方法计算定积分的进一步讨论[J];应用数学与 计算数学学报。2008.第 1 期. [3]张韵华,奚梅成,陈效群;数值计算方法与算法[M];科学出版社 2006.第 2 版.
龙格-库塔方法微积分教学
龙格-库塔方法8.2.1 二阶龙格-库塔方法常微分方程初值问题:做在点的泰勒展开:这里。
取,就有(8.11)截断可得到近似值的计算公式,即欧拉公式:若取,式(8.11)可写成:或(8.12)截断可得到近似值的计算公式:或上式为二阶方法,一般优于一阶的欧拉公式(8.2),但是在计算时,需要计算在点的值,因此,此法不可取。
龙格-库塔设想用在点和值的线性组合逼近式(8.12)的主体,即用(8.13)逼近得到数值公式:(8.14)或更一般地写成对式(8.13)在点泰勒展开得到:将上式与式(8.12)比较,知当满足时有最好的逼近效果,此时式(8.13)-式(8.14)。
这是4个未知数的3个方程,显然方程组有无数组解。
若取,则有二阶龙格-库塔公式,也称为改进欧拉公式:(8.15)若取,则得另一种形式的二阶龙格-库塔公式,也称中点公式:(8.16)从公式建立过程中可看到,二阶龙格-库塔公式的局部截断误差仍为,是二阶精度的计算公式。
类似地,可建立高阶的龙格-库塔公式,同时可知四阶龙格-库塔公式的局部截断误差为,是四阶精度的计算公式。
欧拉法是低精度的方法,适合于方程的解或其导数有间断的情况以及精度要求不高的情况,当解需要高精度时,必须用高阶的龙格-库塔等方法。
四阶龙格-库塔方法应用面较广,具有自动起步和便于改变步长的优点,但计算量比一般方法略大。
为了保证方法的收敛性,有时需要步长取得较小,因此,不适于解病态方程。
8.2.2 四阶龙格-库塔公式下面列出常用的三阶、四阶龙格-库塔计算公式。
三阶龙格-库塔公式(1)(8.17)(8.18)(3)(8.19)四阶龙格-库塔公式(1)(8.20)(8.21)例8.3用四阶龙格-库塔公式(8.20)解初值问题:解:取步长,计算公式为:计算结果列表8.3中。
表8.3 计算结果1 0.2 1.24789 1.24792 0.000032 3 4 0.40.60.81.637622.296183.533891.637782.296963.538020.000160.000780.004138.2.3 步长的自适应欧拉方法和龙格-库塔方法在计算时仅用到前一步的值,我们称这样的方法为单步法。
解常微分方程的三步rungekutta方法
华中科技大学硕士学位论文摘要常微分方程广泛出现于物理、生物、医学、工程、控制理论等许多科学与工程领域,其数学表述归结为常微分方程定解问题。
很多偏微分方程问题通过离散空间变量后也可以化为常微分方程问题来近似求解。
因此,研究常微分方程的数值解法具有重要的科学意义。
经过长时间的发展, 常微分方程定解问题的数值解法是已日趋成熟和完善,数值分析工作者构造了许多有实用价值的方法。
本文主要是构造一种新的数值方法,并对其进行理论分析与研究。
在本文的最开始,我们简要介绍Runge-Kutta方法(包括单步Runge-Kutta方法和两步Runge-Kutta方法)的背景,回顾Runge-Kutta方法在解常微分方程初值问题中的阶条件以及稳定性等理论的发展历程。
在第二章,我们首先介绍单步和两步Runge-Kutta方法阶条件。
随后引入了一类三步Runge-Kutta方法,研究了方法的零稳定性。
重点按Albrecht的A--方法推导新构造的三步Runge-Kutta方法的阶条件。
在第三章,我们针对该类三步Runge-Kutta方法,利用第二章推导出的阶条件,构造该类一簇3阶三步Runge-Kutta方法,用计算机搜索寻找到具有较大稳定区间的方法,画出其稳定区域,并与三步显式Adams方法进行比较。
最后一章,我们对新方法进行数值实验,并验证前面的理论分析结果。
关键词:Runge-Kutta方法;阶条件;树根理论;零稳定;绝对稳定区域;A-方法华中科技大学硕士学位论文AbstractOrdinary differential equations (ODEs) are widely used in the fields of physics, biology, medicine and many other engineering fields, its mathematical formulation attribute to ordinary differential equations for solutions. Many partial differential equations can be translated into the approximate solution of ordinary differential equations through discreting the quantity. There, studying the numerical solution of ordinary differential equations is very important. Now the issue of ordinary differential equations for the numerical solution is more and more mature and complete. The workers of numerical analysis constructed many practical value methods. This paper is to construct and research a new numerical method.At the beginning of this paper, we explain the background of the Runge-Kutta method(including single-step and two-step Runge-Kutta method), review the Order conditions and stability theory of Runge-Kutta method in the initial value problems.In the second chapter, we first introduce the order conditions of Runge-Kutta methods, then construct a new type of three-step Runge-Kutta methods and study its zero-stable. We main derive the order conditions of three-step Runge-Kutta method using the A-method of Albrecht.In the third chapter, we aim at that type of three-step Runge-Kutta methods, make use of the order conditions deduced in chapter II , construct three-step Runge-Kutta method of 3-order, searching the method with the calculator to have large regions of absolute stability, draw the region of stability and carry on a comparison with three-step Adams methods.In the last chapter, we carry on the number experiment to the new method, and verify the anterior result.Keywords: Runge-Kutta method; order conditions; algebraic criteria for order;zero-stable; region of absolute stability; A-method独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。
常微分方程初值问题的Runge-Kutta解法[开题报告]
毕业论文开题报告信息与计算科学常微分方程初值问题的Runge-Kutta解法一、选题的背景、意义常微分方程是指只有一个自变量的微分方程。
而且常微分方程在很多学科领域内有着重要的作用,如自动控制、各种电子学装置的设计、弹道的计算、飞机和导弹飞行的稳定性的研究、化学反应过程稳定性的研究等等,这些问题都可以化为求微分方程的解,或者化为研究解的性质的问题。
这些问题都包含某个变量关于另一个变量的变化。
大多数这样的问题需要求解一个初值问题,即求解满足给定初值条件的微分方程[]1。
现代科学、技术、工程中的大量数学模型都可以用常微分方程的初值问题来描述,所以研究常微分方程初值问题的一些性质、解法很有必要。
1.1 历史背景常微分方程在微积分概念出现后即已出现。
从莱布尼兹专门研究用变量变换解决一阶微分方程的求解问题的“求通解”时代,到1841年刘维尔的里卡蒂方程不存在一般初等解和柯西的初值问题的提出,常微分方程转向“求定解”时代。
再到19世纪末天体力学的太阳系稳定性问题眼界需要常微分方程解的大范围性态,从而发展到了“求所有解问题”。
最后到了20世纪六七十年代,常微分方程因为计算机的发展进入“求特殊解”阶段,发现了具有新性质的特殊的解和方程,如混沌(解)、奇异吸引子及孤立子等等[]2。
常微分方程初值问题的数值求解是求近似解的一种经典方法。
其中常微分初值问题的数4-和Runge-Kutta 值求解问题的方法又包括单步法和线性多步法[]3。
单步法主要有欧拉法[]8 5-。
Runge-Kutta法是最重要也最便于应用的单步法。
法[]101.2 国内外研究现状常微分方程在科学和工程中常用于建立数学模型,通常它们没有解析解,而需要数值方法来近似求解。
在科学的计算机化进程中,常微分方程也在不断地精进中,更在不同的领域得到了前所未有的发展和应用。
求解常微分方程的初值问题的数值方法有单步法和多步法。
其中单步法中的Runge-Kutta 方法是目前工程上求常微分方程数值解的基本方法。
四阶龙格库塔法求解微分方程组
四阶龙格库塔法求解微分方程组四阶龙格-库塔法(RK4)是一种常用的数值求解微分方程组的方法。
它通过将微分方程转化为差分方程,通过逐步迭代来求得方程的近似解。
首先,考虑一个一阶微分方程组:dx/dt = f(x,t)其中,x是一个向量,f是一个向量函数,t是时间。
我们的目标是求解x(t)。
RK4法的基本思想是,在每个步骤中,通过预测下一个时间点的解并进行修正来逼近实际的解。
具体步骤如下:1.给定初始条件x(t0)和步长h,计算t=t0+h。
2. 计算k1 = hf(x(t0),t0),即利用初始点(x(t0),t0)计算出的斜率。
3. 计算k2 = hf(x(t0)+k1/2,t0+h/2),即利用中间点(x(t0)+k1/2,t0+h/2)计算出的斜率。
4. 计算k3 = hf(x(t0)+k2/2,t0+h/2),同理得到另一个中间点的斜率。
5. 计算k4 = hf(x(t0)+k3,t0+h),即利用最后一个中间点(x(t0)+k3,t0+h)计算的斜率。
6.根据k1,k2,k3和k4计算下一个点的值:x(t1)=x(t0)+(k1+2k2+2k3+k4)/67.重复步骤2到6,直到达到所需的终止时间。
接下来,让我们通过一个具体的例子来说明RK4方法的应用。
假设我们要求解如下的一阶微分方程组:dx/dt = f(x,y,z)dy/dt = g(x,y,z)dz/dt = h(x,y,z)其中f,g和h是已知的向量函数,我们需要找到x(t),y(t)和z(t)。
首先,我们需要将该微分方程组转化为差分方程组。
我们将离散时间点t0,t1,t2,...,tn代入微分方程,得到:x(t0+h)=x(t0)+h*f(x(t0),y(t0),z(t0))y(t0+h)=y(t0)+h*g(x(t0),y(t0),z(t0))z(t0+h)=z(t0)+h*h(x(t0),y(t0),z(t0))然后,我们通过逐步迭代的方式来求解方程组。
《微分方程的数值解法maab四阶龙格—库塔法》PPT模板课件
k1 f (tn , yn )
k2
f (tn
1 2
h,
yn
h 2 k1)
k3
f (tn
1 2
h,
yn
h 2
k2
)
k 4 f (tn h , y n hk 3 )
四 阶 Runge-Kutta 法计算流程图
开始
h 初始条件:t
迭代次数:
;y
0
N
0
积分步长:
tn t0
for i = 1 : N
解析解: x x x1 3 2(((ttt))) 0 .0 8 1 1 2 P 8 k 0siw n t) (2 .6 3 0 3 3 P k 0siw n t) (0 .2 12 2 2 P k 0siw n t)(
第一个质量的位移响应时程
各种solver 解算指令的特点
解法指令 解题类 型
特点
ode45 非刚性 采用4、5阶Runge-Kutta法
适合场合 大多数场合的首选算法
ode23 非刚性 采用Adams算法
较低精度(10-3)场合
ode113 非刚性
ode23t ode15s
适度刚 性
刚性
ode23s 刚性 ode23tb 刚性
y2
(0)
(2.2) (2.3)
例:著名的Van der Pol方程
y (y21)y y0
令
y1y,y2y
Y
y y
1 2
降为一阶 Yyy12(y12y12)y2y1
初始条件
Y0
y1(0) y2(0)
y10 y20
3. 根据式(2.2)编写计算导数的M函数文件ODE文件
龙格库塔方法求解微分方程例子
龙格库塔方法求解微分方程例子耦合非线性谐振子网络模型为研究物理和生物等众多领域提供了一个有用的工具。
特别的,在这个网络模型上会出现混沌现象。
而对于如何控制这种非线性引起的混沌现象以及如何使得这些谐振子达到同步化这些方面的研究,最近引起了极大的关注。
这是因为在现实生活中,我们所面临的大部分系统都是混沌的。
而混沌由于对初始条件具有极高的敏感性,使得我们无法预测这类系统(比如天气预报)。
所以如何控制混沌对于改进我们的生活有着很大的帮助。
本文主要讨论如何用无序来抑制混沌。
无序在物理系统中通常意味着破坏空间和时间的规则性。
然而近来研究表明,在非线性系统中,无序起着相反的作用,例如热涨落或者随机分布,它们可以导致某些规则的图案!我们考虑一一维耦合非线性阻力摆链,加入无序相位,其动力学方程如下:将动力学方程变为一阶微分方程组可得:其中为无序相位,均匀无规地从区间内取值。
我们采用自由边界条件:。
并取适当的参数:定义平均相速度:。
其中。
可以用来描述系统的宏观集体行为。
在数值模拟中,我们取,即求得20个时刻的平均速度。
接下来我们的任务是利用龙格库塔方法来数值求解微分方程组,并求得相应的平均相速度与无序范围k 之间的关系。
结果表明,当k 充分大时,不同时刻的平均相速度变得一致,即无序在某种程度上抑制了混沌!首先,我们来介绍龙格库塔方法。
考虑一函数,将在处泰勒展开,得到2'11sin sin()(2) (n=1,2...N)n n n n n n n ml mgl t q gq q t t w j k q q q ••+-+=-+++++-'11sin sin()(2)n nn n n n n n n t q f f gq q t t w j k q q q ••+-==--+++++-n j [,]k k p p -011011,,,N N N N q q q q f f f f ++===='1,1,0.75,0.7155,0.4,0.25,0.5l g g t t w k =======11()()Nn n jT jT Ns f ==å2/T p w =()jT s 60,61,...80j =()y t ()y t t +t[1]其中。
龙格-库塔法,求解常微分方程
隆格库塔法求解常微分方程摘要科学技术中常常需要求解常微分方程的定解问题,这里问题最简单的形式,是本章将着重考察的一阶方程的初值问题.虽然求解常微分方程有各种各样的解析方法,但解析方法只能用来求解一些特殊类型的方程,实际问题中归结出来的微分方程主要靠数值解法求解.本文着重讨论了隆格库塔法求解一阶常微分方程的初值问题,采用了精度较高的经典的四阶隆格库塔法,然后通过对实例运用Matlab编程进行计算求解,为了体现计算结果的精确性和方法的优越性,再采用了欧拉法和预估较正法对实例进行计算求解作为比较.通过比较三种方法的计算精度,发现四阶经典龙格-库塔方法的误差最小,预估较正法其次,欧拉方法误差则比较大.最后通过选取不同的步长,研究了不同的步长对隆格库塔法求解常微分方程初值问题的计算精度的影响.总之,本文全面分析了隆格库塔法在求解常微分方程的应用,相比与其他的数值解法,隆格库塔法计算精度较高,收敛性较好,其中四阶的隆格库塔法的效率最高,精度也最高.关键词:四阶隆格库塔法;欧拉法;预估较正法;一阶常微分方程;MatlabRunge Kutta Method For Solving Ordinary Differential EquationsABSTRACTProblem solving ordinary differential equations are often needed in science andtechnology. the problem in the simplest form is the initial value problem of first order equations in this chapter ,which will be discussed. Although there are various analytical methods for solving ordinary differential equations, the analytical method can only be used to solve some special types of equations.differential equations can be summed up the actual problems whichThis paper discusses the initial value problem of Runge Kutta Barclays by solving a differential equation, using the four order Runge Kutta method with high accuracy.for instance through classic Matlab programming calculation, the superiority in order to accurately and reflect the calculation result, then the Euler method and the prediction correction method for instance by calculation through the calculation precision. The comparison of three kinds of methods, found that the error of four order Runge Kutta method of minimum, prediction correction method secondly, Euler method error is relatively large. Finally, by selecting different step, study the affect the calculation accuracy of different step of Runge Kutta method to solve initial value problems of ordinary differential equations.In short, this paper comprehensively analyzes the application of Runge Kutta method for solving ordinary differential equations, compared with the numerical solution of other, higher accuracy Runge Kutta method, good convergence, the Runge Kutta method of order four of the highest efficiency and its precision is the highest.Key words: Four order Runge Kutta method; Euler method; prediction correction method; first order ordinary differential equations; Matlab目录1 问题的提出 (1)1.1 问题背景............................................... . (1)1.2 问题的具体内容 (1)2 问题假设 (2)3 符号系统 (2)4 问题的分析 (3)4.1 欧拉格式 (3)4.2 预估较正法 (3)4.3 四阶隆格库塔法的格式 (4)5 模型的建立与求解 (4)5.1 隆格库塔法的基本原理 (4)5.1.1 Taylor级数 (4)5.1.2 隆格库塔法的基本思想 (4)5.1.3 四阶的隆格库塔法 (5)5.2 其他求解常微分方程边值问题算法的简介 (6)5.3 模型求解 (8)5.3.1 运用MATLAB软件对模型求解结果及析 (8)6 模型的评价 (16)7 课程设计的总结与体会 (16)参考文献 (17)附录 (18)一、问题的提出1.1 问题背景:科学技术中常常需要求常微分方程的定解问题,微分方程里最简单的方程形式莫过于一阶常微分方程的初值问题,即:0(,)()dy f x y a x b dx y a y ⎧=≤≤⎪⎨⎪=⎩ (1)其中a ,b 为常数.虽然求解此类微分方程有各种各样的解析方法,但解析方法只能用于求解一些特殊类型方程,实际问题中归结出来的微分方程主要靠数值解法求解.因为一阶常微分方程简单但又是求解其他方程的基础,所以发展了许多典型的解法.本文着重讨论一类高精度的单步法——隆格库塔法,并且运用四阶的隆格库塔格式来求解初值问题,并且通过实例运用四阶的隆格库塔格式来求解初值问题,同时与显式与隐式的Euler 格式求解出的结果进行精度比较.1.2 问题的具体内容实例一:在区间[0,1]上采用经典的四阶隆格库塔方法求解微分方程1(0)1dy y x dx y ⎧=-++⎪⎨⎪=⎩,其精确解为x y x e -=+,步长为0.5,然后用欧拉法,预估校正法分别求解,且将计算结果与精确解进行比较,对三个算法的收敛性的进行分析比较.实例二:在区间[0,1]上用经典的四阶龙格库塔方法求解初值问题 (0)1x dy xe y dx y -⎧=-⎪⎨⎪=⎩, 其精确解为21(2)2xx e -+,然后用欧拉法,预估校正法分别求解,且将计算结果与精确解进行比较,对三个算法的收敛性的进行分析比较.最后在区间[0,1]上分别取步长h=0.1;0.05时进行计算,并且探究选取不同的步长对计算结果精度的影响.二、问题假设2.1 假设数值方法本身的计算是准确的.2.2 假设选取的步长趋于0时计算的结果会收敛到微分方程的准确解.2.3 假设步长的增加不会导致舍入误差的严重积累.三、符号系统3.1 符号说明符号含义h选取的步长*K平均斜率p精度的阶数∆前后两次计算结果的偏差y第n个节点的实验值n()y x第n个节点的精确值nδ实验值与精确值的绝对误差四、问题的分析问题要求运用隆格库塔算法来求解一阶微分方程的初值问题,针对前面提出的实例,本文先用经典的四阶隆格库塔法来求解上面的微分方程,为了体现隆格库塔法的优越性,同时用欧拉法,预估校正法分别求解,且将计算结果与精确解进行比较,对三个算法的收敛性的进行分析比较.最后在区间[0,1]上分别取步长h=0.1;0.05时进行计算,分析在选取不同的步长时,求解结果的精度变化如何.下面是欧拉法,预估校正法以及经典的四阶隆格库塔法的计算公式.4.1欧拉格式(1)显式欧拉格式1(,)n n n n y y hf x y +=+ (2) 局部截断误差22211()()()()22n n n h h y x y y y x o h ξ++''''-=≈= (3) (2)隐式欧拉格式111(,)n n n n y y hf x y +++=+ (4)局部截断误差2211()()()2n n n h y x y y x o h ++''-≈-= (5) 4.2 预估校正法预估 1(,)n n n n y y hf x y +=+ (6)校正 111[(,)(,)]2n n n n n n h y y f x y f x y +++=++ (7) 统一格式 1[(,)(,(,))]2n n n n n n n n h y y f x y f x h y hf x y +=++++ (8) 平均化格式 11(,),(,),1().2p n n n c n n p n p c y y hf x y y y hf x y y y y ++⎧⎪=+⎪=+⎨⎪⎪=+⎩ (9)4.3 四阶龙格库塔方法的格式(经典格式)112341213243(22),6(,),(,),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 +⎧=++++⎪⎪=⎪⎪⎪=++⎨⎪⎪=++⎪⎪=++⎪⎩(10)五、模型的建立与模型求解5.1 隆格库塔法的基本原理隆格库塔法是一种高精度的单步法,这类方法与下述Taylor 级数法有着紧密的联系.5.1.1 Taylor 级数设初值问题 '00(,)()y f x y y x y ⎧=⎨=⎩有解,按泰勒展开,有2'''1()()()()....2n n n n h y x y x hy x y x +=+++; (11) 其中()y x 的各阶导数依据所给方程可以用函数f 来表达,下面引进函数序列(,)j f x y 来描叙求导过程,即(0)(1)'(0)''(1)(1)(1)'''(2),f f y f f y f f x x f f y f f x y ∂∂=≡=+≡∂∂∂∂=+≡∂∂ (12)(2)(2)()(1)j j j j f f y f f x y ---∂∂=+≡∂∂ (13) 根据上式,结果导出下面 Taylor 格式2'''()1...2!!pp n n nn n h h y y hy y y p +=++++ (14)其中一阶Taylor 格式为: '1n n n y y hy +=+提高Taylor 格式的阶数p 即可提高计算结果的精度,显然,p 阶Taylor 格式的局部截断误差为:11(1)1(1)!p p n n h y y y p ζ+++-+=+ (15) 因此它具有p 阶精度.5.1.2 隆格库塔方法的基本思想隆格库塔法实质就是间接地使用Taylor 级数法的一种方法,考察差商1()()n n y x y x h+- 根据微分中值定理,这有'1()()()n n n y x y x y x h h θ+-=+ (16) 利用所给方程 '(,)y f x y =1()()(,())n n n n y x y x hf x h y x h θθ+=+++ (17) 设 平均斜率*(,())n n K f x h y x h θθ=++,由此可见,只要对平均斜率一种算法,便相应地可以导出一种计算格式.再考察改进的Euler 格式,它可以改写成平均化的形式:1121211()2(,)(,)n n n n n n h y y K K K f x y K f x y hK ++⎧=++⎪⎪=⎨⎪=+⎪⎩(18) 这个处理过程启示我们,如果设法在1(,)n n x x +内多预测几个点的斜率值,然后将它们加权平均作为平均斜率,则有可能构造具有更高精度的计算格式,这就是隆格库塔法的基本思想.5.1.3 四阶的隆格库塔法为了方便起见,本文主要运用经典的隆格库塔算法-四阶隆格库塔格式.其格式如下:112341213243(22),6(,),(,),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 +⎧=++++⎪⎪=⎪⎪⎪=++⎨⎪⎪=++⎪⎪=++⎪⎩(19)下面为其具体的算法流程图:5.2 其他求解常微分边值问题算法的简介5.2.1欧拉数值算法(显式)微分方程里最简单的方程形式莫过于一阶常微分方程的初值问题,即:(,)()dyf x y a x b dx y a y ⎧=≤≤⎪⎨⎪=⎩(20) 其中a ,b 为常数.开始输入x 0,y 0,h,N x 1=x 0+hk 1=f(x 0,y 0),k 2=f(x 0+h/2,y 0+hk 1/2)k 3=f(x 0+h/2,y 0+hk 2/2),k 4=f(x 1,y 0+hk 3)y 1=y 0+h(k 1+2k 2+2k 3+k 4)/6n=1输出x 1,y 1n=N? 结束n=n+1x 0=x 1,y 0=y 1否是图5.1 龙格-库塔法流程图因为其简单但又是求解其他方程的基础,所以发展了许多典型的解法.所有算法中的f 就是代表上式中(,)f x y ,而y f 表示(,)f x y y ∂∂,x f 表示(,)f x y x∂∂. 简单欧拉法是一种单步递推算法.简单欧拉法的公式如下所示:1(,)n n n n y y hf x y +=+ (21)简单欧拉法的算法过程介绍如下:给出自变量x 的定义域[,]a b ,初始值0y 及步长h .对0,1,()/k b a h =-,计算1(,)k k k k y y hf x y +=+5.2.2欧拉数值算法(隐式)隐式欧拉法也叫退欧拉法,隐式欧拉法的公式如下所示:111(,)n n n n y y hf x y +++=+ (22)隐式欧拉法是一阶精度的方法,比它精度高的公式是:111[(,)(,)]2n n n n n n hy y f x y f x y +++=++ (23)隐式欧拉的算法过程介绍如下.给出自变量x 的定义域[,]a b ,初始值0y 及步长h .对0,1,()/k b a h =-,用牛顿法或其他方法求解方111(,)k k k k y y hf x y +++=+得出1k y +.5.2.3 欧拉预估-校正法改进欧拉法是一种二阶显式求解法,其计算公式如下所示:1[,(,)]22n n n n n n h h y y hf x y f x y +=+++11(,)[(,)(,)]2n n n n n n n n t y hf x y h y y f x y f x t ++=+⎧⎪⎨=++⎪⎩ (24)四阶龙格-库塔法有多种形式,除了改进的欧拉法外还有中点法.中点法计算公式为:1[,(,)]22n n n n n n h h y y hf x y f x y +=+++ (25)5.3 模型求解5.3.1运用MATLAB 软件对模型求解结果及分析用欧拉法、改进的欧拉格式、经典的四阶龙格库塔法来求解常微分方程的边值问题,并且比较其精度(具体的MATLAB 源程序见附录) 以下进行实例分析:实例一. 1(0)1dyy x dx y ⎧=-++⎪⎨⎪=⎩由题可知精确解为:x y x e -=+,当x=0时,y(x)=0.在这里取步长h 为0.1, 通过MATLAB 程序的计算,相应的结果如下:表5-1 步长为0.1时各方法的预测值与精确值的比较(精确到6位小数)初值 Euler 法 相对误差 预估校正法 相对误差 经典四阶库 相对误差精确值 0 -- -- -- -- -- -- 1.00000 0.1 1.00910 0.00424 1.00500 0.00016 1.00484 0.00000 1.00484 0.2 1.02646 0.00759 1.01903 0.00029 1.01873 0.00000 1.01873 0.3 1.05134 0.01011 1.04122 0.00038 1.04082 0.00000 1.04082 0.4 1.08304 0.01189 1.07080 0.00045 1.07032 0.00000 1.07032 0.5 1.12095 0.01303 1.10708 0.00049 1.10653 0.00000 1.10653 0.6 1.16451 0.01366 1.14940 0.00052 1.14881 0.00000 1.14881 0.7 1.21319 0.01388 1.19721 0.00052 1.19659 0.00000 1.19659 0.8 1.26655 0.01378 1.24998 0.00052 1.24933 0.00000 1.24933 0.9 1.32414 0.01344 1.30723 0.00050 1.30657 0.00000 1.30657 1.01.38558 0.01294 1.36854 0.00048 1.36788 0.000001.36788步长为0.1时的精确值与预测值的比较精确值欧拉法改进欧拉格式四阶龙格库塔轴Y00.10.20.30.40.50.60.70.80.91 1.1 1.2 1.3 1.4X轴图5.2 步长为0.1时各方法的预测值与精确值的比较原函数图像轴YX轴图5.3 步长为0.1时原函数图像在这里取步长h为0.05,通过MATLAB程序的计算,相应的结果如下:表5-2 h=0.05时三个方法与精确值的真值表步长Euler法相对误差预估校正法相对误差经典四阶库相对误差精确值0 -- -- -- -- -- --1.00000 0.05 1.00250 0.00911 1.00125 0.01035 1.00123 0.01037 1.00484 0.10 1.00738 0.01711 1.00488 0.01954 1.00484 0.01958 1.01873 0.15 1.01451 0.02405 1.01076 0.02765 1.01071 0.02770 1.04082 0.20 1.02378 0.03001 1.01880 0.03473 1.01873 0.03479 1.07032 0.25 1.03509 0.03507 1.02889 0.04085 1.02880 0.04093 1.10653 0.30 1.04834 0.03930 1.04092 0.04610 1.04082 0.04619 1.14881 0.35 1.06342 0.04277 1.05480 0.05053 1.05469 0.05063 1.19659 0.40 1.08025 0.04555 1.07044 0.05422 1.07032 0.05432 1.24933 0.45 1.09874 0.04772 1.08775 0.05724 1.08763 0.05734 1.30657 0.50 1.11880 0.04933 1.10666 0.05964 1.10653 0.05975 1.36788 0.55 1.14036 0.05045 1.12709 0.06150 1.12695 0.06161 1.00484 0.60 1.16334 0.05113 1.14895 0.06286 1.14881 0.06298 1.01873 0.65 1.18768 0.05143 1.17219 0.06379 1.17205 0.06391 1.04082 0.70 1.21329 0.05139 1.19674 0.06433 1.19659 0.06445 1.07032 0.75 1.24013 0.05106 1.22252 0.06453 1.22237 0.06465 1.10653 0.80 1.26812 0.05048 1.24949 0.06443 1.24933 0.06455 1.14881 0.85 1.29722 0.04969 1.27757 0.06408 1.27742 0.06419 1.19659 0.90 1.32735 0.04871 1.30673 0.06349 1.30657 0.06361 1.249330.95 1.35849 0.04759 1.33690 0.06272 1.33674 0.06283 1.306571.00 1.39056 0.04634 1.36804 0.06178 1.36788 0.06189 1.36788欧拉格式 改进欧拉格式四阶龙格库塔精确值图5.4 步长为0.05时各方法的预测值与精确值的比较11.051.11.151.21.251.31.351.4X 轴Y 轴原函数图像图5.5 步长为0.05时原函数图像实例2 (0)1xdy xe ydx y -⎧=-⎪⎨⎪=⎩由题可知精确解为:21(2)2x x e -+当x=0时,y(x)=0.在这里取步长h为0.1,通过MATLAB程序的计算,相应的结果如下:步长Euler法相对误差预估校正法相对误差经典四阶库相对误差精确值0.1 0.9000 0.0318 0.9096 0.0214 0.9094 0.0216 0.9295 0.2 0.8192 0.0611 0.8359 0.0420 0.8356 0.0424 0.8726 0.3 0.7544 0.0876 0.7761 0.0614 0.7757 0.0619 0.8268 0.4 0.7027 0.1109 0.7277 0.0793 0.7272 0.0799 0.7903 0.5 0.6617 0.1310 0.6886 0.0956 0.6881 0.0963 0.7615 0.6 0.6294 0.1480 0.6572 0.1103 0.6567 0.1110 0.7387 0.7 0.6040 0.1621 0.6320 0.1234 0.6315 0.1241 0.7209 0.8 0.5841 0.1737 0.6116 0.1349 0.6111 0.1355 0.70690.9 0.5686 0.1830 0.5951 0.1450 0.5946 0.1456 0.69591.0 0.5563 0.1905 0.5815 0.1538 0.5811 0.1544 0.6872原函数图像轴Y00.10.20.30.40.50.60.70.80.91X轴图5.6 步长为0.1时原函数图像各方法的预测值与精确值的比较欧拉格式改进的格式四阶龙格库塔精确值轴Y0.10.20.30.40.50.60.70.80.91X轴图5.7 步长为0.1时各方法的预测值与精确值的比较在这里取步长h为0.05,通过MATLAB程序的计算,相应的结果如下:表5-4 步长为0.1时各方法的预测值与精确值的比较(精确到5位小数)步长Euler法相对误差预估校正法相对误差经典四阶库相对误差精确值0.050.95000 0.01342 0.95245 0.01088 0.95242 0.01090 0.96292 0.100.90490 0.02650 0.90947 0.02158 0.90942 0.02163 0.92953 0.150.86428 0.03916 0.87067 0.03206 0.87061 0.03213 0.89951 0.200.82774 0.05137 0.83567 0.04228 0.83559 0.04237 0.87256 0.250.79491 0.06307 0.80414 0.05219 0.80405 0.05230 0.84842 0.300.76545 0.07423 0.77576 0.06176 0.77566 0.06188 0.82682 0.350.73904 0.08482 0.75023 0.07096 0.75013 0.07110 0.80754 0.40 0.71541 0.09482 0.72730 0.07977 0.72719 0.07991 0.79035 0.45 0.69427 0.10422 0.70672 0.08817 0.70660 0.08832 0.77505 0.50 0.67539 0.11302 0.68825 0.09615 0.68813 0.09630 0.76146 0.55 0.65855 0.12123 0.67168 0.10370 0.67156 0.10386 0.74940 0.60 0.64352 0.12886 0.65683 0.11084 0.65671 0.11100 0.73871 0.65 0.63012 0.13593 0.64351 0.11756 0.64340 0.11773 0.72925 0.70 0.61819 0.14245 0.63157 0.12388 0.63145 0.12405 0.72087 0.75 0.60754 0.14847 0.62085 0.12981 0.62073 0.12998 0.71347 0.80 0.59805 0.15400 0.61121 0.13537 0.61110 0.13553 0.70691 0.85 0.58957 0.15908 0.60254 0.14058 0.60243 0.14073 0.70109 0.90 0.58198 0.16374 0.59470 0.14545 0.59460 0.14560 0.695930.95 0.57517 0.16802 0.58761 0.15001 0.58751 0.15016 0.691321.00 0.56904 0.17194 0.58117 0.15429 0.58107 0.15443 0.687190.10.20.30.40.50.60.70.80.910.550.60.650.70.750.80.850.90.951X 轴Y 轴各方法下的预测值与精确值的比较欧拉格式改进欧拉格式四阶龙格库塔精确值图5.8 步长为0.05时各方法的预测值与精确值的比较六、模型的评价本文着重讨论了4阶的隆格库塔法来求解微分方程,并且通过两个实例验证了隆格库塔法在求解初值问题的优越性.从上面的实例比较可知,在计算精度上,四阶经典龙格-库塔方法的误差最小,改进欧拉方法其次,欧拉方法误差则比较大,所以四阶经典龙格-库塔方法得到最佳的精度.而在计算量上面,相应地,很明显的四阶经典龙格-库塔方法也是最大,改进欧拉方法其次,欧拉方法计算量最小.这样的结果,说明了运用以上三种方法时,其计算量的多少与精度的大小成正比.我们在实际运用与操作中,可以根据实际情况,选择这3种方法中的其中一种最适合的,追求精度的话,可以使用四阶经典龙格-库塔方法;而改进的欧拉方法,在精度上和计算量上都表现得很出色,能够满足一般情况;而欧拉方法更主要的是适用于对y的估计上,而精度则有所欠缺,以上各方法的选择,都取决于具体的情况.七、课程设计的总结与体会本文着重采用隆格库塔法运用MATLAB编程来求解微分方程,相比于欧拉法以及预估校正法,隆格库塔法在提高近似值解的精度上是非常起作用的,而且又具有计算量不大、算法组织容易.其次,每一次的课程设计总是让我学到了更多的知识,不论是C++、SPASS还是MATLAB软件,这些都让我学到了如何解决实际问题的好工具,通过这些工具,是自己能够得到突破和成长.以下是我完成此次课程设计的几点体会:(1)必须学好基础知识,在做的过程中,发现自己有很多东西都不懂,要博学必须从一点一点做起.以往训练得少只是把握的不牢靠.所以做起来感到有点吃力.所以,无论什么学科,一定要打好基础.(2)程序设计要靠多练,多见识,那样形成一种编程思维,我想对我是有很大好处的.尤其像我这种平时学得不扎实的人.(3)做事情要有恒心,遇到困难不要怕,坚决去做.如果做出来了,固然高兴,如果没有做出来也没关系,自己努力了对得起自己就好.同时,把它看做是对自己的锻炼. (4)做程序特别是做大程序是很有趣的.虽然有的问题很难,要花很多时间很多精力,但是那种解决了一个问题时的喜悦足以把付出的辛苦补偿回来.得到一种心里的慰藉.参考文献[1] 李庆杨,王能超,易大义编.数值分析(第四版)[M]:华中科技大学出版社,2006.[2] 姜启源,谢金星,叶俊编.数学模型(第三版)[M].北京:高等教育出版社,2005[3] 刘琼荪,数学实验[M],高等教育出版社,2004[4] 王建伟,MATLAB7.X程序设计[M],中国水利水电出版社,2007[5] 王高雄,周之铭等编.常微分方程(第三版) [M]:高等教育出版社,2006[6]何坚勇编著. 运筹学基础(第二版)[M]. 北京:清华大学出版社,2008.附录附录一:显示欧拉法matlab程序%欧拉法clear allclcx=[];y=[];y1=[];h=0.1;x=0:h:1;n=length(x);for i=1:ny(i)=f1(x(i));endfigure(1)plot(x,y,'g-');hold ony1(1)=1;for j=2:ny1(j)=y1(j-1)+h*f(x(j-1),y1(j-1)); endY=[x;y1];fid=fopen('data.txt','wt');fprintf(fid,'%6.2f %12.4f\n',Y);fclose(fid);plot(x,y1,'r-');figure(2)DT=abs(y-y1);plot(x,DT)%1.建立导数函数文件function z=f(x,y)z=y-2*x/y;%2.建立原函数文件function z1=f1(x)z1=(2*x+1)^(1/2);迭代n次的后退的欧拉格式matlab程序%1.建立导数函数文件function z=f(x,y)z=y-2*x/y;%2.建立原函数文件function z1=f1(x)z1=(2*x+1)^(1/2);%迭代n次的后退的欧拉格式clear allclcN=input('请输入迭代次数:');x=[];y=[];y1=[];h=0.1;x=0:0.1:1;n=length(x);for i=1:ny(i)=f1(x(i));endfigure(1)plot(x,y,'g-');for j=2:ny1(j)=y1(j-1)+h*f(x(j-1),y1(j-1)); T=y1(j);for k=1:NT=y1(j-1)+h*f(x(j),T);endy1(j)=T;endY=[x;y1];fid=fopen('data.txt','wt');fprintf(fid,'%6.2f %12.4f\n',Y); fclose(fid);plot(x,y1,'r-');figure(2)DT=abs(y-y1);plot(x,DT)附录二:预估校正法matlab程序%1.建立导数函数文件function z=f(x,y)z=y-2*x/y;%2.建立原函数文件function z1=f1(x)z1=(2*x+1)^(1/2);%预估校正法%欧拉法clear allclcx=[];y1(1)=1;y2=[];y2(1)=1;h=0.1;x=0:0.1:1;n=length(x);for i=1:ny(i)=f1(x(i));endfigure(1)plot(x,y,'g-');hold onfor j=2:ny1(j)=y2(j-1)+h*f(x(j-1),y2(j-1));y2(j)=y2(j-1)+(h/2).*[f(x(j-1),y2(j-1))+f(x(j),y1(j))]; endY=[x;y2];fid=fopen('data.txt','wt');fprintf(fid,'%6.2f %12.4f\n',Y);fclose(fid);plot(x,y2,'r-');figure(2)DT=y-y2;plot(x,DT)附录三:四阶龙格库塔法matlab程序%四阶龙格库塔法clear allclcn=length(x);y=[];y1=[];y1(1)=1;for i=1:ny(i)=f1(x(i));endfigure(1)plot(x,y,'g-');hold onfor j=2:nK1=f(x(j-1),y1(j-1));K2=f(x(j-1)+h/2,y1(j-1)+h/2*K1);K3=f(x(j-1)+h/2,y1(j-1)+h/2*K2);K4=f(x(j-1)+h,y1(j-1)+h*K3);y1(j)=y1(j-1)+(h/6)*(K1+2*K2+2*K3+K4); endY=[x;y1];fid=fopen('data1.txt','wt');fprintf(fid,'%6.2f %12.4f\n',Y);fclose(fid);plot(x,y1,'r-');figure(2)DT=abs(y-y1);plot(x,DT)。
数值分析9-3(龙格-库塔方法)
总结词
除了Python和MATLAB,还有许多其他编 程语言可以用于实现龙格-库塔方法。
详细描述
例如C、Java和R等编程语言也提供了相应 的数值计算库或框架,可以实现龙格-库塔 方法。使用这些语言实现龙格-库塔方法需 要一定的编程基础和对相应语言的数值计算 库的了解。
龙格-库塔方法可以用于求解偏微分方程的数值解,通过将偏微分方程转化为常微分方程组,利用龙格 -库塔方法进行迭代求解,能够得到较为精确的结果。
积分方程的数值解
积分方程是描述函数与积分之间的关 系的数学模型,常见于物理、工程等 领域。
VS
龙格-库塔方法也可以用于求解积分 方程的数值解,通过将积分方程转化 为常微分方程组,利用龙格-库塔方 法进行迭代求解,能够得到较为精确 的结果。
重要性及应用领域
龙格-库塔方法是数值分析中非常重要的内容, 它为解决常微分方程提供了一种有效的数值方 法。
在科学、工程和经济学等领域中,许多问题都 可以转化为求解常微分方程的问题,因此龙格库塔方法具有广泛的应用价值。
例如,在物理学、化学、生物学、金融学等领 域中,龙格-库塔方法被广泛应用于模拟和预测 各种动态系统的行为。
数值分析9-3:龙格-库塔方法
目录
• 引言 • 龙格-库塔方法概述 • 龙格-库塔方法在数值分析中的应用 • 龙格-库塔方法的实现与编程 • 龙格-库塔方法的改进与优化 • 结论与展望
01 引言
主题简介
龙格-库塔方法是一种用于求解常微 分方程的数值方法。
它通过构造一个离散化的时间序列来 逼近微分方程的解,并利用已知的离 散点来计算新的离散点,逐步逼近微 分方程的真实解。
02 龙格-库塔方法概述
定义与原理
龙格-库塔求解微分方程
MATLAB 在数值分析中的应用摘 要:数值分析是研究数学问题数值解及其理论的一个数学分支,涉及面很广.自计算机在其中应用以后,使其应用价值更为广泛,解决实际问题更为有效.以MA TLAB 为平台的数值分析方法与图形可视化编程在解决一些复杂问题时,大大降低了难度,减少了工作量.本文以经典龙格-库塔算法为核心,介绍用数值方法解常微分方程(组),分析自制系统的稳定性问题.如范德波尔方程.以及混沌现象中奇怪吸引子的模拟实现关键词: MA TLAB; 经典龙格-库塔算法; 解常微分方程(组); 范德波尔方程; 奇怪吸引子;1 MATLAB 平台1.1 矩阵MATLAB 是矩阵实验室(Matrix Laboratory )的简称, 美国MathWorks 公司出品的商业数学软件.以下介绍在处理方程组时的特殊技法: A=[a b c; d e f; g h i]得到矩阵a b c d e f g h i也可直接输入方程组:function y=equition(t,x)y=[q(2)+q(1)/sqrt(q(1)^2+q(2)^2)*(1-q(1)^2-q(2)^2); % 以q 向量保存方程组;-q(1)+q(2)/sqrt(q(1)^2+q(2)^2)*(1-q(1)^2-q(2)^2)] % q(1)代表应变量x, q(2) 代表应变量y得到1.2 语言MATLAB 编程语言与 C 语言 类似, 格式上略有不同. 里不做详述, 程序中会做必要的标注.但在处理矩阵式十分方便, C++是以数组的形式存放变量,对某个元素都要准确指出其位置.22222222()]()]x y x y x y y x x y x y ⎧=+-+⎪+⎪⎨⎪=-+-+⎪+⎩C++是以数组的形式存放变量,对某个元素都要准确指出其位置,处理循环时算法复杂,即使使用指针也很容易出错.2经典龙格-库塔算法公式(15张)龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。
龙格库塔法
第九章 常微分方程的数值解法在自然科学的许多领域中,都会遇到常微分方程的求解问题。
然而,我们知道,只有少数十分简单的微分方程能够用初等方法求得它们的解,多数情形只能利用近似方法求解。
在常微分方程课中已经讲过的级数解法,逐步逼近法等就是近似解法。
这些方法可以给出解的近似表达式,通常称为近似解析方法。
还有一类近似方法称为数值方法,它可以给出解在一些离散点上的近似值。
利用计算机解微分方程主要使用数值方法。
我们考虑一阶常微分方程初值问题⎪⎩⎪⎨⎧==00)(),(y x y y x f dxdy在区间[a, b]上的解,其中f (x, y )为x, y 的已知函数,y 0为给定的初始值,将上述问题的精确解记为y (x )。
数值方法的基本思想是:在解的存在区间上取n + 1个节点b x x x x a n =<<<<= 210这里差i i i x x h -=+1,i = 0,1, …, n 称为由x i 到x i +1的步长。
这些h i 可以不相等,但一般取成相等的,这时nab h -=。
在这些节点上采用离散化方法,(通常用数值积分、微分。
泰勒展开等)将上述初值问题化成关于离散变量的相应问题。
把这个相应问题的解y n 作为y (x n )的近似值。
这样求得的y n 就是上述初值问题在节点x n 上的数值解。
一般说来,不同的离散化导致不同的方法。
§1 欧拉法与改进欧拉法1.欧拉法 1.对常微分方程初始问题(9.2))((9.1)),(00⎪⎩⎪⎨⎧==y x y y x f dx dy用数值方法求解时,我们总是认为(9.1)、(9.2)的解存在且唯一。
欧拉法是解初值问题的最简单的数值方法。
从(9.2)式由于y (x 0) = y 0已给定,因而可以算出),()('000y x f x y =设x 1 = h 充分小,则近似地有:),()(')()(00001y x f x y hx y x y =≈-(9.3)记 ,n ,,i x y y i i 10 )(== 从而我们可以取),(0001y x hf y y ==作为y (x 1)的近似值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
蒙特卡洛法求定积分:
整体思路,蒙特卡洛求定积分的主要思想就是通过在取值范围内大量随机数的随机选取对函数进行求值,进而除以所取次数并乘以其区间,即为所积值。
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。
在执行过程中,发现每一次执行结果都会不一样,这是因为是随机选取,所以不同次数的计算结果会有偏差,但由于执行次数很多,从概率的角度来讲都是与真实值相近似的值。
用四阶龙格库塔法解微分方程:
解:
一、求微分方程的数值解:
方法一:
1.将方程化为1次,即化为:
在执行程序前,打开matlab,执行以下操作打开File—>New—>Function,并点击Function,弹出Editor窗口,将其中内容修改为
将二阶函数化为一阶过程中,定义如下:
function dy=func(~,y)
dy=zeros(2,1); %初始化,2行一列,即()=()
dy(1)=y(2); %将上述方程组化简得来
dy(2)=-4*y(2)-29*y(1); %将上述方程组化简得来
end %定义结束
回到Matlab程序中,将Current Folder改为与刚刚Function函数定义的保存路径一致的路径。
在Command Window里输入以下源程序。
>> [x,y]=ode45('func',[0 12],[0 15])
绘图
>> y=size(y)
y = 229 2% 数组y包含的元素数
>> reshape(y,458,1)%将含有229*2=458格元素的数组y化为458行1列的数组
>> plot(x,y) %绘图
>> title('数值图')%图名
>> hold on%保持当前图形
>> xlabel('x')%加x坐标
>> ylabel('y')%加y坐标
024681012 -10
-5
5
10
15
数值图
x
y
方法二:
2.最常用的R-K公式——标准4阶R-K公式为:
在editor窗口中打开一个新函数,对龙格库塔函数定义:
function [x,y]=lgkt4j(odefun,xspan,y0,h)
%odefun为微分方程的函数描述,xspan为解区间[x0,xn],y0为初始条件,h为迭代步长
x=xspan(1):h:xspan(2); %定义x为从xspan(1)开始到xspan(2)且步长为h
k=1;%初始化k=1
y(:,1)=y0(:); %初始化y(:,1)
for i=1:length(x)-1 %从第一次循环开始,共循环(length(x)-1)次
K1=feval(odefun,x(k),y(:,k));%feval(函数名,x1,x2,…)
K2=feval(odefun,x(k)+h/2,y(:,k)+h/2*K1);
K3=feval(odefun,x(k)+h/2,y(:,k)+h/2*K2);
K4=feval(odefun,x(k)+h,y(:,k)+h*K3); %以上K1,K2,K3,K4均为龙哥库塔定
义中的式子
y(:,k+1)=y(:,k)+h/6*(K1+2*K2+2*K3+K4); %利用龙哥库塔定义通过y(:,k)的
迭代求y(:,k+1)
k=k+1;
end
end
回到Matlab程序中,将Current Folder改为与刚刚Function函数定义的保存路径一致的路径。
在Command Window里输入以下源程序。
>> f=@(x,y)[y(2);-4*y(1)-29*y(1)];%利用刚刚化简的一次方程
>> [x,y]=lgkt4j(f,[0,12],[0,15],1)%利用定义的龙哥库塔,[0,12]为x
区间,[0,0]为()=(),1为
步长。
二、求微分方程的特征解:
关于求微分方程(组)的解析解命令:
dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
关于此公式的注解:在表达微分方程时,用字母D表示求微分,D2、D3等可以表示求高阶微分,任何D后所跟字母为因变量,自变量可以指定或由系统规则选定为缺省。
步骤:在matlab中直接输入源程序:
源程序:
y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') %直接利用解析函数求特解
y =(3*sin(5*x))/exp(2*x) %结果。