lc622503 发表于 2007-6-22 14:21

inline使用问题

inline其调用格式为fun=inline(‘函数内容’,自变量列表)
如ff=inline('',...
   'x','y','flag','c2');
但是有时候部分较为复杂
想将[]内这部分内容先定义好如:
f1=y(2)
f2=c2*sin(x*pi*3/4)-y(2)/2-sin(y(1))
这样[]内只需写成的形式

但是就是在上述想法的实现过程中,搞不定!
请大虾帮忙实现一下
有的时候可能是几十组方程,就更有必要在外面定义好,再将f1;f2。。。写到括号内!

TurtleRock 发表于 2007-6-22 17:13

不知道你的确切意思,是不是这个意思:
syms x y z;
f=x*y+z;
............(一系列运算)
mf=inline(f,'x','y','z');

lc622503 发表于 2007-6-22 17:46

本来是这样的形式fun=inline('','t','y','flag','w');

现在想写成这样一种形式
fun=inline('','t','y','flag','w');
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
这样看起来明了,且在处理多组方程时更好。
但是不知道怎么实现,我试了以下这种方式
function dydt=f(t,y)
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
dydt=
没有搞定
请大家多多指教

xjzuo 发表于 2007-6-22 23:07

看来还是没有理解我的示例程序的本意----抓住编程的技巧,而不是生搬硬套.
提示: 为了简洁起见,编写function,按照示例程序的思路求解即可.
(虽然用inline也可以实现,不过稍欠简洁)

lc622503 发表于 2007-6-23 11:04

谢谢楼主的提醒

开始我的思路就是生搬硬套

因为这个语言对我来说就是个工具,用完以后可能永远没有再用的机会

觉得没有必要弄得明白

既然这样我就硬着头皮再看看

艾,其实这个课题就因该再找个处理程序这方面的人

lc622503 发表于 2007-6-24 17:00

写成如下形式:
function dongtai
clear all
tsp=;
y0=;
k=;
for i=1:10
   =ode45(@f,tsp,y0,[],k(i));
   plot(t,y)
end
function dydt=f(t,y)
f1=y(2)
f2=sin(k(i)*t)-2*y(1)-3*y(2)
dydt=
出现??? Error using ==> shiyan>f
Too many input arguments.
的错误,不知为什么啊

happy 发表于 2007-6-24 20:29

function dydt=f(t,y)

f1=y(2)

f2=sin(k(i)*t)-2*y(1)-3*y(2)

dydt=

显然不对,k都没传递进来

修改后如下:
function dydt=f(t,y,k)
f1=y(2);
f2=sin(k*t)-2*y(1)-3*y(2);
dydt=;

lc622503 发表于 2007-6-24 21:01

真的很感谢happy的回复

问题解决了:victory:

还想问一个问题:就是用ode45在算微分方程的时候
                        以上t的区间定义为0到10
                        而参数改变也是10次
                        是不是在计算0到1这段时,f中的k取1,;当计算区间到达1时是不是就将f中的k取成3;依次类推。
                        如果计算区间还是0到10,而参数改变20次,是不是就没0.5个区间改变一次参数。
                        感觉奇怪的就是在0到1或是1到2 等等的计算中,要根据精度确定步长,可想而之每个单位长度如0到1区间就要进行很多次的积分运算,计算多少次替换参数,不知通过什么控制。
                         是不是按照我刚才的想法平均分阿,是不是通过ode中那个flag控制阿
请高手解答,谢谢!

lc622503 发表于 2007-6-25 10:11

是不是我没有把问题说情楚,大家不理解阿?

这问题对于知道的人应该很简单吧

xjzuo 发表于 2007-6-25 10:21

自己试一下不就明白了?
既然你觉得没人理解得了你的问题,那请到别的论坛去问吧.
页: [1]
查看完整版本: inline使用问题