打靶法求解两点边值问题

function varargout = shooting_two_point_boundary(varargin)
% ==========================================================
% 函数名:shooting_two_point_boundary.m
% 基于打靶法计算两点边值问题,仅针对二阶微分方程
% author: xianfa110.
% blog: http://blog.sina.com.cn/xianfa110
% 函数形式:
% [result,err,z0] = shooting_two_point_boundary(@fun,[y_0,y_end],[x_0,x_1],h);
% 输入:
% fun = 函数名;
% y_0 = 函数初值;
% y_end = 函数终值;
% x_0 = 自变量初值;
% x_end = 自变量终值;
% h = 积分步长;
% 输出:
% result = [x,y];
% err = 误差;
% z0 = y‘初值;
% ===========================================================
% 函数fun:4y‘‘+yy‘ = 2x^3 +16 ; 2<= x <=3
% 写法:
% function f = fun(y,x)
% dy = y(2);
% dz = (2*x^3+16-y(1)*y(2))/4;
% f = [dy,dz];
% ===========================================================
% 注意:y(1) = y,y(2) = y‘。
% ===========================================================
F = varargin{1};
y_0 = varargin{2}(1);
y_end = varargin{2}(2);
x_0 = varargin{3}(1);
x_1 = varargin{3}(2);
ts = varargin{4};
t0 = x_0-0.5;
flg = 0;
kesi = 1e-6;
y0 = rkkt(F,[y_0,t0],x_0,x_1,ts);
n = length(y0(:,1));
if abs(y0(n,1)-y_end)<=kesi
    flg=1;
else
    t1=t0+1;
    y1=rkkt(F,[y_0,t1],x_0,x_1,ts);
    if abs(y1(n,1)-y_end)<=kesi
        flg=1;
    end
end
if flg ~= 1
    while abs(y1(n,1)-y_end) > kesi
        % ==========插值法求解非线性方程=============== %
        t2 = t1-(y1(n,1)-y_end)*(t1-t0)/(y1(n,1)-y0(n,1));
        y2 = rkkt(F,[y_0,t2],x_0,x_1,ts);
        t0=t1;
        t1=t2;
        y0=y1;
        y1=y2;
    end
end
x = x_0:ts:x_1;
out = [x‘,y1(:,1)];
varargout{1} = out;
varargout{2} = abs(y1(n,1)-y_end);
varargout{3} = t1;

转载:http://blog.sina.com.cn/s/blog_408540af0100b7mi.html

时间: 2024-10-12 15:54:13

打靶法求解两点边值问题的相关文章

Matlab基础学习-----------Matlab求解常微分方程边值问题的方法

算法代码 solinit =bvpinit(linspace(0,4,5),[1 0]); % linspace(0,4,5)为初始网格,[1,0]为初始估计值 sol=bvp4c(@twoode,@twobc,solinit); % twoode与twobc分别为微分方程与边界条件的函数,solinit为结构 x=linspace(0,4); %确定x范围 y=deval(sol,x); %确定y范围 plot(x,y(1,:)); %画出y-x的图形 %定义twoode函数(下述代码另存为工

python 实现dijkstra算法求解最短路径

? 重点:dijkstra算法按层计算其余点到源点的最短距离,层层扩展. 1. dijkstra算法 求解目标:找到图中源点到其余点的最短距离,是单源点最短距离算法. 整体思路:每一步都寻找到与源点最近的点,层层扩展,是贪心算法. 具体实现: 输入:给定一个图的邻接表M,源点u. 辅助变量:存储与源点最短距离的字典.存储已访问节点的集合. 算法过程: 初始化:将源点加入已访问集合 对已访问集合中每个点的所有邻接点,计算与源点的最短距离存入字典和已访问集合. 重复2,直至所有顶点被访问 2. 求解

一阶非线性常微分方程解的存在性定理—Picard-Lindelof定理

上一节简单介绍了可求解的一阶常微分方程的解法,因为大部分非线性方程是不可解的,所以需要给出解的存在性的证明.本节主要介绍一阶非线性常微分方程Cauchy问题$$(E)\,\,\,\,\,\frac{dy}{dx}=f(x,y),\,\,\,\,\,y(x_{0})=y_{0}.$$解的存在性定理Picard-Lindelof定理(有的书上称它为Cauchy-Lipschitz定理). 对一阶常微分方程解的存在性理论作出重要贡献的数学家有Cauchy.Lipschitz.Picard.Lindel

路径诱导系统

要解决交通流的诱导问题就必须解决动态和随机的交通流量或平均车速在路段和交叉路口的分配问题,即"实时动态交通分配".这一理论的主要功能是:预测交通运输系统状况.提供道路引导系统.引导车辆在最佳线路上行驶.为出行者提供出发时间和选择方式.提供诱导系统与交通控制系统的相互联系.为先进的交通管理系统和先进的交通信息系统提供了重要的理论基础. 为了有效的解决这一理论问题,需要运用交通规划相关理论,设计实际最优和预测最优动态交通分配算法.该模型的输入数据既是需要实施交通诱导区域内路网中各路段和路口

分治法二(平面最近点对)

上篇文章介绍了分治法的概念和基本解题步骤,并附加了一个例题帮助大家了解分治法的基本思想,在这篇文章中,我将对分治法的另一个经典问题进行分析,希望我的文章能够将今天的主题解释清楚.接下来我将用三种不同的方法求解"平面最近点对"问题. 问题描述:在一个平面上随机分布着 n 个点,现给定 n 个点的坐标,要求给出最近的两个点之间的距离. 方法一:原始方法 题目要求求出最近的两点之间的距离,先整理一下已知的线索:首先点的总个数为 n :其次已知 n 个点的坐标.掌握了每个点的坐标,就相当于间接

算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)

 目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量   PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年). 他年少时便很有才华.一次有人问他的年龄,他回答说: "到了x的平方那年,我刚好是x岁". 请你计算一下,德摩根到底出生在哪一年. 题中的年龄指的是周岁. 请填写表示他出生年份的四位数字,不要填写任何多余内容. 1806 public cl

人工智能-遗传算法解决推箱子问题现实

原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! 一.研究背景 推箱子游戏中的路径查找问题-给定一方格,求两点最短距离. 传统求两点最短路径的算法有: 1.通用的搜索算法 2.解决无负权边的带权有向图的单源最短路问题的Dijkstra算法 3.求解含负权边的带权有向图的单源最短路径问题的Bellman-Ford算法 4.Bellman-for

NYOJ题目20吝啬的国度

-----------------------------------------n-1条边的无向连通图是一棵树,又因为树上两点之间的路径是唯一的,所以解是唯一的.(注意并不一定是二叉树,所以最好采用存储图的方式存储数,我使用的是邻接表)这个时候只需要考虑如何求解两点间的路径呢?遍历就可以了.但是应该如何遍历呢?比较容易想到的办法是分别从每个点计算到S点的路径,既然它们的终点相同,那为什么不逆向一下干脆从S点向这些点出发呢?所以现在问题就转化为了从S点出发遍历树,OK,这个问题就比较简单了,只需

规格化设计——OO第三单元总结

规格化设计--OO第三单元总结 一.JML语言理论基础.应用工具链 1.1 JML语言 ? JML(java modeling language)是一种描述代码行为的语言,包括前置条件.副作用等等.JML是一种行为接口规格语言 (Behavior Interface Speci?cation Language,BISL),基于Larch方法构建. ? 通过使用JML,我们可以忽略一个类.一个方法内部的具体实现,专注于描述方法的预期功能,从而把过程性的思考延迟到方法设计中,扩展了面向对象设计的原则