wxmaxima 变换函数

wxmaxima transforming functions

我在练习的第 4 部分遇到问题,我无法使其在最大值下工作:

首先将s_y(t)转化为t=...应该是t=sqrt(2*s_y/a_y)

然后将其插入 s_x(t),以获得新的 s_x2(s_y) 函数,其中您不插入时间而是插入垂直长度 ( s_y), 但仍然得到水平长度。

结果应该是s_x2(s_y)=a_x*s_y/a_y

这在 maxima 中如何运作?

我尝试了什么: https://filebin.net/9hhdfkklqrn5fznt/Rakete.wxmx?t=tdbuwxj1

Aufgabe "Rakete" Dynamik 1
 -->    showtime:false; kill(all); linel: 65; load(ezunits);
(showtime)  false

(%o0)   done

(linel) 65

(%o2)   "C:/maxima-5.43.2/share/maxima/5.43.2/share/ezunits/ezunits.mac"
  1 Stellen Sie die Bewegungsgleichung für die Bewegung in x- un din y-Richtung auf.
a's über den Winkel bestimmen bestimmen
 -->    a: 15`m/s^2; β: 70*%pi/180; a_x: a*cos(β); a_y: a*sin(β);
(a) 15 ` m/s^2
(β) (7*%pi)/18
(a_x)   15*cos((7*%pi)/18) ` m/s^2
(a_y)   15*sin((7*%pi)/18) ` m/s^2
damit nun die funktionen für v(t) aufstellen
 -->    v_x(t):=a_x*t+0; v_y(t):=a_y*t+0;
(%o7)   v_x(t):=a_x*t+0

(%o8)   v_y(t):=a_y*t+0
damit nun die funktionen für s(t) aufstellen
 -->    s_x(t):=a_x/2*t^2+0+0; s_y(t):=a_y/2*t^2+0+0;
(%o56)  s_x(t):=a_x/2*t^2+0+0

(%o57)  s_y(t):=a_y/2*t^2+0+0
  2 Nach welcher Zeit t hat die Rakete eine Höhe von s_y=10km erreicht?
 -->    t10km: dimensionally(solve(s_y(t)=10000`m, t))$ t10km: rhs(t10km[2]); float(%);
(t10km) (2*10^(3/2))/(sqrt(3)*sqrt(sin((7*%pi)/18))) ` s

(%o48)  37.66833811883066 ` s
  3 Welche Strecke s_x parallel zur Erdoberfläche hat die Rakete nach dieser Zeit zurückgelegt?
 -->    Strecke_parallel: s_x(t10km); float(%);
(Strecke_parallel)  (10000*cos((7*%pi)/18))/sin((7*%pi)/18) ` m

(%o18)  3639.702342662025 ` m
einfacher
 -->    s_x10km: dimensionally(solve(tan(β)=(10000`m)/x,x))$ s_x10km: assoc(x, s_x10km); float(%);
(s_x10km)   10000/tan((7*%pi)/18) ` m

(%o51)  3639.702342662024 ` m
  4 Verallgemeinerung s_x(s_y)= ?
 -->    T: dimensionally(solve(s_y(x)=s_yx,x))$ T: rhs(T[2]); float(%);
(T) (sqrt(2)*sqrt(s_yx))/(sqrt(15)*sqrt(sin((7*%pi)/18))) ` s/sqrt(m)
(%o88)  0.3766833811883064*sqrt(s_yx) ` s/sqrt(m)
 -->    s_x2(s_yx):= s_x(T);
(%o92)  s_x2(s_yx):=s_x(T)
 -->    s_x2(10000`m); float(%);
(%o93)  (cos((7*%pi)/18)*s_yx)/sin((7*%pi)/18)
(%o94)  0.3639702342662025*s_yx
 -->    

我猜想您在这里需要做什么,但我建议您将函数 s_x2 的定义更改为 s_x2(s_yx):= ''(s_x(T)) 而不是 s_x2(s_yx):= s_x(T)。 quote-quote '' 的作用是将 s_x(T) 的当前值粘贴到函数体中。否则,函数体不会被求值,你最终会得到一个未求值的符号 s_yx

当我尝试这样做时,这就是我得到的结果。其他的都是一样的,我只展示最后一部分。

(%i28) s_x2(s_yx):= ''(s_x(T));
                                    7 %pi
                                cos(-----) s_yx
                                     18
(%o28)            s_x2(s_yx) := ---------------
                                      7 %pi
                                  sin(-----)
                                       18
(%i29) s_x2(10000`m);
                                7 %pi
                      10000 cos(-----)
                                 18
(%o29)                ---------------- ` m
                             7 %pi
                         sin(-----)
                              18
(%i30) float(%);
(%o30)                3639.702342662025 ` m

Maxima 有一种所谓的一次性评估政策,在这种情况下,这导致 s_yx 没有得到预期的评估。在函数定义中使用 quote-quote 避免了这种情况下的问题。

另一种方法是说define(s_x2(s_yx), s_x(T))。这更通用,因为仅在解析输入时应用引号。