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。。。写到括号内! 不知道你的确切意思,是不是这个意思:
syms x y z;
f=x*y+z;
............(一系列运算)
mf=inline(f,'x','y','z'); 本来是这样的形式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=
没有搞定
请大家多多指教 看来还是没有理解我的示例程序的本意----抓住编程的技巧,而不是生搬硬套.
提示: 为了简洁起见,编写function,按照示例程序的思路求解即可.
(虽然用inline也可以实现,不过稍欠简洁) 谢谢楼主的提醒
开始我的思路就是生搬硬套
因为这个语言对我来说就是个工具,用完以后可能永远没有再用的机会
觉得没有必要弄得明白
既然这样我就硬着头皮再看看
艾,其实这个课题就因该再找个处理程序这方面的人 写成如下形式:
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.
的错误,不知为什么啊 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=; 真的很感谢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控制阿
请高手解答,谢谢! 是不是我没有把问题说情楚,大家不理解阿?
这问题对于知道的人应该很简单吧 自己试一下不就明白了?
既然你觉得没人理解得了你的问题,那请到别的论坛去问吧.
页:
[1]