千里马CAS - 替代

时间:2016-12-18 09:56:52

标签: maxima

我试图通过import pandas as pd import numpy as np df = pd.DataFrame({'prod_tags_0': [np.nan], 'prod_tags_1': [np.nan], 'prod_tags_2': [np.nan]}) print(df) >> prod_tags_0 prod_tags_1 prod_tags_2 0 NaN NaN NaN df.fillna({'prod_tags_' + str(i): 0 for i in range(2)}, inplace=True) print(df) >> prod_tags_0 prod_tags_1 prod_tags_2 0 0.0 0.0 NaN 中的替换来简化微分方程。但是,替换似乎没有起作用。

这是我的代码:

maxima

最后一次替换不起作用。我在这里做错了什么?

为清楚起见,我在这里添加一个截图: enter image description here

2 个答案:

答案 0 :(得分:2)

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

ratsubst不是精确的子表达时,

a(见)可以处理某些情况,但在这种情况下,它似乎无法正常工作。

但我认为你可以通过从另一个中减去一个方程式得到你想要的结果。请注意,(a=b) - (c=d)会产生a - c = b - d。另请注意,我已在另一个步骤(在%i7中)应用diff运算符。此外,我将%o乘以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

答案 1 :(得分:-1)

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

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