文档库 最新最全的文档下载
当前位置:文档库 › 二阶非线性常微分方程的打靶法matlab实现

二阶非线性常微分方程的打靶法matlab实现

二阶非线性常微分方程的打靶法matlab实现
二阶非线性常微分方程的打靶法matlab实现

二阶非线性常微分方程的打靶法

1.问题:

试用打靶法求二阶非线性常微分方程亮点边值的数值解:

要求用Matlab 编程计算,请给出一些例子,验证你的算法与程序的正确性。

2.打靶法分析:

非线性打靶法:

非线性打靶法的基本原理是将两点边值问题(1)转化为下面形式的初值问题

令z = y ′,将上述二阶方程降为一阶方程组

3.Matlab 源代码:

创建M 文件:

function ys=dbf(f,a,b,alfa,beta,h,eps)

ff=@(x,y)[y(2),f(y(1),y(2),x)];

xvalue=a:h:b;%x取值范围

n=length(xvalue)

s0=a-0.01;%选取适当的s的初值

x0=[alfa,s0];%迭代初值

flag=0;%用于判断精度

y0=rk4(ff,a,x0,h,a,b);

if abs(y0(1,n)-beta)<=eps

flag=1;

y1=y0;

else

s1=s0+1;

x0=[alfa,s1];

y1=rk4(ff,a,x0,h,a,b);

if abs(y1(1,n)-beta)<=eps

flag=1;

end

end

if flag~=1

while abs(y1(1,n)-beta)>eps

s2=s1-(y1(1,n)-beta)*(s1-s0)/(y1(1,n)-y0(1,n)); x0=[alfa,s2];

y2=rk4(ff,a,x0,h,a,b);

s0=s1;

s1=s2;

y0=y1;

y1=y2;

end

end

xvalue=a:h:b;

yvalue=y1(1,:);

ys=[xvalue',yvalue'];

function x=rk4(f,t0,x0,h,a,b)%rung-kuta法求每个点的近似值(参考大作业一)t=a:h:b;%迭代区间

m=length(t);%区间长度

t(1)=t0;

x(:,1)=x0;%迭代初值

for i=1:m-1

L1=f(t(i),x(:,i));

