注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Puriney's Notes

Puriney=purine+Y, my Wonderland

 
 
 

日志

 
 

【Daily-M】【跟女友大人一起学matlab】和function一起工作  

2012-09-25 21:13:57|  分类: matlab |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这次遇到的诡异问题,是我要运行这一段函数(function):

function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

目的是模拟这y1 y2 y3随着时间的变化,他们之间的关系如下:
【Daily-跟女友大人一起学matlab】和function一起工作 - Puriney - Purineys Notes
 
那,我直接在.m文件里也保存了调取函数的代码,所以整个文件如下:

function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);

[T,Y] = ode45(@rigid,[0 12],[0 1 1],options);

plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

console里就报错为:

??? Input argument "y" is undefined.

原因是调取函数的方式不对(怎么联想到“一定是开机的方式不对”,囧),调取函数的方法有两种:
第一:在console里运行

>> options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
>> [T,Y] = ode45(@rigid,[0 12],[0 1 1],options);
>> plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

第二:则是在.m 文件里调取,如下:

function yy

options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[T,Y] = ode45(@rigid,[0 12],[0 1 1],options);
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

end

end

这样最后在console里输入yy即可。

就可以得到华丽丽的随着时间的模拟图:
【Daily-跟女友大人一起学matlab】和function一起工作 - Puriney - Purineys Notes

== end &&reference
  1. http://www.physicsforums.com/showthread.php?t=167132
  2. matlab自带help文档里ODE45的示例
 
== 话外音
果然matlab的用户真是多,什么报错的问题都可以直接google得到。
  评论这张
 
阅读(556)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017