回答
好吧,正如您所說的,您要爲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. 如何讓Maxima顯示更多數字
- 2. 媒體嵌入數據顯示爲字符串而不是HTML
- 3. Matlab maxima函數
- 4. 如何讓Vim顯示包裝線而不插入換行符?
- 5. 在函數體內插入函數參數作爲字符串
- 6. 作爲函數輸入的全局變量而不是參數
- 7. 顯示計數爲-1,而不是0
- 8. 如何顯示整數而不是指數數字格式
- 9. innerHTML顯示函數,而不是函數的返回值
- 10. 顯示選定的數據作爲數組值而不是字符串
- 11. 字符指針作爲函數參數
- 12. 爲什麼顯示res.login不是函數?
- 13. react-mobx - 存儲顯示爲函數而不是返回值
- 14. 爲什麼`go tool pprof`顯示地址而不是函數名?
- 15. 插入函數作爲參數
- 16. 爲lambda分配函數分配調用函數,而不是指定的函數
- 17. 讓一個ComboBox顯示修改後的文本作爲值輸入,而不是
- 18. 插入使用PHP顯示爲下載而不是執行
- 19. HTML5號輸入 - 顯示爲百分比,而不是小數
- 20. 如何將函數作爲對象而不是函數傳遞?
- 21. var函數作爲字符串,而不是結果
- 22. 顯示我需要Context而不是Activity作爲參數中?
- 23. maxima中函數的輸出
- 24. 讓GDB顯示彙編指令而不是C
- 25. C# - Swagger插入值並將字符串數組傳遞給Linq顯示NULL而不是插入的值
- 26. C++函數調用作爲參數,而不是工作
- 27. 將C++函數作爲參數傳遞,而不使用函數指針/內聯?
- 28. 使用指向類方法的指針作爲函數的參數,但作爲函數指針,而不是指向方法的指針
- 29. 顯示工具提示,而不是寫多個jQuery函數
- 30. 未捕獲的插入函數參數不是字符串
這裏你的大目標是什麼?偶然,你是否試圖爲另一個系統(Python,C,其他系統)生成代碼?你說exponents是用'^'輸出的 - 你的意思是你正在看'grind'或'string'或'display2d:false'的結果嗎?或者你的意思是你想在你使用的任何用戶界面中看到'pow(a,b)'?如果是這樣,您使用的是哪個用戶界面?感謝您的任何信息。 –
事實上,我們正試圖爲另一個系統生成語法,在這種情況下是javascript(它是Math.pow(a,b))。我們目前使用grind函數來輸出。我們不需要pow(a,b)以最大值工作,它僅用於輸出。感謝Robert – mmzc