私は最近、SciPy のクワッド積分を使用して 2 変数関数を 1 つの変数に関して積分する方法を学びました。たとえば、関数 f(x,y) があるとします。f(y)を得るために、xについて積分しました。次に、f(y) と y 値の NumPy 配列をプロットしました。ここでは問題ありません。ただし、元の被積分関数をヤコビ行列 (ヤコビ行列の各エントリの各関数も x と y の関数) で乗算したいと考えています。
今は完全に概念化できない問題は、偏微分を元のコードに組み込む方法です。これにより、最初の 2 変数関数が非常にきれいに統合されました。SymPy がシンボリック積分の優れたオプションであることは承知していますが、別の関数で乗算された結果と互換性のある方法でヤコビアンを評価する方法がわかりませんでした (これには導関数が必要であるという事実のため)。 、その製品を統合します。SymPy 関数を対応する NumPy 関数に変換する代わりに、 SymPy 関数を SciPy のクワッド統合で使用できる関数に変換するlambdifyの形式はありますか? それとも彼らの別の一般的な慣行ですか?
from sympy import symbols, diff
import numpy as np
from scipy.integrate import quad
from scipy import integrate
import matplotlib.pyplot as plt
## define f(x,y) function *** BUT INTEGRATING dx ***
## where the bounds are as a function of y ***
## SciPy and NumPy are used in these steps
def example(y):
return lambda x: (x * y)
def example_integral(y):
return quad(example(y), 0, y, args=())
## F(y) = (y^3) / 2
print('F(y) --> F(4) = (4^3)/2 = ',example_integral(4)[0])
print('Integration works')
## Plotting f(y) vs. y
## This graph should follow cubic power
example_range = np.linspace(-11,10,20)
example_array = []
for i in example_range:
example_array.append(example_integral(i)[0])
plt.figure(figsize=(6,6))
plt.plot(example_range,example_array)
plt.title("Example Plot of original integrated function\nF(y) vs y")
plt.show()
## Here I will differentiate two separate functions for the Jacobian
## SymPy is used in these following steps
x, y = symbols('x y', real=True)
f = (2*x*(y**2)) + y**3
g = x/y
df_dx = diff(f, x)
df_dy = diff(f, y)
dg_dx = diff(g, x)
dg_dy = diff(g, y)
## I compute the Jacobian here
jacobian = (df_dy * dg_dx) - (df_dx * dg_dy)
print("The resulting Jacobian is: ", jacobian)
提案に従って、私の苦境が何であるかを最もよく説明するサンプルコードを含めました。これが「最小限の例」のガイドラインに従わない場合は、コメントしてください。これを修正します。ご覧のとおり、最初のブロックでは、SciPy と NumPy を使用して、元の関数を統合してプロットしました。2 番目のブロックでは、SymPy を使用して 2 つの別個の関数を微分し、ヤコビアンを計算しました。最終的に、結果のヤコビ行列 (2 番目のブロック) を元の関数 (最初のブロック) で乗算したいと考えています。この新しい機能 (2 つの製品) を取得したら、同じ統合手順を簡単に実行したいと思います。ここに添付 --> 1は、このアイデアを実行しようとしたときに表示されるエラー メッセージのスクリーンショットです (これは予期されていたことです)。これをよりよく説明するために何かできることがあれば教えてください。ありがとうございました!