Python で Fsolve を使用する
この記事では、fsolve
を使用して Python で解を見つける方法について説明します。 また、それが使用されるシナリオと、特定の種類の結果に到達するためにいつどのように使用できるかをよりよく理解するためのサンプル コードも検討します。
fsolve
とは何か、なぜそれが使われるのかを理解することから始めましょう。
Python の fsolve
関数
方程式はデータ サイエンスのルーツであり、データ サイエンティスト、数学者、化学エンジニア、医師が日常的に扱うさまざまなシナリオを理解するのに役立ちます。 コンピュータが日常生活に溶け込んだ現在、より大きなスケールの方程式を逐次解くことは難しくなっています。
Python の fsolve
を使用すると、これらの専門家やその他の人々が、Python ライブラリが提供するさまざまなモジュールを使用してこれらの方程式を簡単に解くことができます。 fsolve
は基本的に、非線形方程式の根を返す SciPy モジュールです。
fsolve
がさまざまなシナリオで提供するさまざまなパラメーターがあります。 これらは、オンラインで入手できる SciPy ドキュメントから直接簡単に見つけることができます。
fsolve
のパラメータのリスト全体は次のようになります。
コード例:
scipy.optimize.fsolve(
func,
x0,
args=(),
fprime=None,
full_output=0,
col_deriv=0,
xtol=1.49012e-08,
maxfev=0,
band=None,
epsfcn=None,
factor=100,
diag=None,
)
SciPy のドキュメントで、すべてのパラメーターの詳細な説明とそれぞれの内容を確認できます。 ただし、これらのパラメーターの簡単でわかりやすい概要を説明します。
パラメータ | 説明 |
---|---|
func 、callable f(x, *args) |
これは基本的に、1つ以上のベクトル引数を取り、引数と同じ長さの値を返す関数の記述です。 |
x0 , ndarray |
この引数は、関数 f(x)=0 の根の初期推定が何であるかを示します。 |
args , タプル (オプション) |
これらは、関数に必要な追加の引数です。 |
fprime 、callable f(x, *args) (オプション) |
これは、関数のヤコビアンの推定値を行全体の導関数で計算するための関数です。 |
full_output 、ブール値 (オプション) |
これは、条件が満たされるか True の場合にオプションの出力値を返します。 |
col_deriv , bool (オプション) |
この引数を介して、ヤコビ関数が列の導関数を計算するかどうかを指定します。 SciPy のドキュメントによると、転置操作がないため、これは高速です。 |
xtol , float (オプション) |
この引数により、関数は、2つの連続する反復値の間の相対誤差の最大の xtol に基づいて計算を終了できます。 |
maxfev , int (オプション) |
これは、関数の呼び出しの最大数を定義します。 |
band , タプル (オプション) |
これは、fprime が None に設定されている場合です。 引数が、行列内のサブ対角とスーパー対角の数を含む 2つのシーケンスに設定されている場合、Jacobi 行列はバンド化されていると見なされます。 |
epsfcn , float (オプション) |
fprime が None に設定されている場合、この引数には、ヤコビアンの前方差分の近似に適したステップ長が含まれます。 epsfcn が機械精度よりも小さい場合、関数の相対誤差は機械精度のオーダーであると想定されます。 |
factor , float (オプション) |
この引数は初期ステップ バウンドを決定し、(0.1, 100) の間でなければなりません。 |
diag , シーケンス (オプション) |
これらの N 正のエントリは、変数のスケール ファクターとして機能します。 |
fsolve
関数を使用して Python で解を見つける
お気づきかもしれませんが、fsolve
はさまざまなシナリオのさまざまな非線形方程式に使用できます。 fsolve
がどのように使用されるかをよりよく把握するために、いくつかの簡単なコード サンプルを調べてみましょう。
-0.2 を始点とする方程式 x+2cos(x)
の根を求めます
コード例:
from math import cos
import scipy.optimize
def func(x):
y = x + 2 * cos(x)
return y
y = scipy.optimize.fsolve(func, 0.2)
print(y)
このコードでは、Python の膨大な math
ライブラリから cos
関数をインポートし、scipy
(fsolve
のソース) から optimize
をインポートします。 次に、方程式を定義し、それを func
メソッドの y
に格納します。
方程式が正しく初期化された後は、単に fsolve
を使用して、方程式を含むメソッド (func)
を呼び出します。 2 番目の引数では、方程式の開始点を定義します。
結果は変数 y
に格納され、出力用に出力されます。
コードの出力:
[-1.02986653]
始点 0 と 2 で方程式を解く
コード例:
from math import cos
import scipy.optimize
def func(x):
y = [x[1] * x[0] - x[1] - 6, x[0] * cos(x[1]) - 3]
return y
x0 = scipy.optimize.fsolve(func, [0, 2])
print(x0)
このコードでは、Python の math
および scipy
ライブラリから cos
および scipy.optimize
をインポートすることにより、コード 1 と同じ手順に従います。 次のステップに進み、func
というメソッドで方程式を定義します。
次に、このメソッドを fsolve
関数の引数として呼び出し、0 と 2 の 2つの開始点を指定します。これらは、x0
という変数に保存および出力されます。
コードの出力:
[6.49943036 1.09102209]
始点 0.3 で式 4sin(y)-4
の根を見つけます
コード例:
from math import sin
import scipy.optimize
def func(y):
x = 4 * sin(y) - 4
return x
x = scipy.optimize.fsolve(func, 0.3)
print(x)
このコード例では、cos
の代わりに math
ライブラリから sin
をインポートします。 コードの構造は上記の例と同じままで、fsolve
に scipy.optimize
をインポートし、メソッド func
内で方程式を定義します。
このメソッドを、開始点が 0.3 の fsolve
の引数と呼びます。 結果の値は変数 x
に格納され、出力用に出力されます。
コードの出力:
[1.57079633]
この記事では、fsolve
が非線形方程式の根を見つけるために使用されること、fsolve
が取ることができるさまざまな種類のパラメーターとそれぞれが何を伴うかについて学びました。 さらに、fsolve
の実用的な例をいくつか見て、コードでどのように使用できるかを調べました。
fsolve
を使用して解を導出する方法の理論と実際のコード サンプルを確認したので、次は独自のコードを作成して、fsolve
の動作をさらに調査します。
この記事が、fsolve
を使用して Python の問題を解決する方法を理解するのに役立つことを願っています。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn