建不了的模。 发表于 2014-10-6 10:35

线性微分方程边值问题打靶算法Matlab程序

注意该算法只能完成二阶常微分方程双边值问题求解,至于其他形式的边值问题必须先转换到二阶形式

对于下面的二阶常微分方程



file:///http://attach.matlabsky.com/data/attachment/forum/month_0903/20090319_ee1f3a88f0e051ac1a7bzlh10ckxnfuy.gif
利用上面方程的线性结果和两个特殊的初值问题,我们可以构造两个等效的常微分初值方程初值问题,对于初值问题我们就可以直接使用ode**计算器或者龙哥库塔算法求解了。构造的两个初值问题为



此时我们可以构造原微分方程的解为

有上面的基础那我们很容编写直接边值问题的线性打靶算法,下面我写了一个供大家参考(参见附件),函数内部调用了自己编写的rk4()函数
%线性方程边值问题的打靶算法
%对微分方程y''=p*y'+q*y+r,a<t<b,u(a)=alpha,u(b)=beta,其中y,p,q和r都是x的函数
%构造成两个等效的初值问题
%u''=p*u'+q*u+r,u(a)=alpha,u'(a)=0
%v''=p*v'+q*v,v(a)=beta,v'(a)=1
%使用Matlab语言描述微分方程u和v,注意我们先必须化为一阶微分方程组
%f1=@(t,u);
%f2=@(t,v);
%则原微分方程的解为
%x=u+c*v=u+(beta-u(b))file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\LKNIT0K@G.gif(b)*v
%
%输入参数
% f1 描述方程u的Matlab函数,只能是句柄(@()和M函数),或者inline函数
% f2 描述方程v的Matlab函数
% a,b 微分计算区间
% alpha,beta 上下边界
% maxiter 最大迭代次数
% 输出参数
% 坐标点t对应的微分值x
%
我们举一个例子吧,对于下面的二阶边值问题



f1=@(t,u);%这里必须使用“;”隔开
f2=@(t,u);
a=0;b=4;alpha=1.25;beta=-0.95;maxiter=1000;
=lineshoot(f1,f2,a,b,alpha,beta,maxiter);
plot(t,x)
复制代码


附件中的代码使用到了自己编写的四阶龙阁库塔算法rk4()函数,但是假如说对Matlab中的ode**函数比较熟悉的网友,可以直接调用ode45。

下面给出参考代码,但是程序是将原来的边值问题转换为如下四个初值问题:

**** Hidden Message *****

深V礼 发表于 2014-10-6 13:34

不错的书籍,下载来看看

ゞ_轻描丶幸福的 发表于 2014-10-6 13:35

好资料   下载看看

mingtingqing 发表于 2014-10-6 13:36

太棒了

fanfan1993 发表于 2015-2-3 13:30

谢谢~~~~~~~

jiay 发表于 2015-2-3 14:23

good............
页: [1]
查看完整版本: 线性微分方程边值问题打靶算法Matlab程序