回答
好吧,正如您所说的,您要为Javascript输出Math.pow(a,b)
。我在这里建议的方法是用Math.pow(a,b)
表达式替换Maxima中的a^b
表达式并将其输出。
(%i1) e : sqrt(a) + b^(3/2) + 1/c + exp(d^f);
f
d 1 3/2
(%o1) %e + - + b + sqrt(a)
c
(%i2) subst ("^"=lambda([a, b], Math.pow(a, b)), e);
3 1
(%o2) Math . pow(c, - 1) + Math . pow(b, -) + Math . pow(a, -)
2 2
+ Math . pow(%e, Math . pow(d, f))
好的,这是那里的大部分工作。即使某些表达式看起来是别的,也可以用"^"
表示,例如,sqrt(a)
是a^(1/2)
和1/c
是c^(-1)
。如果您需要将这些保存为sqrt(a)
和1/c
,那么我们必须对其进行处理。
我猜这是最好有浮点值,而不是整数比例。另外,我们将用其数值替换%e
。如果你想%e^x
被渲染为Math.exp(x)
,我们可以处理。或者如果你想要Math.pow(Math.E, x)
,那是相对简单的;只是评估subst(%e = Math.E, <your expression>)
。
(%i3) float (%);
(%o3) Math . pow(c, - 1.0) + Math . pow(b, 1.5) + Math . pow(a, 0.5)
+ Math . pow(2.718281828459045, Math . pow(d, f))
千里马认为x . y
意味着非交换乘法,但不来这里发挥作用,这样很好。默认情况下,它会在点的两边显示一个空格,但如果您愿意做少量的Lisp黑客行为,我们可以删除该空间。 (我想这并不重要的Javascript,对不对?Math . pow
相当于Math.pow
,不是吗?)
(%i4) :lisp (setf (get 'mnctimes 'dissym) '(#\.))
(.)
(%i4) %o3;
(%o4) Math.pow(c, - 1.0) + Math.pow(b, 1.5) + Math.pow(a, 0.5)
+ Math.pow(2.718281828459045, Math.pow(d, f))
OK,现在我们可以输出表达式。
(%i5) grind (%o3);
Math.pow(c,-1.0)+Math.pow(b,1.5)+Math.pow(a,0.5)
+Math.pow(2.718281828459045,Math.pow(d,f))$
(%o5) done
是预期产出?
OP询问将%e^x
转换为exp(x)
。这很容易做到,但为了让它坚持下去,我们必须禁用简化,即应用Maxima使用的身份来查找表达式的一般表示。默认情况下,Maxima将exp(x)
简化为%e^x
。我们可以用exp(x)
代替%e^x
,但是我们需要禁用简化来防止它再次返回。
(%i1) simp:false $
(%i2) matchdeclare (xx, all) $
(%i3) defrule (to_exp, %e^xx, Math.exp(xx));
xx
(%o3) to_exp : %e -> Math . exp(xx)
(%i4) apply1 (1 + %e^(x + %e^y), to_exp);
(%o4) 1 + Math . exp(x + Math . exp(y))
可能只希望禁用简化(即simp:false
)当您准备好输出的表达。但我可以想象你会禁用它的情况,例如如果重要的是要按照输入的方式输出表达式,例如x + x
而不是。
我已经使用了不同的机制来做替换,这里定义了一个模式匹配规则,即defrule
。模式匹配非常有用,我鼓励您在Maxima文档中查看defrule
和matchdeclare
。
- 1. 媒体嵌入数据显示为字符串而不是HTML
- 2. 如何让Vim显示包装线而不插入换行符?
- 3. 作为函数输入的全局变量而不是参数
- 4. 如何显示整数而不是指数数字格式
- 5. innerHTML显示函数,而不是函数的返回值
- 6. 为什么显示res.login不是函数?
- 7. react-mobx - 存储显示为函数而不是返回值
- 8. 插入函数作为参数
- 9. 为lambda分配函数分配调用函数,而不是指定的函数
- 10. 让一个ComboBox显示修改后的文本作为值输入,而不是
- 11. 如何将函数作为对象而不是函数传递?
- 12. var函数作为字符串,而不是结果
- 13. C# - Swagger插入值并将字符串数组传递给Linq显示NULL而不是插入的值
- 14. 将C++函数作为参数传递,而不使用函数指针/内联?
- 15. C++函数调用作为参数,而不是工作
- 16. maxima中函数的输出
- 17. 未捕获的插入函数参数不是字符串
- 18. 毫秒访问显示为E字符串作为指数
- 19. 为什么jquery插件函数总是返回对象而不是字符串?
- 20. 通过值(?)传递函数而不是函数指针?
- 21. 调用函数的名称而不是函数的指针
- 22. 的JavaScript的setInterval - 传递函数指针,而不是字符串
- 23. Javascript函数参数输入为0而不是1
- 24. 插入不工作在mysqli_query()函数
- 25. 的Javascript GET请求参数显示为字符串,而不是数字
- 26. PHP POST数据显示为'ON'而不是数字1
- 27. 更新对象,而不是使用指示插入使用assignIdentifier()
- 28. Excel将四舍五入数字保留为整数(例如显示5.00)而不是显示小数
- 29. JTextArea显示插入符号而setEditable为false
- 30. 插入函数不会在mysql上显示5.7
这里你的大目标是什么?偶然,你是否试图为另一个系统(Python,C,其他系统)生成代码?你说exponents是用'^'输出的 - 你的意思是你正在看'grind'或'string'或'display2d:false'的结果吗?或者你的意思是你想在你使用的任何用户界面中看到'pow(a,b)'?如果是这样,您使用的是哪个用户界面?感谢您的任何信息。 –
事实上,我们正试图为另一个系统生成语法,在这种情况下是javascript(它是Math.pow(a,b))。我们目前使用grind函数来输出。我们不需要pow(a,b)以最大值工作,它仅用于输出。感谢Robert – mmzc