www.gusucode.com > 高等数学问题求解源码程序 > CH14/nlshoot.m

    function [t,y] = nlshoot(f1,fv,tspan,x0f,tol,varargin)
%NLSHOOT   非线性边值问题的打靶法求解
% [T,Y] = NLSHOOT(F1,FV,TSPAN,X0F,TOL)  打靶法求非线性边值问题F1的解
% [T,Y] = NLSHOOT(F1,FV,TSPAN,X0F,TOL,P1,P2,...)  打靶法求非线性边值问题F1的解,
%                                              其中F1,FV包含附加参数P1,P2,...
%
% 输入参数:
%     ---F1,FV:微分方程与前面介绍的关于变量v1,v2,v3,v4的微分方程的函数描述
%     ---TSPAN:求解区间
%     ---X0F:给定的边值条件
%     ---TOL:精度要求,用于控制参数m的误差
%     ---P1,P2,...:函数F1和FV的附加参数
% 输出参数:
%     ---T:返回的节点
%     ---Y:边值问题的解
%
% See also ode45, lineshoot

m0=1;  % m的初值
err=1;
while abs(err)>tol;
    [~,v] = ode45(fv,tspan,[x0f(1);m0;0;1],varargin);  % 计算迭代式
    m=m0-(v(end,1)-x0f(2))/v(end,3);  % 更新m的数值
    err=m-m0;
    m0=m;
end
[t,y] = ode45(f1,tspan,[x0f(1);m],varargin);  % 利用得到的初值求解方程
web -broswer http://www.ilovematlab.cn/forum-221-1.html