Maxima CAS: как заменить независимую переменную в производных формах

Я хотел бы изменить переменную в дифференциальном уравнении в пределах Maxima, например:

(%i1) diff(y(x),x);
                                   d
(%o1)                              -- (y(x))
                                   dx
(%i2) subst([x=a*z],%);
                                  d
(%o2)                            ---- (y(a z))
                                 da z

Однако я не знаю, как поступить и получить diff(y(a*z),z)/a. В Maxima руководстве упоминается вопрос, но упоминается at команда, где эта тема не рассматривается.


person Joce    schedule 24.07.2017    source источник


Ответы (1)


Есть несколько способов решить эту задачу в максимуме, воспользуемся pdf. сначала две оды решаем в максимумах

(%i1) eq:'diff(y,x) = -y;
                                   dy
(%o1)                              -- = - y
                                   dx
(%i2) ode2(eq, y, x);
                                          - x
(%o2)                            y = %c %e
(%i3) sol: ic1(%, x= 1, y= 8);
                                         1 - x
(%o3)                            y = 8 %e

У maxima нет проблем с такой сложной одой:

(%i4) eqcv : 'diff(y,x) = (x*y) / (3*x^2 - y^4);
                                dy      x y
(%o4)                           -- = ---------
                                dx      2    4
                                     3 x  - y
(%i5) ode2(eqcv, y, x);
                                   4    2
                                  y  - x
(%o5)                           - ------- = %c
                                      6
                                   2 y
(%i6) sol: ic1(%, x= 2, y= 1);
                                    4    2
                                   y  - x    3
(%o6)                            - ------- = -
                                       6     2
                                    2 y

но давайте используем изменение переменной в этом уравнении, используя pdiff

y = z ^ a

(%i1) load(pdiff)$

(%i5) eqcv : diff(y(x),x) = (x*y(x)) / (3*x^2 - y(x)^4);

                                         x y(x)
(%o5)                       y   (x) = ------------
                             (1)         2    4
                                      3 x  - y (x)

(%i6) eqcv, y(x) := z(x)^a;

                                                 a
                           a - 1              x z (x)
(%o6)                a z(x)      z   (x) = --------------
                                  (1)         2       4 a
                                           3 x  - z(x)

тогда мы можем упростить:

(%i7) % / z(x)^(a -1);
                                          x z(x)
(%o7)                     a z   (x) = --------------
                             (1)         2       4 a
                                      3 x  - z(x)
(%i8) % / a;
                                         x z(x)
(%o8)                    z   (x) = ------------------
                          (1)            2       4 a
                                   a (3 x  - z(x)   )

и теперь мы можем применить a = 1/2

(%i50) %, a = 1/2;
                                        2 x z(x)
(%o50)                      z   (x) = ------------
                             (1)         2    2
                                      3 x  - z (x)

начать решать:

(%i51) eq : %;
                                        2 x z(x)
(%o51)                      z   (x) = ------------
                             (1)         2    2
                                      3 x  - z (x)
(%i52) eq;
                                        2 x z(x)
(%o52)                      z   (x) = ------------
                             (1)         2    2
                                      3 x  - z (x)


(%i56) eq : convert_to_diff(eq);
                           d             2 x z(x)
(%o56)                     -- (z(x)) = ------------
                           dx             2    2
                                       3 x  - z (x)

(%i57) depends(z,x);
(%o57)                              [z(x)]

(%i58) eq : subst(z,z(x),eq);
                                dz     2 x z
(%o58)                          -- = ---------
                                dx      2    2
                                     3 x  - z

(%i59) ode2(eq,z,x);

                                   2    2
                                  z  - x
(%o59)                          - ------- = %c
                                     3
                                    z

вы также можете применить это к уравнениям в частных производных пример из списка рассылки :

Я имею дело со следующим уравнением в частных производных для функции T(r,t):

diff( T, t ) - T ^ 2 / r ^ 2 * diff ( ( r ^ 2 * T ^ (сигма) * diff (T, r) + q / T ), r ) = 0

Теперь я хочу ввести новую переменную

эта = г / т ^ (1/3)

и новая функция

Psi (эта) = t ^ (1/3) * T ^ (1 + сигма)

и я хотел бы, чтобы Maxima преобразовала приведенное выше уравнение в частных производных для T(r,t) в дифференциальное уравнение для Psi(eta).

решение:

(%i1) load(pdiff)$
(%i2) de : diff(f(x,y),x,2) + diff(f(x,y),y,2)$
(%i3) de, f(x,y) := g(x/y);
(%o3) g[(2)](x/y)/y^2+(2*x*g[(1)](x/y))/y^3+(x^2*g[(2)](x/y))/y^4
(%i4) y^2 * %;
(%o4) (g[(2)](x/y)/y^2+(2*x*g[(1)](x/y))/y^3+(x^2*g[(2)](x/y))/y^4)*y^2
(%i5) ratsubst(w,x/y,%);
(%o5) (w^2+1)*g[(2)](w)+2*w*g[(1)](w)
(%i6) nde : convert_to_diff(%);
(%o6) 2*w*('diff(g(w),w,1))+(w^2+1)*('diff(g(w),w,2))
(%i7) depends(g,w)$
(%i8) nde : subst(g,g(w),nde);
(%o8) ('diff(g,w,2))*(w^2+1)+2*('diff(g,w,1))*w
(%i9) ode2(nde,g,w);
(%o9) g=%k1*atan(w)+%k2

так что в вашем случае:

(%i11) load(pdiff)$

(%i12) eq : diff(y(x),x);
(%o12)                              y   (x)
                                     (1)
(%i13) eq, y(x) := t(a*x);
(%o13)                            a t   (a x)
                                     (1)
person anquegi    schedule 25.07.2017