声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1540|回复: 12

[编程技巧] 这个简短的程序错在哪?

[复制链接]
发表于 2007-6-13 09:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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('[f1;f2]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
   [t,y]=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

请帮忙看看
谢谢
回复
分享到:

使用道具 举报

发表于 2007-6-13 09:35 | 显示全部楼层
“function dydt=f(t,y)”
怎么能在command window定义函数呢?
发表于 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=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
   [t,y]=ode45('f',tsp,y0,[],x(i,:));
   plot(t,y)
end
没有运行 你试试 哪里不对在说 呵呵

[ 本帖最后由 dc1hawk 于 2007-6-13 09:40 编辑 ]
发表于 2007-6-13 09:58 | 显示全部楼层
原帖由 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('[f1;f2]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
fo ...


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

学会发贴前自己先动手
 楼主| 发表于 2007-6-13 09:59 | 显示全部楼层
还是不行阿
flag,w都不是函数f中的变量,一个是ode中的flag,w其实代表x(i,:)的值
程序是想解一个变参数的微分方程组
方程在如下形式时,是能运行的
clear all
fun=inline('[y(2);sin(w(2)*t)-2*w(1)*y(1)-3*y(2)]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
   [t,y]=ode45(fun,tsp,y0,[],x(i,:));
   plot(t,y)
end
但是我要解的方程组,由40个方程构成,如是想把方程的集体表达写成一部分,这样明了,但是就出现了以上问题。
发表于 2007-6-13 10:02 | 显示全部楼层
clear all;
不能放在最前面。

评分

1

查看全部评分

发表于 2007-6-13 10:03 | 显示全部楼层
原帖由 lc622503 于 2007-6-13 09:59 发表
还是不行阿
flag,w都不是函数f中的变量,一个是ode中的flag,w其实代表x(i,:)的值
程序是想解一个变参数的微分方程组
方程在如下形式时,是能运行的
clear all
fun=inline('[y(2);sin(w(2)*t)-2*w(1)*y(1) ...


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

请注意 m 文件和脚本文件的区别
 楼主| 发表于 2007-6-13 10:39 | 显示全部楼层
谢谢楼上的关心
按照你们的说法,我看看你们提到的贴子
将程序改成了这样
function asmmuct
clear all
fun=inline('[f1;f2]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
   [t,y]=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=[f1;f2]
上面提示的错误没了
但是又提示
??? Error using ==> inline.feval
Not enough inputs to inline function.
将f1,f2的具体表达式直接放到inline里面可以阿
为什么这样就提示输入量少了了
发表于 2007-6-13 11:05 | 显示全部楼层
原帖由 lc622503 于 2007-6-13 10:39 发表
谢谢楼上的关心
按照你们的说法,我看看你们提到的贴子
将程序改成了这样
function asmmuct
clear all
fun=inline('[f1;f2]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp ...


这是个别语句出错的问题,自己 help inline 一下,看看其输入的语法
 楼主| 发表于 2007-6-14 10:16 | 显示全部楼层
仔细看了help inline 里面的内容

试了好多回,没有解决

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

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

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

谢谢
 楼主| 发表于 2007-6-17 15:42 | 显示全部楼层
反复试了很多次了

还是搞不定阿

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

谢谢
发表于 2007-6-18 11:32 | 显示全部楼层
把 fun=inline('[f1;f2]','t','y','flag','w');
分成两条语句试试
f1 f2分开写
 楼主| 发表于 2007-6-19 08:55 | 显示全部楼层
楼主阿

怎么分开写阿

请说具体点

不是很明白阿

谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-17 00:59 , Processed in 0.055737 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表