asd 发表于 2005-11-16 20:34

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; y0=2.704312e+025;
t0=0;tf=1e-7;dt=2e-9;t1=2e-8;t=%产生信号
t=t0:dt:tf; st=length(t);
n1=floor((t1-t0)/dt);%t1求对应的应本序号
x2=%产生阶跃信号
%绘图 stairs(t,x2)
k3=500.*x2;%k3为峰值500的阶跃信号
tspan=;
%f=-y/tao+s1*k2*(exp(-h1)-1)-s1*k1*(exp(h1)-1)+s2*k4*(exp(-h2)-1)-s2*k3*(exp(h2)-1)
=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 编辑 ]

asd 发表于 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=;
=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 编辑 ]

adminftp 发表于 2005-12-12 20:26

回复:(asd)matlab 请教!!

看你的程序式求解一个微分方程的,所以RH返回的时候dydt应该是一个值<BR><BR>但是在RH中,由于k3是个向量,所以返回的dydt是个向量<BR><BR>明显错误,请先搞清楚方程到底是什么样的

asd 发表于 2005-12-12 20:56

是应该是一组向量,那RH怎样变化?

simon21 发表于 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>把方程贴出来看看

asd 发表于 2005-12-13 08:30

谢谢大家的帮助,请再说明白些。

[ 本帖最后由 mjhzhjg 于 2007-9-30 14:26 编辑 ]

suffer 发表于 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 编辑 ]

asd 发表于 2005-12-16 15:50

对不起!下次一定注意。
页: [1]
查看完整版本: matlab ode45 请教!