首先,我不完全確定這是正確的stackexchange社區。我也發佈了數學論壇,我認爲它應該沒問題,因爲看着這個問題的人應該對溢出與數學有不同的觀點,但是告訴我,如果這是不好的,我會刪除其中一個帖子:減少用Sympy評估一系列公式的計算負擔
我有一系列式(其中許多是,通常爲100),我從與CAS(Python的Sympy)計算得到的。這些公式將被轉換爲C++,並且應該在微控制器上進行有效評估。執行許多計算來評估每個公式在不同公式之間是多餘的。有沒有辦法通過Sympy中的算法找到'最優'或至少'合理'的方法來對計算進行分組,從而減少要執行的操作的數量,並以系統的方式進行操作?或者我應該讓編譯器這樣做(但有很多公式...)?
例如,如果許多式包括術語
$ \ COS \左(\壓裂{DT} {2} \ SQRT {w_x^2 + w_y^2 + w_z^2} \右)$
,我應該首先計算它並將其存儲在一個變量中,讓我們說$ cn $,並使用$ cn $進行後續評估。當然,我可以通過代碼來完成這項工作,但這並不是真正的可擴展性,絕對'醜陋',並且可能不是最優的。理論上來說,我認爲一個「完美」的C++編譯器應該能夠完成這項任務,但是我想如果這些方程很多並且足夠複雜,它將無法接近最佳狀態。
編輯:我當然知道使用sympy簡單的簡化,例如http://docs.sympy.org/latest/modules/simplify/simplify.html#module-sympy.simplify.cse_main或比化,簡化等。這裏的困難是,我想「十字」幾個方程之間的簡化。
它看起來就像你有錯誤的假設,C++編譯器只是能神奇地優化你的東西,因爲它是一個低層次的語言什麼的。 – VTT
@VTT:我不這麼認爲。我知道C++編譯器可以在某種程度上優化代碼[inling函數,識別代碼/公式的重複代碼,一次執行計算以及多次使用,就像我在這裏等等],這就是爲什麼我說'完美'編譯器應該是能夠做到這一點。但我知道編譯器並不完美,因此我想在Sympy中進行優化。所以我想在Sympy中優化的事實實際上是因爲我不認爲編譯器可以做魔法;) – Zorglub29