xicheng_wu 发表于 2007-4-22 21:11

仿真一个系统,帮我看看哪里有错啊,ode23不会用啊

function xdot=mechsys(t,x)
F=25;
M=1;
B=5;
K=25;
xdot=;
t0=0;
tfinal=3;
x0=;
to1=0.001;
trace=0;
=ode23('mechsys',t0,tfinal,x0,to1,trace);
subplot(2,1,1);
plot(t,x);

cdwxg 发表于 2007-4-22 21:53

Input argument "x" is undefined.

Error in ==> mechsys at 6
xdot=;
不是ode23得错误吧
ode23只是仿真得一个计算方法吧

gghhjj 发表于 2007-4-23 07:32

这个程序写成这样,有点没话说

function xdot=mechsys(t,x)
F=25;
M=1;
B=5;
K=25;
xdot=;

红色部分是我改的,不知道你的方程中应该是x(1)还是x(2)

t0=0;
tfinal=3;
x0=;
= ode23('mechsys',,x0);
subplot(2,1,1);
plot(t,x);

xicheng_wu 发表于 2007-4-23 15:20

回复 #3 gghhjj 的帖子

一直提示X没有定义啊,怎么 定义的啊?我才学这个,谢谢啦

superstones 发表于 2007-4-24 13:19

xdot=;

应该是这里面的sqrt(x),没有定义
应该为x(1)或x(2)

xicheng_wu 发表于 2007-4-24 17:20

回复 #5 superstones 的帖子

改成x(1)还是提示X没有定义啊

gghhjj 发表于 2007-4-25 02:07

原帖由 xicheng_wu 于 2007-4-24 17:20 发表
改成x(1)还是提示X没有定义啊
三楼给你修改的程序已经没有问题了,不知道你是怎么运行的
建议看看matlab基础吧

咕噜噜 发表于 2007-4-27 13:46

回复 #4 xicheng_wu 的帖子

楼主你是不是把m函数和主程序放在同一个程序下面了啊,m文件和主程序应该是分开的两个程序,就像gghhjj帖子里面写的那样,两个程序分开来保存计算就没问题。

[ 本帖最后由 咕噜噜 于 2007-4-27 13:47 编辑 ]

xicheng_wu 发表于 2007-4-27 21:55

原帖由 咕噜噜 于 2007-4-27 13:46 发表
楼主你是不是把m函数和主程序放在同一个程序下面了啊,m文件和主程序应该是分开的两个程序,就像gghhjj帖子里面写的那样,两个程序分开来保存计算就没问题。
原来这样啊,谢谢你啊

xicheng_wu 发表于 2007-4-28 10:05

顺便问一下,为什么不能合在一起写呢

咕噜噜 发表于 2007-4-28 10:20

回复 #10 xicheng_wu 的帖子

^_^,写在一起那是一个程序,在一个程序中所有的变量都要赋值,要么是符号变量,要么是数值变量,你合在一起肯定会显示x没有定义,因为你确实没有定义x的变量类型。
再有m函数的调用问题,m函数文件他本身就等于一个完整的程序,用来实现一些特定的功能,调用m函数其实相当于你调用了一个程序的输出结果,主要是为了防止计算的反复等。当然m函数文件里面的任何参数都还保存在内存中,但是主程序中这些变量实际上你是找不到的,m函数文件里面的变量仅在函数运行期间有效,是局部变量,这个m函数程序是单独实现计算,和主程序并不是一起计算。
这算是matlab的一个类似的工具命令差不多,如果放在一起就失去了m函数文件的作用了。
这是我的理解,我也不知道说明白没有

gghhjj 发表于 2007-4-29 06:48

原帖由 xicheng_wu 于 2007-4-28 10:05 发表
顺便问一下,为什么不能合在一起写呢
完全是可以的,不过主程序要写成script file的形式,如下:

function test
t0=0;
tfinal=3;
x0=;
= ode23('mechsys',,x0);
subplot(2,1,1);
plot(t,x);

function xdot=mechsys(t,x)
F=25;
M=1;
B=5;
K=25;
xdot=;

这些只不过是规定的格式问题,建议看看matlab
页: [1]
查看完整版本: 仿真一个系统,帮我看看哪里有错啊,ode23不会用啊