使用 EzUnits 绘制图形

问题描述

我正在尝试绘制函数 Fh_1 的图形,但看起来 ezunits 引起了问题。当我输入 x 值时,我可以从中得到结果。但是绘图不起作用,即使是 Dimensionly() 也不行。我怎样才能让它工作?

(%i2)   kill(all); load(ezunits); g2r(x):= x*%pi/180;
(%o0)   done

(%o1)   "C:/maxima-5.44.0/share/maxima/5.44.0/share/ezunits/ezunits.mac"

(%o2)   g2r(x):=(x*%pi)/180
  1 variables
(%i3)   rho: atan(rat(0.35));
rat: replaced 0.35 by 7/20 = 0.35

(rho)   atan(7/20)
(%i4)   L_FPzuLH: 110`mm;
(L_FPzuLH)  110 ` mm
(%i5)   L_Backe: 33`mm;
(L_Backe)   33 ` mm
(%i6)   L_HebelLinks: 81`mm;
(L_HebelLinks)  81 ` mm
  2 function
(%i7)   Fh_1(D_Platte):= L_HebelLinks*sin(g2r(90)-(g2r(90)-(acos((L_FPzuLH-D_Platte-L_Backe)/L_HebelLinks)))-rho);
(%o7)   Fh_1(D_Platte):=L_HebelLinks*
sin(g2r(90)-(g2r(90)-acos((L_FPzuLH-D_Platte-L_Backe)/L_HebelLinks))-rho)
  3 this works
(%i9)   Fh_1(31`mm); float(%);
(%o8)   81*sin(acos(46/81)-atan(7/20)) ` mm

(%o9)   47.73170350716926 ` mm
  4 but not this
(%i10)  dimensionally(plot2d(Fh_1(x),[x,5`mm,55`mm]));
plotting: range must be of the form [variable,min,max]; found: 

 [x,5*g1498,55*g1498]

 -- an error. To debug this try: debugmode(true);

为千里马粘贴:

/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
/* [ Created with wxMaxima version 21.02.0 ] */
/* [wxMaxima: input   start ] */
kill(all); load(ezunits); g2r(x):= x*%pi/180;
/* [wxMaxima: input   end   ] */


/* [wxMaxima: section start ]
variables
   [wxMaxima: section end   ] */


/* [wxMaxima: input   start ] */
rho: atan(rat(0.35));
/* [wxMaxima: input   end   ] */


/* [wxMaxima: input   start ] */
L_FPzuLH: 110`mm;
/* [wxMaxima: input   end   ] */


/* [wxMaxima: input   start ] */
L_Backe: 33`mm;
/* [wxMaxima: input   end   ] */


/* [wxMaxima: input   start ] */
L_HebelLinks: 81`mm;
/* [wxMaxima: input   end   ] */


/* [wxMaxima: section start ]
function
   [wxMaxima: section end   ] */


/* [wxMaxima: input   start ] */
Fh_1(D_Platte):= L_HebelLinks*sin(g2r(90)-(g2r(90)-(acos((L_FPzuLH-D_Platte-L_Backe)/L_HebelLinks)))-rho);
/* [wxMaxima: input   end   ] */


/* [wxMaxima: section start ]
this works
   [wxMaxima: section end   ] */


/* [wxMaxima: input   start ] */
Fh_1(31`mm); float(%);
/* [wxMaxima: input   end   ] */


/* [wxMaxima: section start ]
but not this
   [wxMaxima: section end   ] */


/* [wxMaxima: input   start ] */
dimensionally(plot2d(Fh_1(x),55`mm]));
/* [wxMaxima: input   end   ] */



/* Old versions of Maxima abort on loading files that end in a comment. */
"Created with wxMaxima 21.02.0"$

解决方法

正如我在上面的评论中所说,调用 qty 来获取维度表达式的数量。请注意,我将 Fh_1 的参数写为 x ` mm,其中 x 是我们正在绘制的无量纲变量。

plot2d (qty (Fh_1 (x ` mm)),[x,5,55]);

当我尝试使用 Maxima 5.44 时,这很有效。你可能有兴趣看看

(%i11) qty(Fh_1(x ` mm));
                                    77 - x         7
(%o11)                  81 sin(acos(------) - atan(--))
                                      81           20

当我尝试使用当前(大约 5.45)版本的 plot2d 时,我遇到了堆栈溢出(与尝试确定某些表达式是否为无量纲有关),我现在正在调查。

这是该错误的解决方法,当我尝试使用当前接近 5.45 的版本时,它成功了。我生成一个点列表,然后绘制这些点。

(%i11) qty(Fh_1(x ` mm));
                                    77 - x         7
(%o11)                  81 sin(acos(------) - atan(--))
                                      81           20
(%i12) ev(makelist([y,ev(%,x = y)],y,55),numer);
(%o12) [[5,11.23941870984706],[6,13.34349300482042],[7,15.34276468157134],[8,17.25033934972067],[9,19.07666307706286],[10,20.83022404590423],[11,22.51803233322337],[12,24.14595804280109],[13,25.71897581938176],[14,27.24134562928132],[15,28.71674902665171],[16,30.14839362529976],[17,31.53909440876992],[18,32.89133786911122],[19,34.20733321424233],[20,35.48905369852528],[21,36.73827031267255],[22,37.95657949382723],[23,39.14542610575446],[24,40.30612264125835],[25,41.43986538015634],[26,42.54774807342751],[27,43.63077360174984],[28,44.68986396358886],[29,45.72586887656475],[30,46.73957322048246],[31,47.73170350716926],[32,48.70293352820919],[33,49.65388930464281],[34,50.58515344111066],[35,51.49726896955291],[36,52.39074275352331],[37,53.26604851273431],[38,54.12362951808341],[39,54.96390099970309],[40,55.7872523042014],[41,56.5940488319625],[42,57.38463378095388],[43,58.15932971977946],[44,58.91844000959603],[45,59.6622500918724],[46,60.39102865673311],[47,61.1050287047217],[48,61.80448851319165],[49,62.48963251713631],[50,63.16067211306913],[51,63.81780639352923],[52,64.46122281889194],[53,65.09109783238475],[54,65.70759742353295],[55,66.31087764466791]]
(%i13) plot2d([discrete,%]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...