声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 808|回复: 5

[编程技巧] 关于子程序间参数的调用疑问

[复制链接]
发表于 2008-5-5 20:17 | 显示全部楼层 |阅读模式

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

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

x
程序作用:求解二阶二元微分方程
主程序:
global e xi Omega omega;
e=0.1;xi=0.01;Omega=0.5;omega=1;
[t,u]=ode45('ode3',[0,12],[0 0 0 0]);
子程序1:
function du=ode3(t,u)
global e xi Omega omega
du=zeros(4,1);%u1=x,u2=x',u3=y,u4=y'
du(1)=u(2);
du(2)=fcrack*k/Omega^2*sin(2*omega*t)/2*u(3)-2*xi/Omega*u(2)-(1/Omega^2-fcrack*k/Omega^2*cos(omega*t)^2)*u(1)+1/Omega^2+e*cos(omega*t);
du(3)=u(4);
du(4)=fcrack*k/Omega^2*sin(2*omega*t)/2*u(1)-2*xi/Omega*u(4)-(1/Omega^2-fcrack*k/Omega^2*sin(omega*t)^2)*u(3)+e*sin(omega*t);
子程序2:
function f=fcrack(alpha,theta,phi)
global e xi Omega omega
y=u(:,3),x=u(;,1);
phi=atan(y/x);
beta=0;
theta=mod(omega*t+beta-phi,2*pi);
if -pi/2+alpha<=theta&theta<=pi/2-alpha
    f=1;
elseif pi/2-alpha<=theta&theta<=pi/2+alpha
    f=1/2+1/2*cos((theta-pi/2+alpha)*pi/(2*alpha));
elseif pi/2+alpha<=theta&theta<=3*pi/2-alpha;
    f=0
elseif 3*pi/2-alpha<=theta&theta<=3*pi/2+alpha;
    f=1/2+1/2*cos((theta-3*pi/2-alpha)*pi/(2*alpha));
end
子程序1需要调用子程序2的frack,而子程序2又要调用子程序1的x跟y,即u1和u3
按上述程序运行时出现:Expected a variable, function, or constant, found ";".
请问如何改动程序才能正确调用
回复
分享到:

使用道具 举报

发表于 2008-5-5 20:39 | 显示全部楼层
怎么fcrack既是变量名又是函数名呢?
可以把你需要的参数都传递给主函数,然后再由主函数传递给所需的子函数。
发表于 2008-5-5 20:42 | 显示全部楼层
太混乱了,建议楼主补补编程基础,不可能循环调用的

评分

1

查看全部评分

发表于 2008-5-5 20:46 | 显示全部楼层
原帖由 bryant 于 2008-5-5 20:17 发表
程序作用:求解二阶二元微分方程
主程序:
global e xi Omega omega;
e=0.1;xi=0.01;Omega=0.5;omega=1;
[t,u]=ode45('ode3',[0,12],[0 0 0 0]);
子程序1:
function du=ode3(t,u)
global e xi Omega omega
...


楼主能否把微分方程帖一下?
 楼主| 发表于 2008-5-5 21:25 | 显示全部楼层

回复 4楼 的帖子

是有点混乱,现在就是需要大家指点指点

微分方程

微分方程
 楼主| 发表于 2008-5-6 12:39 | 显示全部楼层

回复 3楼 的帖子

那请问大概要怎样修改才能正确调用,谢谢指教
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-12 05:32 , Processed in 0.072740 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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