24小时热门版块排行榜    

查看: 2718  |  回复: 5

li52

金虫 (小有名气)

[求助] Matlab求解二阶常微分方程边值问题 已有2人参与

我用bvp4c求解了一个简单的二阶常微分方程边值问题
原方程,其中k是一个常数
边界条件
我想得到不同的k时的结果。需要从别的结果中提取k的值,数量较大,一个一个修改不太现实。
据我尝试,描述微分方程的function的参数只能是(x,y),不能再添加一个k。
怎样能整理成一个function,把k也当作参数呢?

附:k=1的时候,MATLAB计算过程

先转换成一阶微分方程组




求解过程:
1.magFun.m  描述微分方程
  function dy = magFun(x,y)
  k = 1;
  dy = zeros(2,1);
  dy(1) = y(2);
  dy(2) = -k*cos(y(1));
  end
2.magBC.m  描述边界条件
  function res = magBC( ya,yb )
  res = [ ya(1); yb(2) ];
  end
3.magSol.m  求解
  function magSol
  solinit = bvpinit(linspace(0,1,5),[1 0]);
  sol = bvp4c(@magFun,@magBC,solinit);
  x = linspace(0,1);
  y = deval(sol,x);
  plot(x,y(1,: ))

[ Last edited by li52 on 2016-10-8 at 17:10 ]
回复此楼

» 收录本帖的淘帖专辑推荐

程序

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
li52: 金币+10 2016-10-09 09:37:29
可以试试用1stOpt计算。假如k范围=【1,4】,变幅0.1
CODE:
LoopConstant k=[1:0.1:4];
Variable x=[0,1],y=0,y'=[,0];
Plot x[x],y,y';
ODEFunction y''=-k*cos(y);

Matlab求解二阶常微分方程边值问题
c261.jpg


Matlab求解二阶常微分方程边值问题-1
c262.jpg

2楼2016-10-08 19:50:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li52

金虫 (小有名气)

引用回帖:
2楼: Originally posted by dingd at 2016-10-08 19:50:27
可以试试用1stOpt计算。假如k范围=【1,4】,变幅0.1

LoopConstant k=;
Variable x=,y=0,y'=;
Plot x,y,y';
ODEFunction y''=-k*cos(y);


c261.jpg

c262.jpg
...

谢谢!
Google了下,1stOpt应该也是一种数学软件吧。但是之前的计算都是在MATLAB上进行的,再重新学习新软件,然后在软件间转换数据确实比较头疼。
3楼2016-10-08 21:21:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yz457694

铁杆木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
li52: 金币+40, ★★★★★最佳答案 2016-10-09 09:37:09
function dy = magFun(x,y)
  global k;
  dy = zeros(2,1);
  dy(1) = y(2);
  dy(2) = -k*cos(y(1));
end
  

function res = magBC( ya,yb )
  res = [ ya(1); yb(2) ];
end
  
  function magSol
  clear,clc
  global k; %全局变量k
  yt=[];    %存储要绘图的y数据
  x = linspace(0,1,10);
  for k=1:5
  solinit = bvpinit(x,[1 0]);
  sol = bvp4c(@magFun,@magBC,solinit);
  
  y = deval(sol,x);
  yt=[yt;y(1,];
  end
  plot(x,yt)
  legend('1','2','3','4','5')
Matlab求解二阶常微分方程边值问题-2
figure.jpg

4楼2016-10-09 07:16:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yz457694

铁杆木虫 (正式写手)

【答案】应助回帖

★ ★
dbb627: 金币+2, 谢谢指导 2016-10-09 08:59:54
表情干扰了。。。大致上就是把k设为了全局变量,然后加个循环,就可以自己设置k的范围来得到不同结果了
CODE:
function dy = magFun(x,y)
  global k;
  dy = zeros(2,1);
  dy(1) = y(2);
  dy(2) = -k*cos(y(1));
end
  

function res = magBC( ya,yb )
  res = [ ya(1); yb(2) ];
end
  
  function magSol
  clear,clc
  global k; %全局变量k
  yt=[];    %存储要绘图的y数据
  x = linspace(0,1,10);
  for k=1:5
  solinit = bvpinit(x,[1 0]);
  sol = bvp4c(@magFun,@magBC,solinit);
  
  y = deval(sol,x);
  yt=[yt;y(1,:)];
  end
  plot(x,yt)
  legend('1','2','3','4','5')

» 本帖已获得的红花(最新10朵)

5楼2016-10-09 07:19:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li52

金虫 (小有名气)

送红花一朵
引用回帖:
5楼: Originally posted by yz457694 at 2016-10-09 07:19:13
表情干扰了。。。大致上就是把k设为了全局变量,然后加个循环,就可以自己设置k的范围来得到不同结果了

function dy = magFun(x,y)
  global k;
  dy = zeros(2,1);
  dy(1) = y(2);
  dy(2) = -k*cos(y(1)) ...

谢谢!
写代码的时候就纠结变量在各个function里,不能全局使用,原来可以定义成全局变量!基础没有打好啊
PS : 加上 ) 就成了表情了,几个空格就好了。 : )
6楼2016-10-09 09:33:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 li52 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 国自然面上复盘~欢迎讨论 (金币+15) +13 晴天加油 2026-08-26 14/700 2026-08-28 18:36 by huagongfeihu
[基金申请] 系统查不到 +11 董八千 2026-08-26 11/550 2026-08-28 18:06 by Leogzhya
[基金申请] 有没有仍没收到信息的 +3 德尚中行 2026-08-27 3/150 2026-08-28 15:24 by rongshuxia
[基金申请] 麻烦专家们看看评委们的意见(F口面上) +4 gdd2018 2026-08-28 9/450 2026-08-28 14:22 by jklily
[基金申请] 2026年叶企孙基金 +3 bud_bud 2026-08-27 6/300 2026-08-28 11:53 by bud_bud
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 怎么查啊 +6 huang1991js 2026-08-26 6/300 2026-08-28 08:42 by winsaint
[基金申请] 基金未中,这种答复是模板吗? +5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 怎么看青基中了没有啊 +5 叶九微 2026-08-26 5/250 2026-08-27 10:35 by l_zh2008
[文学芳草园] 梦想 +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 系统进不去 +4 yanglien 2026-08-26 5/250 2026-08-26 11:10 by wenfengw83
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
信息提示
请填处理意见