wxmaxima转换函数

问题描述 投票:0回答:1

我在练习的第四部分中遇到问题,无法使它发挥最大作用:

首先将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

最大程度如何运作?

我尝试过: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
 -->    
maxima wxmaxima
1个回答
0
投票

我正在猜测您需要在这里做什么,但是让我建议您将函数s_x2的定义更改为s_x2(s_yx):= ''(s_x(T)),而不是s_x2(s_yx):= s_x(T)。引号''的作用是将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))。这是更通用的,因为quote-quote仅在解析输入时才应用。

© www.soinside.com 2019 - 2024. All rights reserved.