声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3080|回复: 7

[编程技巧] matlab ode45 请教!

[复制链接]
发表于 2005-11-16 20:34 | 显示全部楼层 |阅读模式

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

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

x
syms y
n=6e+25;q1=915e-9;q2=1064e-9;a=3e-10;g1=0.01;g2=0.85;ap=8e-25;ep=5e-26;as=5e-27;es=3.4e-25;tao=840e-6;h=6.63e-34;c=3e+8; l=10;s1=q1/(h*c*a);
s2=q2/(h*c*a);s3=g1*(ap+ep);s4=g1*n*ap*l;s5=g2*(as+es);s6=g2*n*as*l; k1=20;k2=0;k4=0; y0=2.704312e+025;
t0=0;tf=1e-7;dt=2e-9;t1=2e-8;t=[t0:dt:tf]%产生信号
t=t0:dt:tf; st=length(t);
n1=floor((t1-t0)/dt);%t1求对应的应本序号
x2=[ones(1,n1-1),zeros(1,st-n1+1)]%产生阶跃信号
%绘图 stairs(t,x2)
k3=500.*x2;%k3为峰值500的阶跃信号
tspan=[t0,tf];
%f=-y/tao+s1*k2*(exp(-h1)-1)-s1*k1*(exp(h1)-1)+s2*k4*(exp(-h2)-1)-s2*k3*(exp(h2)-1)
[t,y]=ode45('rh',tspan,y0,[],tao,s1,s2,s3,s4,s5,s6,k1,k2,k3,k4)
h1=s3.*y-s4;h2=s5.*y-s6; v=10*log10(exp(h2)); u3=k3*exp(h2);
plot(t,y,'+')

function dydt=rh(t,y,flag,tao,s1,s2,s3,s4,s5,s6,k1,k2,k3,k4)
h1=s3*y-s4;h2=s5*y-s6;
dydt=-y/tao+s1*k2*(exp(-h1)-1)-s1*k1*(exp(h1)-1)+s2*k4*(exp(-h2)-1)-s2*k3.*(exp(h2)-1)
k3为峰值500的阶跃信号,只带500时运行,带上500.*x2就不行,怎么办?

[ 本帖最后由 ChaChing 于 2009-7-11 18:50 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2005-12-12 20:04 | 显示全部楼层

matlab ode45 请教!

syms y
n=6e+25; q1=915e-9; q2=1064e-9; a=3e-10; g1=0.01; g2=0.85; ap=8e-25;
ep=5e-26; as=5e-27; es=3.4e-25; tao=840e-6; h=6.63e-34; c=3e+8; l=10;
s1=q1/(h*c*a); s2=q2/(h*c*a); s3=g1*(ap+ep);
s4=g1*n*ap*l; s5=g2*(as+es); s6=g2*n*as*l;
k1=20;k2=0;k4=0;%k3=500
y0=2.704312e+025; t=0:2^12;5; k3=exp(-(t).^2/2);
tspan=[0,5];
[t,y]=ode45('rh',tspan,y0,[],tao,s1,s2,s3,s4,s5,s6,k1,k2,k3,k4)
h1=s3*y-s4; h2=s5*y-s6; u3=k3*exp(h2);
plot(t,u3); hold on
function dydt=rh(t,y,flag,tao,s1,s2,s3,s4,s5,s6,k1,k2,k3,k4)
h1=s3*y-s4;h2=s5*y-s6;
dydt=-y/tao+s1*k2*(exp(-h1)-1)-s1*k1*(exp(h1)-1)+s2*k4*(exp(-h2)-1)-s2*k3.*(exp(h2)-1)

方程就是dydt=-y/tao+s1*k2*(exp(-h1)-1)-s1*k1*(exp(h1)-1)+s2*k4*(exp(-h2)-1)-s2*k3.*(exp(h2)-1);k3的值为一高斯脉冲k3=exp(-(t).^2/2);,其值随时间变化。y为变量,t为自变量。其它的都是已知数。

运行后:??? Error using ==> funfun\private\odearguments
RH must return a column vector.

[ 本帖最后由 ChaChing 于 2009-7-11 18:39 编辑 ]
发表于 2005-12-12 20:26 | 显示全部楼层

回复:(asd)matlab 请教!!

看你的程序式求解一个微分方程的,所以RH返回的时候dydt应该是一个值<BR><BR>但是在RH中,由于k3是个向量,所以返回的dydt是个向量<BR><BR>明显错误,请先搞清楚方程到底是什么样的
 楼主| 发表于 2005-12-12 20:56 | 显示全部楼层
是应该是一组向量,那RH怎样变化?
发表于 2005-12-12 22:01 | 显示全部楼层

回复:(asd)是应该是一组向量,那RH怎样变化?

<DIV class=quote><B>以下是引用<I>asd</I>在2005-12-12 20:56:41的发言:</B><BR>是应该是一组向量,那RH怎样变化?</DIV>
<br>把方程贴出来看看
 楼主| 发表于 2005-12-13 08:30 | 显示全部楼层
谢谢大家的帮助,请再说明白些。

[ 本帖最后由 mjhzhjg 于 2007-9-30 14:26 编辑 ]
发表于 2005-12-13 10:40 | 显示全部楼层

回复:(asd)matlab求助!

回复:(asd)matlab求助!
你这个是一个显含时间的非自治方程,不是这么简单求解的
doc ode45看一下M(t,y)y'=f(t,y)部分吧, 另外再看看doc odeset

顺便说一句,同一个问题请不要发那么多主题,在一个主题下讨论就行了
另外发帖的时候主题名字尽量涵盖所问问题的内容,尽量不要用“matlab求助!”之类的]
方便管理和大家查阅

[ 本帖最后由 ChaChing 于 2009-7-11 18:12 编辑 ]
 楼主| 发表于 2005-12-16 15:50 | 显示全部楼层
对不起!下次一定注意。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-21 01:45 , Processed in 0.059206 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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