2016-11-13 26 views
0

我正在製作一個程序,用於計算給定點處圖的切線方程,理想情況下我希望它適用於任何類型的圖。例如1/x,x^2,ln(x),e^x,sin,tan。我知道如何計算切線和一切,但我不知道如何從用戶那裏獲得輸入。計算圖的正切的用戶輸入

我必須有選擇他們選擇的圖形類型,然後填寫它的係數,例如, 「選擇1:1 /(Ax^B)輸入A和B的值」?或者有什麼方法可以讓程序識別用戶輸入的內容,而不是輸入選項,然後輸入A和B的值,用戶可以鍵入「1/3x^2」,程序會識別出A B是3和2,並且該圖是1/x圖。

這個網站是怎麼樣的,我想這樣做能夠做什麼的例子:https://www.symbolab.com/solver/tangent-line-calculator

感謝所有幫助:)

+0

讓我想起我剛纔在uni上做過的任務...我會建議解析用戶輸入,將它從通常的中綴表示法轉換爲[前綴表示法](https://en.wikipedia.org/wiki/Polish_notation ),然後用它來計算任何'x'的函數值......只要我記得那就是我所做的,無論如何.... – Plirkee

回答

0

解析來自用戶輸入的公式本身存在問題比計算切線更難。如果這是一項任務,看看這個措辭是否允許選擇函數及其參數,正如你所建議的那樣,否則你將花費10%的時間編寫代碼來計算導數,90%用於讀取功能來自標準輸入。

如果這是你自己的想法,並且你想嘗試一下它,一個傳情是,你可能需要爲不同的運營商,常量和未知設計一個完整的類結構。保持一堆數學運算,因爲在1+2*(x+1)+3乘法需要發生在外部加法之前,但在內部加法之後。你必須處理閱讀具有高度自由度的空間非均勻輸入(空格,省略*符號,在 - 之前隱含零)等等。正則表達式可能會有所幫助,但是要爲調試做好準備噩夢和一大堆特殊情況。

如果您將用戶(您自己?)限制爲遵循JavaScript語法的有效表達式(您的示例不適用,由於隱含的乘法和其優先級的偶然規則,因此不適用於1/...) ,你可以絕對信任他們沒有惡意,請參閱this question。您不會在內部將您的表情表示爲公式,但您仍然可以在不同的點對其進行評估x。然後,你可以通過近似衍生物(˚FX +ε) - ˚FX))/ ε一些足夠小ε(但不是太小或者,採用試驗和誤差爲了收斂)。注意功能有跳躍的點,但基本原理也適用。

0

看起來像要評估表達式。在這種情況下,您可以查看Dijkstra的Shunting-Yard算法以將表達式轉換爲前綴符號,然後使用堆棧評估表達式。或者,您可以使用諸如exp4j之類的庫。有多個教程,但請記住,您需要爲二元操作和一元操作添加操作(二元意味着它支持2個操作,而一元操作就像sin(x))。

然後,在評估表達式之後,您可以使用第一原則來解決。我有一個這個系統在我的github repository上沒有exp4j的例子。如果你回到提交歷史中,你也可以看到exp4j的實現。