24小时热门版块排行榜    

CyRhmU.jpeg
查看: 4733  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
已阅   同方向广播   申请计算强帖   回复此楼   编辑   查看我的主页

匿名

用户注销 (小有名气)

本帖仅楼主可见
7楼2014-05-12 10:39:14
已阅   申请计算强帖   回复此楼   编辑   查看我的主页
查看全部 13 个回答

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
fegg7502: 金币+3, 应助指数+1, 专家考核, 3ks 2014-05-13 09:16:37
这个可以考虑用bvp解算器做
BVP解算器
solinit = bvpinit(x, yinit, params)
sol = bvpsolver(odefun,bcfun,solinit,options)
由于边值问题可能有多解,为了便于我们确定那个解是我们需要的,所以必须使用bvpinit函数对初值进行估计
解算器(bvpsolver):Matlab中提供了bvp4c和bvp5c,后者误差控制更好些
输入参数:
x:需要计算的网格点,相当于ode**的tspan
yinit:猜测的值,可以是具体值,也可以是函数,类似与 ode**的 x0
params:其它未知参数,也是一个猜测值
odefun:描述边值问题微分方程的函数句柄

bcfun:边值函数,一般是双边值(x 的上下限即认为两个边界),但也支持多边值(具体看帮助)
bc(y(a),y(b))=0
举个例子,y(0)=0,y(4)=-2 ---bcfun可写成 res =@(ya,yb) [ ya(1) ; yb(1) + 2];
y'(0)=y'(pi)=0,y(0)=1-----------bcfun可写成res = @(ya,yb) [  ya(2); yb(2);ya(1)-1 ];
solinit:由bvpinit生成的初始化网格
solinit = bvpinit(linspace(pa,pb,10),[1 0]);
bvpinit的第一个参数表示求解域及中心节点,第二个参数表示猜测初始值,基本都写成[1 0],它的变化一般对解无影响
options:BVP解算器优化参数,可以通过bvpset设置,具体参数查看帮助

降阶法表达二阶的常微分方程,ya(1)表示函数在求解域[a,b]的左边界a上的值,ya(2)表示函数的一阶导数在a上的值,“ya(1)-5”实际上是“ya(1)-5=0”的简写,表示y(x=a)=5,即函数在左边界上的值为5。yb是右边界,其他与ya相同。
用bvp4c求得的解sol是一个结构体,其中的子项y是一个2行多列的矩阵,第一行表示函数值,第二行表示函数的导数。另一个子项yp也是一个2行多列的矩阵,第一行表示函数一阶导数值,第二行表示函数二阶导数值。用deval求出的y与sol.y相同
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
2楼2014-05-09 19:47:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
3楼2014-05-09 21:24:53
已阅   申请计算强帖   回复此楼   编辑   查看我的主页

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
478107371: 金币+60, ★★★★★最佳答案, 大神,请接受我的膝盖,分全是你一人儿的 2014-05-10 00:11:25
fegg7502: 金币+2, 应助指数+1, 专家考核, 3ks 2014-05-13 09:16:54
举个例子吧
y''-3y'+2y=x, y‘(0)=1,y’(1)=2
CODE:
%解析解
yy=dsolve('D2y-3*Dy+2*y=x','Dy(0)=1','Dy(1)=2','x');
x=0:0.01:1;hold on;plot(x,eval(yy),'bo')
%bvp 数值解
f1=@(x,y)[y(2);x-2*y(1)+3*y(2)];
solinit = bvpinit(linspace(0,1,20),[-1 1]);
f2=@(ya,yb)[ya(2)-1;yb(2)-2];
sol = bvp4c(f1,f2,solinit);
xint = linspace(0,1,25);
yint = deval(sol,xint);
hold on; plot(xint,yint(1,:),'rp-');

The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
4楼2014-05-09 21:51:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见