【问题标题】:Maxima CAS - substitutionMaxima CAS - 替换
【发布时间】:2016-12-20 14:58:14
【问题描述】:

我正在尝试通过替换 maxima 来简化微分方程。但是,替换似乎不起作用。

这是我的代码:

depends (\rho,[t, r, \theta, z]); depends (V, [t, r, \theta, z]);
f_contin : diff (\rho, t) + diff (\rho*r*V[r], r)*(1/r) = 0;
base : diff (V[b]*r*\rho, r) = 0;
V_sub : V[r] = V[b] + \epsilon*V[r];
subst (V_sub, f_contin);
subst (base, %o6);

最后一次替换无效。我在这里做错了什么?

为清楚起见,我在此处添加了屏幕截图:

【问题讨论】:

    标签: maxima


    【解决方案1】:

    问题在于subst(a=b, c)(或等效的subst(b, a, c))只能在ac 的精确子表达式时进行替换。

    ratsubst(请参阅)可以处理 a 不是精确子表达式但在这种情况下似乎不起作用的某些情况。

    但我认为你可以通过从另一个方程中减去一个方程来得到你想要的结果。请注意(a=b) - (c=d) 产生a - c = b - d。另请注意,我已在另一个步骤(在 %i7 中)应用diff 运算符。此外,我将 %o7 乘以 r 得到类似 base 的内容。

    (%i1) depends (\rho,[t, r, \theta, z]); depends (V, [t, r, \theta, z]);
    (%o1)                        [rho(t, r, theta, z)]
    (%o2)                         [V(t, r, theta, z)]
    (%i3) f_contin : diff (\rho, t) + diff (\rho*r*V[r], r)*(1/r) = 0;
                                drho      d
                           r V  ---- + r (-- (V )) rho + V  rho
                    drho      r  dr       dr   r          r
    (%o3)           ---- + ------------------------------------ = 0
                     dt                     r
    (%i4) base : diff (V[b]*r*\rho, r) = 0;
                            drho    d
    (%o4)              V  r ---- + (-- (V )) r rho + V  rho = 0
                        b    dr     dr   b            b
    (%i5) V_sub : V[r] = V[b] + \epsilon*V[r];
    (%o5)                        V  = epsilon V  + V
                                  r            r    b
    (%i6) subst (V_sub, f_contin);
          drho                        drho      d
    (%o6) ---- + (r (epsilon V  + V ) ---- + r (-- (epsilon V  + V )) rho
           dt                 r    b   dr       dr           r    b
                                                     + (epsilon V  + V ) rho)/r = 0
                                                                 r    b
    (%i7) %o6, nouns;
          drho                        drho               d          d
    (%o7) ---- + (r (epsilon V  + V ) ---- + r (epsilon (-- (V )) + -- (V )) rho
           dt                 r    b   dr                dr   r     dr   b
                                                     + (epsilon V  + V ) rho)/r = 0
                                                                 r    b
    (%i8) expand (r*%o7 - base);
            drho                drho              d
    (%o8) r ---- + epsilon r V  ---- + epsilon r (-- (V )) rho + epsilon V  rho = 0
             dt               r  dr               dr   r                  r
    

    【讨论】:

      【解决方案2】:

      函数 subst (a,b,c) 用 a 代替 c 中的 b。它使用 3 个参数,您的第一个 subst 有效,因为它被解释为 subst (V[b] + \epsilon*V[r],V[r], f_contin);

      您的第二个 subst 可能被解释为subst (0,diff (V[b]*r*\rho, r),%),因此没有任何内容被替换。你想用什么代替什么?

      【讨论】:

      • 我想将 base 中给出的表达式替换为 %o6。也就是在倒数第二个表达式中设置d/dr(rhoVbr)为零。
      • 实际上subst 可以有两个参数,当第一个参数是方程时,例如subst(foo=bar, myexpr)。原来问题在于 OP 给出的表达式不包含 base 的左侧作为子表达式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多