2016-11-13 11 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グラフです。

このウェブサイトは、私が行うことができるやりたいものの例のようなものです:任意のヘルプ:)ユーザーの入力から式を解析

+0

私はかなり前にuniで割り当てたことを思い出させます...私はユーザの入力を解析し、通常の挿入表記法から[接頭辞表記]に変換することを提案します(https://en.wikipedia.org/wiki/Polish_notation )そして、それを使って任意の 'x'の関数値を計算してください...私がそれを覚えている限り、何とか.... – Plirkee

答えて

0

ためhttps://www.symbolab.com/solver/tangent-line-calculator

おかげで多くの問題そのものでありますは、接線を計算するより難しいです。これが割り当てであれば、あなたが示唆しているように、関数がその関数とそのパラメータの選択を可能にするかどうかを確認してください。そうでなければ、導関数を計算するコードの10%と標準入力からの関数です。

あなた自身のアイデアで、あなたがそれを試してみたいと思うなら、おそらく、異なる演算子、定数、および未知数のためのクラス構造全体を設計する必要があるということです。 1+2*(x+1)+3では、外付けの前に乗算を行う必要があるので、数学的演算を積み重ねてください。自由度の高い非一様な入力(空白、*記号の省略、aの前の暗黙のゼロなど)の読み込みに対処する必要があります。正規表現は助けになるかもしれませんが、デバッグの準備はできますとにかく、悪夢と大量の特別なケース。

JavaScriptの構文に従って有効な式にユーザーを限定しても問題ありません(暗黙の乗算と1/...に対する優先順位の不当なルールのために例はありません) であり、悪意のある意図がないと絶対にを信じることができます。this questionを参照してください。式は内部的に表現されていませんが、異なる点で評価することはできますxそして、あなたはで微分を近似することができます(X +ε F() - F X))ε/をいくつか十分に小さいεで(しかし、小さすぎないのいずれか、試行錯誤を使用してコンバージェンスのために)。関数にジャンプがある点を見てください。しかし、基本的な原則ではこれも機能します。

0

あなたは式を評価したいようです。その場合、DijkstraのShunting-Yardアルゴリズムを調べて、式を接頭辞表記に変換し、スタックを使用して式を評価することができます。あるいは、exp4jなどのライブラリを使用することもできます。複数のチュートリアルがありますが、バイナリ操作と単項演算の両方に演算を追加する必要があることに注意してください(バイナリは2つの演算をサポートしますが、単項はsin(x)と似ています)。

次に、式を評価した後、第1の原則を使用して解くことができます。私は私のgithubにexp4jなしで働いているこのシステムの例を持っていますrepository。コミット履歴に戻ると、exp4jの実装も見ることができます。

関連する問題