两点边值问题求解---bvp4c函数

本文深入探讨了Matlab中的bvp4c函数,详细解释了其调用格式及参数意义,包括微分方程函数句柄、边界条件句柄、初始估计解结构体等,并通过示例展示了如何求解最优控制问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我第一次接触bvp4c函数是在《最优控制》课程上。例2是课程上布置的利用bvp4c函数求解最优控制的问题。本篇文章是我参考文末的材料加上自己的理解编写而成。

bvp4c函数用于数值求解两点边值问题,作为Matlab中对ode系列函数的补充。ode系列函数只能数值求解具有初值的常微分方程。

1、调用格式

sol = bvp4c(odefun,bcfun,solinit,options,p1,p2,…)

其中,

1) odefun 函数为微分方程的函数句柄。

function dydx=odefun(x,y,p1,p2,…)

其中,x为标量,y为列向量,p1,p2是在主函数中给出的参数向量。odefun(x,y)必须返回列向量dydx,表示 f(x,y)。

2) bcfun 函数为微分方程的边界条件句柄。

function res=bcfun(ya,yb,p1,p2,…)

其中,ya和yb是与y(a)和y(b)对应的列向量,ya表示初值,yb表示终值。输出res是列向量。若ya(i)的值为a,则程序里应表示为ya(i)-a。

3)solinit为包含初始估计解的结构体,应使用bvpinit函数创建,solinit=bvpinit(x,y),x向量为初始网格的排序节点,应满足边界条件a= solinit.x(1)且b =solinit.x(end)。向量y为初始估计解,使得solinit.y(:,i)为在solinit.x(i)节点处的初始估计解。以常值作为初始猜测值。有时候,随便给初值即可。如果随便给初值算不出来,可以用continuaion方法给初值,详见参考4。应注意,向量x和y的长度互不相关。

4)options为可选积分参数。使用bvpset函数创建的结构体。一般情况可用[]代替。

5)输出sol为一结构体,为特定数量点对应的解,其所包含的字段如下表所示。为使曲线变得更光滑,需要在中间插入一些点,使用deval函数,sxint=deval(sol,xint), 其中,xint为点向量,函数deval根据这些点向量求解。sol为函数bvp4c的输出。

sol.x

Bvp4c 选择的网格

sol.y

sol.x 网格点处y(x)的近似值

sol.yp

sol.x 网格点处y’(x)的近似值

sol.parameters

bvp4c 针对未知参数返回的值(如果有)

sol.solver

‘bvp4c’

sol.stats

计算成本统计信息(当设置stats选项和bvpset时,会显示此信息)

2、示例

例1求解常微分方程

边界条件y(0)=0,y(1)=0

首先,将微分方程换为标准格式

边界条件为

.m文件中程序编写如下:

运行结果为:

例2(求解最优控制问题-有约束的停车能耗最优控制)

初始时刻车辆位置为x1(0)=-2,速度为x2(0)=1,状态方程

容许控制为|u|<=M1=1.8,终止条件为x1(tf)=0,x2(tf)=0,tf=2

要最小化的性能指标为总能耗

                        

                 

程序编写如下:

运行结果:

参考:

1、张杰、王飞跃,《最优控制》清华大学出版社

2、http://www.doc88.com/p-295946999960.html

3、https://ww2.mathworks.cn/help/matlab/ref/bvp4c.html

4、http://www.joyfulphysics.net/index.php/archives/189/

 

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值