有没有办法将SymPy符号差异化与SciPy的四积分包联系起来?



我最近刚刚学会了如何使用 SciPy 的四变量积分来集成一个双变量函数,只针对一个变量。例如,假设我们有一个函数f(x,y(。我相对于x进行了积分,以获得f(y(。然后,我绘制了 f(y( 与 y 值的 NumPy 数组。这里没问题。但是,我现在想将我的原始积分乘以雅可比矩阵(其中雅可比矩阵的相应条目中的每个函数也是 x 和 y 的函数(。

我现在无法完全概念化的问题是如何将部分微分合并到我的原始代码中,---代码非常干净地集成了我最初的双变量函数。我知道 SymPy 是符号积分的一个很好的选择,但我无法弄清楚如何评估雅可比矩阵(因为这需要导数(的方式与它的结果相容,乘以一个单独的函数,然后积分该产品。有没有一种形式的lambdify,它不是将我的SymPy函数转换为它们的NumPy对应函数,而是将SymPy函数转换为可用于SciPy四元集成的函数?还是他们的另一种常见做法?

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 functionnF(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 来集成和绘制我的原始函数。在第二个块中,我使用 SymPy 来区分两个独立的函数并计算雅可比函数。最终,我想将我得到的雅可比函数(在第二个块中(乘以我的原始函数(在第一个块中(。在我有了这个新功能(两者的产物(之后,我想简单地执行相同的集成过程。附在这里 --> 1 是我尝试运行这个想法时收到的错误消息的屏幕截图(这是意料之中的(。如果我能做些什么来更好地解释这一点,请告诉我。谢谢!

我只能大胆猜测SymPy的ufuncify会帮助你。它将 SymPy 表达式转换为矢量化的 NumPy ufuncs,可以以矢量化的方式应用。因此,它也可以被 SciPy 的正交例程使用。

相关内容

  • 没有找到相关文章

最新更新