L2=f(t(i)+h/2,x(:,i)'+(h/2)*L1);

L3=f(t(i)+h/2,x(:,i)'+(h/2)*L2);

L4=f(t(i)+h,x(:,i)'+h*L3);

x(:,i+1)=x(:,i)'+(h/6)*(L1+2*L2+2*L3+L4);

end

4.举例

求二阶非线性方程的边值问题:

在matlab 控制台中输入:

f=@(x,y,z)(x^2+z*x^2);

x0l=0;

x0u=2*exp(-1);

alfa=0;

beta=2;

h=0.01

dbf(f,x0l,x0u,y0l,y0u,h,1e-6);

>> y=ans(:,2);

x=ans(:,1);

>> plot(x,y,'-r')

>>

结果:

再输入:

>> m=0:0.01:2;

>> n=m.*exp(-1/2*m);

>> plot(n,m)

>> plot(x,y,'-r',n,m,'-b')

5.结论:

根据得到的图像,可以看到在x 的初值一起末值也就是α和β两点做到了较好的逼近,但是中间部分的逼近不是很理想。我想可能是在编程的过程当中可能算法上有些问题。以后有机会再改进。

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

二阶线性常微分方程的幂级数解法

二阶线性常微分方程的幂级数解法 从微分方程学中知道,在满足某些条件下,可以用幂级数来表示一个函数。因此,自然想到,能否用幂级数来表示微分方程的解呢? 例1、求方程 ''0y xy -=的通解 解:设2012n n y a a x a x a x =+++++…… 为方程的解,这里(0,1,2,,,)i a i n =……是待定常系数,将它对x 微分两次,有 ''212312132(1)(1)n n n n y a a x n n a x n na x --+=?+?++-+++ 将y ,'y 的表达式代入方程,并比较的同次幂的系数,得到 x -∞<<∞2210a ?=,30320,a a ?-= 41430,a a ?-= 52540,a a ?-= 或一般的可推得 32356(31)3k a a k k = ?????-? , 1 3134673(31) k a a k k += ??????+ , 320k a += 其中1a ,2a 是任意的,因而代入设的解中可得: 36347 01[1][] 2323562356(31)33434673(31) n x x x x x y a a x n n n n =+++++++++?????????-????????+ 这个幂级数的收敛半径是无限大的,因而级数的和(其中包括两个任意常数0a 及1a )便是所要求的通解。

例6 求方程'''240y xy y --=的满足初值条件(0)0y =及'(0)1y =的解。 解 设级 2012n n y a a x a x a x =+++++……为方程的解。首先,利用初值 条件,可以得到 00a =, 11a =, 因而 2323'2123''223123232(1)n n n n n n y x a x a x a x y a x a x na x y a a x n n a x --=+++++=+++++=+?++-+ 将y ,'y ,''y 的表达式带入原方程,合并x 的各同次幂的项,并令各项系数等于零,得到 21422 0,1,0,,,1 n n a a a a a n -==== - 因而 567891111 ,0,,0,,2!63!4! a a a a a = ===== 最后得 21111 (1)!! k a k k k += ?=- , 20k a =, 对一切正整数k 成立。 将i a (0,1,2,)i = 的值代回2012n n y a a x a x a x =+++++……就得到 521 3 2!! k x x y x x k +=+++++ 2 422 (1),2!! k x x x x x xe k =++++ += 这就是方程的满足所给初值条件的解。 是否所有方程都能按以上方式求出其幂级数解?或者说究竟方程应该满足什么条件才能保证它的解可用幂级数来表示呢?级数的

用MATLAB解常微分方程

实验四 求微分方程的解 一、问题背景与实验目的 实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解). 对微分方程(组)的解析解法(精确解),Matlab 有专门的函数可以用,本实验将作一定的介绍. 本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍 Euler 折线法. 二、相关函数(命令)及简介 1.dsolve ('equ1','equ2',…):Matlab 求微分方程的解析解.equ1、equ2、…为方程(或条件).写方程(或条件)时用 Dy 表示y 关于自变量的一阶导数,用用 D2y 表示 y 关于自变量的二阶导数,依此类推. 2.simplify(s ):对表达式 s 使用 maple 的化简规则进行化简. 例如: syms x simplify(sin(x)^2 + cos(x)^2) ans=1 3.[r,how]=simple(s):由于 Matlab 提供了多种化简规则,simple 命令就是对表达式 s 用各种规则进行化简,然后用 r 返回最简形式,how 返回形成这种形式所用的规则. 例如: syms x [r,how]=simple(cos(x)^2-sin(x)^2) r = cos(2*x) how = combine 4.[T,Y] = solver(odefun,tspan,y 0) 求微分方程的数值解. 说明: (1) 其中的 solver 为命令 ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 之一. (2) odefun 是显式常微分方程:?????==0 0)() ,(y t y y t f dt dy (3) 在积分区间 tspan =],[0f t t 上,从0t 到f t ,用初始条件0y 求解.

二阶常微分方程的解法及其应用.

目录 1 引言 (1) 2 二阶常系数常微分方程的几种解法 (1) 2.1 特征方程法 (1) 2.1.1 特征根是两个实根的情形 (2) 2.1.2 特征根有重根的情形 (2) 2.2 常数变异法 (4) 2.3 拉普拉斯变化法 (5) 3 常微分方程的简单应用 (6) 3.1 特征方程法 (7) 3.2 常数变异法 (9) 3.3 拉普拉斯变化法 (10) 4 总结及意义 (11) 参考文献 (12)

二阶常微分方程的解法及其应用 摘要:本文通过对特征方程法、常数变易法、拉普拉斯变换法这三种二阶常系数常微分方程解法进行介绍,特别是其中的特征方程法分为特征根是两个实根的情形和特征根有重根的情形这两种情况,分别使用特征值法、常数变异法以及拉普拉斯变换法来求动力学方程,现今对于二阶常微分方程解法的研究已经取得了不少成就,尤其在二阶常系数线性微分方程的求解问题方面卓有成效。应用常微分方程理论已经取得了很大的成就,但是,它的现有理论也还远远不能满足需要,还有待于进一步的发展,使这门学科的理论更加完善。 关键词:二阶常微分方程;特征分析法;常数变异法;拉普拉斯变换

METHODS FOR TWO ORDER ORDINARY DIFFERENTIAL EQUATION AND ITS APPLICATION Abstract:This paper introduces the solution of the characteristic equation method, the method of variation of parameters, the Laplasse transform method the three kind of two order ordinary differential equations with constant coefficients, especially the characteristic equation method which is characteristic of the root is the two of two real roots and characteristics of root root, branch and don't use eigenvalue method, method of variation of constants and Laplasse transform method to obtain the dynamic equation, the current studies on solution of ordinary differential equations of order two has made many achievements, especially in the aspect of solving the problem of two order linear differential equation with constant coefficients very fruitful. Application of the theory of ordinary differential equations has made great achievements, however, the existing theory it is still far from meeting the need, needs further development, to make the discipline theory more perfect. Keywords:second ord er ordinary differential equation; Characteristic analysis; constant variation method; Laplasse transform 1 引言 数学发展的历史告诉我们,300年来数学分析是数学的首要分支,而微分方程

高斯-赛德尔迭代法matlab程序

disp('划分为M*M个正方形') M=5 %每行的方格数,改变M可以方便地改变剖分的点数 u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵 disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。') disp('对边界内的点赋初值并使用边界条件对边界赋值:') for j=1:M-1 for i=1:M-1 u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值 end end for i=1:M+1 u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值 u(1,M+1)=0; end u tic %获取运行时间的起点 disp('迭代次数为N') N=6 %迭代次数,改变N可以方便地改变迭代次数 disp('n为当前迭代次数,u为当前值,结果如下:') for n=1:N for p=2:M i=M+2-p; for j=2:M u(i,j)=0.25*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法 end end n %输出n u %输出u end disp('所用的时间:') t=toc %获取算法运行需要的时间 [x,y]=meshgrid(0:1/M:1,0:1/M:1); z=u(1,:); for a=2:M+1 z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值 end mesh(x,y,z)%绘制三维视图以便清楚地显示结果 mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。 (2)学会用Matlab 编写各种方法求解线性方程组的程序。 1.2 实验题目: 1. 用列主元消去法解方程组: 1241234 123412343421233234x x x x x x x x x x x x x x x ++=??+-+=??--+=-??-++-=? 2. 用LU 分解法解方程组,Ax b =其中 4824012242412120620266216A --?? ?- ?= ? ?-??,4422b ?? ? ?= ?- ?-?? 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组: 123234 1231234102118311210631125x x x x x x x x x x x x x -+=-??-+=-??-+=??-+-+ =? 二、实验原理、程序框图、程序代码等 2.1实验原理 2.1.1高斯列主元消去法的原理 Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式: 1111221122222n n n n nn n n b x b x b x g b x b x g b x g +++=??++=????= ? 这个过程就是消元,然后再回代就好了。具体过程如下: 对于1,2, ,1k n =-,若() 0,k kk a ≠依次计算

()() (1)()()(1)()()/,,1, ,k k ik ik kk k k k ij ij ik kj k k k i i ik k m a a a a m a b b m b i j k n ++==-=-=+ 然后将其回代得到: ()() ()()()1/()/,1,2,,1 n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+?=??=-=--? ? ∑ 以上是高斯消去。 但是高斯消去法在消元的过程中有可能会出现() 0k kk a =的情况,这时消元就无法进行了,即使主元数() 0,k kk a ≠但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。 2.1.2直接三角分解法(LU 分解)的原理 先将矩阵A 直接分解为A LU =则求解方程组的问题就等价于求解两个三角形方程组。 直接利用矩阵乘法,得到矩阵的三角分解计算公式为: 1111111 11 1,1,2,,/,2,,,,,1,,,2,3, ()/,1,2, ,i i i i k kj kj km mj m k ik ik im mk kk m u a i n l a u i n u a l u j k k n k n l a l u u i k k n k n -=-===?? ==?? =-=+??=??=-=++≠?? ∑∑且 由上面的式子得到矩阵A 的LU 分解后,求解Ux=y 的计算公式为 11 111,2,3,/()/,1,2, ,1 i i i ij j j n n nn n i i ij j ii j i y b y b l y i n x y u x y u x u i n n -==+=??? =-=?? =??? =-=--?? ∑∑ 以上为LU 分解法。

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法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

Matlab求解微分方程(组)及偏微分方程(组)

第四讲 Matlab 求解微分方程(组) 理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例 实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介 1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 注意,系统缺省的自变量为t 2.函数dsolve 求解的是常微分方程的精确解法,也称为常微分方程的符号解.但是,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰富的函数,我们将其统称为solver ,其一般格式为: [T,Y]=solver(odefun,tspan,y0) 说明:(1)solver 为命令ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 、ode15i 之一. (2)odefun 是显示微分方程'(,)y f t y =在积分区间tspan 0[,]f t t =上从0t 到f t 用初始条件0y 求解. (3)如果要获得微分方程问题在其他指定时间点012,,, ,f t t t t 上的解,则令 tspan 012[,,,]f t t t t =(要求是单调的). (4)因为没有一种算法可以有效的解决所有的ODE 问题,为此,Matlab 提供

(完整版)实验七用matlab求解常微分方程

实验七 用matlab 求解常微分方程 一、实验目的: 1、熟悉常微分方程的求解方法,了解状态方程的概念; 2、能熟练使用dsolve 函数求常微分方程(组)的解析解; 3、能熟练应用ode45\ode15s 函数分别求常微分方程的非刚性、刚性的数值解; 4、掌握绘制相图的方法 二、预备知识: 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=n y y y y t F Λ 如果未知函数是多元函数,成为偏微分方程。联系一些未知函数的一组微分方程组称为微分方程组。微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为 ) ()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++--Λ 若上式中的系数 n i t a i ,,2,1),(Λ=均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y Λ 设 ) 1(21,,',-===n n y y y y y y Λ,可将上式化为一阶方程组 ?????????====-),,,,(''''2113221n n n n y y y t f y y y y y y y ΛΛ 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题

二阶线性微分方程的解法

二阶常系数线性微分方程 一、二阶常系数线形微分方程的概念 形如 )(x f qy y p y =+'+'' (1) 的方程称为二阶常系数线性微分方程.其中p 、q 均为实数,)(x f 为已知的连续函数. 如果0)(≡x f ,则方程式 (1)变成 0=+'+''qy y p y (2) 我们把方程(2)叫做二阶常系数齐次线性方程,把方程式(1)叫做二阶常 系数非齐次线性方程. 本节我们将讨论其解法. 二、二阶常系数齐次线性微分方程 1.解的叠加性 定理1 如果函数1y 与2y 是式(2)的两个解, 则2211y C y C y +=也是 式(2)的解,其中21,C C 是任意常数. 证明 因为1y 与2y 是方程(2)的解,所以有 0111 =+'+''qy y p y 0222 =+'+''qy y p y 将2211y C y C y +=代入方程(2)的左边,得 )()()(22112211221 1y C y C q y C y C p y C y C ++'+'+''+'' =0)()(2222111 1=+'+''++'+''qy y p y C qy y p y C 所以2211y C y C y +=是方程(2)的解. 定理1说明齐次线性方程的解具有叠加性. 叠加起来的解从形式看含有21,C C 两个任意常数,但它不一定是方程式(2)的通解. 2.线性相关、线性无关的概念

设,,,,21n y y y 为定义在区间I 内的n 个函数,若存在不全为零的常数 ,,,,21n k k k 使得当在该区间内有02211≡+++n n y k y k y k , 则称这n 个函数在区间I 内线性相关,否则称线性无关. 例如 x x 22sin ,cos ,1在实数范围内是线性相关的,因为 0sin cos 12 2≡--x x 又如2,,1x x 在任何区间(a,b)内是线性无关的,因为在该区间内要使 02321≡++x k x k k 必须0321===k k k . 对两个函数的情形,若=21y y 常数, 则1y ,2y 线性相关,若≠2 1y y 常数, 则1y ,2y 线性无关. 3.二阶常系数齐次微分方程的解法 定理 2 如果1y 与2y 是方程式(2)的两个线性无关的特解,则 212211,(C C y C y C y +=为任意常数)是方程式(2)的通解. 例如, 0=+''y y 是二阶齐次线性方程,x y x y cos ,sin 21==是它的 两个解,且≠=x y y tan 2 1常数,即1y ,2y 线性无关, 所以 x C x C y C y C y cos sin 212211+=+= ( 21,C C 是任意常数)是方程0=+''y y 的通解. 由于指数函数rx e y =(r 为常数)和它的各阶导数都只差一个常数因子, 根据指数函数的这个特点,我们用rx e y =来试着看能否选取适当的常数r , 使rx e y =满足方程(2).

matlab 迭代法[精品]

matlab 迭代法[精品] 1. 矩阵 122,211,,,,,,,,,A,111A,222, 11,,,,,,,,221,,112,,,, 证明:求解以为系数矩阵线性方程组的Jacobi迭代式收敛的,而A1 Gauss-Seidel方法是发散的;求解以为系数矩阵线性方程组的A2实验名称Gauss-Seidel是收敛的,而Jacobi方法是发散的. 2. 矩阵 1aa,,,,Aaa,1 ,,,,aa1,, (a) 参数取什么值时,矩阵是正定的. a (b) 取什么值时,求以为系数矩阵线性方程组的Jacobi迭代式收aa 敛的. 1、根据迭代收敛性的充分必要条件来判断Jacobi迭代式与Gauss-Seide 迭代式的收敛性,迭代收敛性仅与方程组系数矩阵有关,与右端无关;而且不依赖于初值的选取。实验目的 2、根据矩阵的判断定理求得矩阵元素a的取值,同时根据矩阵线性方程组的Jacobi迭代式收敛的充分条件(严格对角占优)来求a得取值。 1、(1)检验线性方程组的Jacobi迭代式的收敛性: function jacobi(A) D=zeros(3); for i=1:3 D(i,i)=A(i,i); 实验内容end (算法、程B=D^(-1)*(D-A); 序、步骤和k=max(abs(eig(B))) 方法) if k<1

'该线性方程组的Jacobi迭代式是收敛的' else k>=1 '该线性方程组的Jacobi迭代式是发散的' end (2)检验线性方程组的Gauss-Seide迭代式的收敛性: function Gauss(A) D=zeros(3); L=zeros(3); U=zeros(3); for i=1:3 D(i,i)=A(i,i); end L(2:3,1)=A(2:3,1); L(3,2)=A(3,2); U(1,2:3)=A(1,2:3); U(2,3)=A(2,3); B=-(D+L)^(-1)*U; k=max(abs(eig(B))) if k<1 '该线性方程组的Gauss-Seidel迭代式是收敛的' else k>=1 '该线性方程组的Gauss-Seidel迭代式是发散的' end 2、(1)参数取什么值时,矩阵是正定的.(矩阵的特征值全为正) a >> syms a >> A=[1 a a;a 1 a;a a 1]; >> eig(A) ans = 2*a+1 1-a

matlab求解常微分方程.docx

用matlab求解常微分方程 在MATLAB中,由函数dsolve()解决常微分方程(组)的求解问题,其具体格式如下:r 二dsolve('eql,eq2,???字condl,cond2,?.?;V) 匕ql,eq2,???*为微分方程或微分方程组,,condl,cond2,.??;是初始条件或边界条件,P是独立变量,默认的独立变量是讥 函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。 dy _1 例1:求解常微分方程莎一石的MATLAB程序为: dsolve(* Dy=l/(x+y) 1r!x1), 注意,系统缺省的自变量为t,因此这里要把自变量写明。其中:Y=lambertw(X)表示函数关系Y*exp(Y)二X。 例2:求解常微分方程E'-y— 0的MATLAB程序为: Y2=dsolve(1y*D2y-Dy A2=01, 1x f) Y2=dsolve(!D2y*y-Dy A2=0 J )

我们看到有两个解,其中一个是常数0。 dx 心 ? —+ 5x + y = e dt 空_兀_3『= g2f 例3:求常微分方程组〔力 ' 通解的MATLAB 程序为: [X,Y]=dsolve(f Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t) 1, 111 ) [X,Y]=dsolve(1 Dx+2 *x-Dy=l0 * cos(t),Dx+Dy+2 *y=4 *exp(- 2*t) T ,f x(0)=2,y(0)=0f ,f t T ) 以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是,我们知 道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析 解,此吋,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰 富的函数,我们将其统称为solver,其一般格式为: i°cosr, 7 =2 例4:求常微分方程组 y = 0 z 通解的MATLAB 程序为:

第六章 非线性微分方程

第六章 非线性微分方程 §6.1 稳定性 6.1.1 常微分方程组的存在唯一性定理 本章讨论非线性常微分方程组 n R Y Y t G dt dY ∈=),;( (6.1) 的解的性态. 设给定方程组(6.1)的初值条件为 , (6.2) 00)(Y t Y =考虑包含点),,,;(),(02010000n y y y t Y t L =的某区域 b Y Y a t t R ≤?≤?00,:. 在这里Y 的范数Y 定义为∑== n i i y Y 1 2 . 所谓在域上关于),(Y t G G Y 满足局部利普希 茨条件是指:对于G 内任一点,存在闭邻域,而于),(00Y t G R ?),(Y t G R 上关于Y 满足利普希茨条件,即存在常数,使得不等式 0>L Y Y L Y t G Y t G ?≤?~ );()~;( (6.3) 对所有R Y t Y t ∈),(),~ ,(成立. 称为利普希茨常数. L 存在唯一性定理 如果向量函数在域),(Y t G R 上连续,且关于Y 满足利普希茨条件,则方程组(6.1)存在唯一解),;(00Y t t Y ?=,它在区间h t t ≤?0上连续,而且 0000),;(Y Y t t =? 这里);(max ),, min(),(Y t G M M b a h G Y t ∈==. 解的延拓与连续定理 如果向量函数在域G 内连续,且关于),(Y t G Y 满足局部利普希茨条件,则方程组(6.1)的满足初值条件(6.2)的解),;(00Y t t Y ?=)),0t ((0G Y ∈可以延拓,或者延拓到(或);或者使点∞+∞?)),;(,(00Y t t t ?任意接近区域G 的边界. 而解 ),;(00Y t t ?作为的函数在它的存在范围内是连续的. 00,;Y t t 可微性定理 如果向量函数及 ),(Y t G ),,2,1,(n j i y G j i L ??在域内连续,那么方程组G

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

用matlab求解常微分方程

实验六 用matlab 求解常微分方程 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=n y y y y t F 如果未知函数是多元函数,成为偏微分方程。联系一些未知函数的一组微分方程组称为微分方程组。微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为 )()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++-- 若上式中的系数n i t a i ,,2,1),( =均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y 设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组 ?????????====-),,,,(''''2113221n n n n y y y t f y y y y y y y 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题 ???=<<=000)()),(,()('y t y t t t t y t f t y f

二阶非线性常微分方程的打靶法matlab实现

二阶非线性常微分方程的打靶法 1.问题: 试用打靶法求二阶非线性常微分方程亮点边值的数值解: 要求用Matlab 编程计算,请给出一些例子,验证你的算法与程序的正确性。 2.打靶法分析: 非线性打靶法: 非线性打靶法的基本原理是将两点边值问题(1)转化为下面形式的初值问题 令z = y ′,将上述二阶方程降为一阶方程组

3.Matlab 源代码: 创建M 文件: function ys=dbf(f,a,b,alfa,beta,h,eps) ff=@(x,y)[y(2),f(y(1),y(2),x)]; xvalue=a:h:b;%x取值范围 n=length(xvalue) s0=a-0.01;%选取适当的s的初值 x0=[alfa,s0];%迭代初值 flag=0;%用于判断精度 y0=rk4(ff,a,x0,h,a,b); if abs(y0(1,n)-beta)<=eps flag=1; y1=y0; else s1=s0+1; x0=[alfa,s1]; y1=rk4(ff,a,x0,h,a,b); if abs(y1(1,n)-beta)<=eps flag=1; end end if flag~=1 while abs(y1(1,n)-beta)>eps s2=s1-(y1(1,n)-beta)*(s1-s0)/(y1(1,n)-y0(1,n)); x0=[alfa,s2]; y2=rk4(ff,a,x0,h,a,b); s0=s1; s1=s2;

y0=y1; y1=y2; end end xvalue=a:h:b; yvalue=y1(1,:); ys=[xvalue',yvalue']; function x=rk4(f,t0,x0,h,a,b)%rung-kuta法求每个点的近似值(参考大作业一)t=a:h:b;%迭代区间 m=length(t);%区间长度 t(1)=t0; x(:,1)=x0;%迭代初值 for i=1:m-1 L1=f(t(i),x(:,i)); L2=f(t(i)+h/2,x(:,i)'+(h/2)*L1); L3=f(t(i)+h/2,x(:,i)'+(h/2)*L2); L4=f(t(i)+h,x(:,i)'+h*L3); x(:,i+1)=x(:,i)'+(h/6)*(L1+2*L2+2*L3+L4); end 4.举例 求二阶非线性方程的边值问题: 在matlab 控制台中输入: f=@(x,y,z)(x^2+z*x^2); x0l=0; x0u=2*exp(-1); alfa=0; beta=2; h=0.01 dbf(f,x0l,x0u,y0l,y0u,h,1e-6); >> y=ans(:,2); x=ans(:,1); >> plot(x,y,'-r') >> 结果:

matlab迭代法代码

matlab 迭代法代码 1、%用不动点迭代法求方程x-e A x+4=0的正根与负根,误差限是 10A-6% disp(' 不动点迭代法 '); n0=100; p0=-5; for i=1:n0 p=exp(p0)-4; if abs(p-p0)<=10(6) if p<0 disp('|p-p0|=') disp(abs(p-p0)) disp(' 不动点迭代法求得方程的负根为 :') disp(p); break; else disp(' 不动点迭代法无法求出方程的负根 .') end else p0=p; end end

if i==n0 disp(n0) disp(' 次不动点迭代后无法求出方程的负根') end p1=1.7; for i=1:n0 pp=exp(p1)-4; if abs(pp-p1)<=10(6) if pp>0 disp('|p-p1|=') disp(abs(pp-p1)) disp(' 用不动点迭代法求得方程的正根为 ') disp(pp); else disp(' 用不动点迭代法无法求出方程的正根 '); end break; else p1=pp; end end if i==n0

disp(n0) disp(' 次不动点迭代后无法求出方程的正根 ') end 2、%用牛顿法求方程x-e A x+4=0的正根与负根,误差限是disp(' 牛顿法') n0=80; p0=1; for i=1:n0 p=p0-(p0-exp(p0)+4)/(1-exp(p0)); if abs(p-p0)<=10(6) disp('|p-p0|=') disp(abs(p-p0)) disp(' 用牛顿法求得方程的正根为 ') disp(p); break; else p0=p; end end if i==n0 disp(n0) disp(' 次牛顿迭代后无法求出方程的解 p1=-3; for i=1:n0 p=p1-(p1-exp(p1)+4)/(1-exp(p1)); 10A-6 ') end

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