lc622503 发表于 2007-6-13 09:26

这个简短的程序错在哪?

clear all
function dydt=f(t,y)
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
fun=inline('','t','y','flag','w');
x=;
tsp=;
y0=;
for i=1:10
   =ode45(fun,tsp,y0,[],x(i,:));
   plot(t,y)
end
提示是??? Error: File: jifen2.m Line: 2 Column: 1
Function definitions are not permitted at the prompt or in scripts

请帮忙看看
谢谢

rocwoods 发表于 2007-6-13 09:35

“function dydt=f(t,y)”
怎么能在command window定义函数呢?

dc1hawk 发表于 2007-6-13 09:38

%
function dydt=f(t,y,flag,w)
dydt=[
y(2);
sin(w(2)*t)-2*w(1)*y(1)-3*y(2);
];
%这个部分要单独定义函数的 对吧

x=;
tsp=;
y0=;
for i=1:10
   =ode45('f',tsp,y0,[],x(i,:));
   plot(t,y)
end
没有运行 你试试 哪里不对在说 呵呵

[ 本帖最后由 dc1hawk 于 2007-6-13 09:40 编辑 ]

eight 发表于 2007-6-13 09:58

原帖由 lc622503 于 2007-6-13 09:26 发表 http://www.chinavib.com/forum/images/common/back.gif
clear all
function dydt=f(t,y)
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
fun=inline('','t','y','flag','w');
x=;
tsp=;
y0=;
fo ...

请先看看这个帖子:常见的程序出错问题整理

学会发贴前自己先动手

lc622503 发表于 2007-6-13 09:59

还是不行阿
flag,w都不是函数f中的变量,一个是ode中的flag,w其实代表x(i,:)的值
程序是想解一个变参数的微分方程组
方程在如下形式时,是能运行的
clear all
fun=inline('','t','y','flag','w');
x=;
tsp=;
y0=;
for i=1:10
   =ode45(fun,tsp,y0,[],x(i,:));
   plot(t,y)
end
但是我要解的方程组,由40个方程构成,如是想把方程的集体表达写成一部分,这样明了,但是就出现了以上问题。

spano 发表于 2007-6-13 10:02

clear all;
不能放在最前面。

eight 发表于 2007-6-13 10:03

原帖由 lc622503 于 2007-6-13 09:59 发表 http://www.chinavib.com/forum/images/common/back.gif
还是不行阿
flag,w都不是函数f中的变量,一个是ode中的flag,w其实代表x(i,:)的值
程序是想解一个变参数的微分方程组
方程在如下形式时,是能运行的
clear all
fun=inline('

如果你写成 function 的形式,那必须写在 m 文件中,且以 function 开头;如果你写成脚本的形式,则既可以写在命令窗口中,也可以写在 m 文件中,且均不能包含 function 语句

请注意 m 文件和脚本文件的区别

lc622503 发表于 2007-6-13 10:39

谢谢楼上的关心
按照你们的说法,我看看你们提到的贴子
将程序改成了这样
function asmmuct
clear all
fun=inline('','t','y','flag','w');
x=;
tsp=;
y0=;
for i=1:10
   =ode45(fun,tsp,y0,[],x(i,:));
   plot(t,y)
end
function dydt=f(t,y)
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
dydt=
上面提示的错误没了
但是又提示
??? Error using ==> inline.feval
Not enough inputs to inline function.
将f1,f2的具体表达式直接放到inline里面可以阿
为什么这样就提示输入量少了了

eight 发表于 2007-6-13 11:05

原帖由 lc622503 于 2007-6-13 10:39 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢楼上的关心
按照你们的说法,我看看你们提到的贴子
将程序改成了这样
function asmmuct
clear all
fun=inline('','t','y','flag','w');
x=;
tsp ...

这是个别语句出错的问题,自己 help inline 一下,看看其输入的语法

lc622503 发表于 2007-6-14 10:16

仔细看了help inline 里面的内容

试了好多回,没有解决

感到奇怪的就是将f1 f2 的具体表达式放到inline 的[]中就能运算

而我丝毫没有改变方程的表达式,改成这种方式,怎么就提示输入量有错了

请熟悉inline用法的人指点一二

谢谢

lc622503 发表于 2007-6-17 15:42

反复试了很多次了

还是搞不定阿

请那位熟悉这个的指点一下

谢谢

lxq 发表于 2007-6-18 11:32

把 fun=inline('','t','y','flag','w');
分成两条语句试试
f1 f2分开写

lc622503 发表于 2007-6-19 08:55

楼主阿

怎么分开写阿

请说具体点

不是很明白阿

谢谢
页: [1]
查看完整版本: 这个简短的程序错在哪?