如何获得和使用DE解决方案的稳态部分?

时间:2019-01-03 21:38:25

标签: maple

我正在尝试获取系统的 谐振曲线 。系统可以描述为

function foo(bar: Object | { createdDate: Date }) {
  if ("createdDate" in bar) {
    alert(bar.createdDate); 
  }
}

foo({aa: ""})

求解给出项的总和,其中一些随着时间“消亡”(因为这些项具有F,m,k:=2,1,4: lambda:= beta/(2*m): omega:=sqrt(k/m): de:=diff(x(t),t$2)+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}); ),而另一些则形成稳态解(exp(-...*t)的解)。此解决方案的格式为t -> ∞。为了获得 谐振曲线 ,我需要绘制xstst=f(gamma1)*sin(...)(对于选定的常数f(gamma1),例如betas等) 。

我已经“手工”解决了这个问题,找到了2,1,0.5,0.25,。对任何选定的beta进行绘制都会得到所需的结果,例如,对于f := F/(sqrt((-gamma1^2+omega^2)^2+4*lambda^2*gamma1^2))来说,绘制的是enter image description here

我想知道我是否只能使用maple函数获得这些曲线(根本不需要“手动”解决任何问题)。

[编辑] enter image description here

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您的问题,但是当我运行您的代码时,我会得到一些带指数的术语,一些正弦和余弦。您可以使用

来获取正弦项的系数
coeff( collect( rhs( sol ) , sin( gamma1 * t ) ) , sin( gamma1 * t ) , 1 )

答案 1 :(得分:1)

期望Maple用sin(theta)cos(theta)来表示结果,并使用一些在问题规范中没有出现并由您完全引入的术语来表示,这是没有意义的

以下内容是通过在cond1cond2的每一个中使用部首(平方根)来实现的。

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)