如何获取和使用 DE 解决方案的稳态部分?
How to obtain and work with steady-state part of DE solution?
我正在尝试获取系统的共振曲线。系统可以描述为
F,m,k:=2,1,4:
lambda:= beta/(2*m):
omega:=sqrt(k/m):
de:=diff(x(t),t)+2*lambda*diff(x(t),t)+omega^2*x(t)=F*cos(gamma1*t):
cond:=x(0)=0, D(x)(0)=0:
sol := dsolve({cond, de});
求解给出项的总和,其中一些 "die out" 随时间变化(因为这些项有 exp(-...*t)
),其中一些形成稳态解(t -> ∞
的解) .该解决方案的格式为 xstst=f(gamma1)*sin(...)
。为了获得 共振曲线 ,我需要绘制 f(gamma1)
(对于所选常数 betas
,例如 2,1,0.5,0.25,
等)。
我已经解决了这个 "by hand" 并找到了 f := F/(sqrt((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2))
。为任何选定的 beta 绘制此图会给出所需的结果,例如,对于 beta:=0.5
,该图为
我想知道我是否可以仅使用 maple 函数获得这些曲线(根本不解决任何问题 "by hand")。
[已编辑]
我不确定我是否完全理解您的问题,但是当我 运行 您的代码时,我得到了一些与指数有关的项,一些与正弦有关,一些与余弦有关。您可以使用
获取正弦项的系数
coeff( collect( rhs( sol ) , sin( gamma1 * t ) ) , sin( gamma1 * t ) , 1 )
期望 Maple 用 sin(theta)
或 cos(theta)
来表示结果是没有意义的,对那些在问题规范中没有出现并且完全被引入的术语使用一些公式由你
以下是在cond1
和cond2
中使用部首(平方根)得到的。
restart;
de := diff(x(t),t,t)+2*lambda*diff(x(t),t)+omega^2*x(t)=F*cos(gamma1*t):
cond := x(0)=0, D(x)(0)=0:
sol := dsolve({cond, de}):
E,T := selectremove(hastype,rhs(sol),specfunc(anything,exp)):
lprint(T);
F*(2*sin(gamma1*t)*gamma1*lambda-cos(gamma1*t)*gamma1^2
+cos(gamma1*t)*omega^2)/(gamma1^4+4*gamma1^2*lambda^2-
2*gamma1^2*omega^2+omega^4)
cond1 := cos(theta) = (-gamma1^2+omega^2)
/((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2)^(1/2):
cond2 := sin(theta) = (-2*lambda*gamma1)
/((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2)^(1/2):
frontend(algsubs, [numer(rhs(cond1))=lhs(cond1)*denom(rhs(cond1)),
numer(T)],
[{`+`,`*`,`=`},{}]):
frontend(algsubs, [numer(rhs(cond2))=lhs(cond2)*denom(rhs(cond2)),
%],
[{`+`,`*`,`=`},{}]):
ans := collect(combine(%, trig),cos)/denom(T):
lprint(ans);
F*cos(gamma1*t+theta)/(gamma1^4+4*gamma1^2*lambda^2-
2*gamma1^2*omega^2+omega^4)^(1/2)
subsans := eval(eval(ans,[lambda=beta/(2*m),omega=sqrt(k/m)]),
[F=2,m=1,k=4]):
lprint(subsans);
2*cos(gamma1*t+theta)
/(beta^2*gamma1^2+gamma1^4-8*gamma1^2+16)^(1/2)
我正在尝试获取系统的共振曲线。系统可以描述为
F,m,k:=2,1,4:
lambda:= beta/(2*m):
omega:=sqrt(k/m):
de:=diff(x(t),t)+2*lambda*diff(x(t),t)+omega^2*x(t)=F*cos(gamma1*t):
cond:=x(0)=0, D(x)(0)=0:
sol := dsolve({cond, de});
求解给出项的总和,其中一些 "die out" 随时间变化(因为这些项有 exp(-...*t)
),其中一些形成稳态解(t -> ∞
的解) .该解决方案的格式为 xstst=f(gamma1)*sin(...)
。为了获得 共振曲线 ,我需要绘制 f(gamma1)
(对于所选常数 betas
,例如 2,1,0.5,0.25,
等)。
我已经解决了这个 "by hand" 并找到了 f := F/(sqrt((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2))
。为任何选定的 beta 绘制此图会给出所需的结果,例如,对于 beta:=0.5
,该图为
我想知道我是否可以仅使用 maple 函数获得这些曲线(根本不解决任何问题 "by hand")。
[已编辑]
我不确定我是否完全理解您的问题,但是当我 运行 您的代码时,我得到了一些与指数有关的项,一些与正弦有关,一些与余弦有关。您可以使用
获取正弦项的系数coeff( collect( rhs( sol ) , sin( gamma1 * t ) ) , sin( gamma1 * t ) , 1 )
期望 Maple 用 sin(theta)
或 cos(theta)
来表示结果是没有意义的,对那些在问题规范中没有出现并且完全被引入的术语使用一些公式由你
以下是在cond1
和cond2
中使用部首(平方根)得到的。
restart;
de := diff(x(t),t,t)+2*lambda*diff(x(t),t)+omega^2*x(t)=F*cos(gamma1*t):
cond := x(0)=0, D(x)(0)=0:
sol := dsolve({cond, de}):
E,T := selectremove(hastype,rhs(sol),specfunc(anything,exp)):
lprint(T);
F*(2*sin(gamma1*t)*gamma1*lambda-cos(gamma1*t)*gamma1^2
+cos(gamma1*t)*omega^2)/(gamma1^4+4*gamma1^2*lambda^2-
2*gamma1^2*omega^2+omega^4)
cond1 := cos(theta) = (-gamma1^2+omega^2)
/((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2)^(1/2):
cond2 := sin(theta) = (-2*lambda*gamma1)
/((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2)^(1/2):
frontend(algsubs, [numer(rhs(cond1))=lhs(cond1)*denom(rhs(cond1)),
numer(T)],
[{`+`,`*`,`=`},{}]):
frontend(algsubs, [numer(rhs(cond2))=lhs(cond2)*denom(rhs(cond2)),
%],
[{`+`,`*`,`=`},{}]):
ans := collect(combine(%, trig),cos)/denom(T):
lprint(ans);
F*cos(gamma1*t+theta)/(gamma1^4+4*gamma1^2*lambda^2-
2*gamma1^2*omega^2+omega^4)^(1/2)
subsans := eval(eval(ans,[lambda=beta/(2*m),omega=sqrt(k/m)]),
[F=2,m=1,k=4]):
lprint(subsans);
2*cos(gamma1*t+theta)
/(beta^2*gamma1^2+gamma1^4-8*gamma1^2+16)^(1/2)