gpt4 book ai didi

python - 通过 SymPy 求多元函数的微分并在一点求值

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:16 25 4
gpt4 key购买 nike

我想使用 SymPy 求多变量函数的导数,然后 a) 打印符号结果,然后 b) 打印某个点的导数结果。我正在使用以下代码

 import math as m
import numpy
import scipy

#define constants
lambdasq = 0.09
Ca = 3
qOsq = 2

def f1(a,b,NN,ktsq,x):
return NN*x**(-a)*ktsq**b*m.exp(m.sqrt(16*Ca/9*m.log(1/x)*m.log((m.log(ktsq/lambdasq))/m.log(qOsq/lambdasq))))

from sympy import *
x = symbols('x')

def f2(NN,a,b,x,ktsq):
return -x*diff(m.log(f1),x)

它运行,但我找不到打印符号结果的方法,当我尝试在某个点进行评估时,例如添加 print(f2(0.3,0.1,-0.2,0.1 ,3)) 我收到错误

  TypeError: must be real number, not function

当我用其符号表示替换 f1 时,我得到了错误

  ValueError: 
Can't calculate 1st derivative wrt 0.100000000000000.

所以我可以将我的问题总结如下

a) 当我调用 diff(m.log(f1),x) 时,如何打印出符号导数及其值(即无需替换 f1 按其实际表示)

b)如果我必须在微分中使用符号表示(即使用 diff(m.log(NN*x**(-a)*ktsq**b*m.exp(m.sqrt (16*Ca/9*m.log(1/x)*m.log((m.log(ktsq\
/lambdasq))/m.log(qOsq/lambdasq))))),x)
那么如何打印出符号导数及其在某一点的值呢?

Python 新手,希望有一个相对简单的修复。谢谢!

最佳答案

我发布这个答案是因为在搜索“简单的多元微分”时,该线程在我的搜索引擎上排名第一,并且可能会对某人有所帮助。

示例 1

import sympy as sp

def f(u):
return (u[0]**2 + u[1]**10 + u[2] - 4)**2

u = sp.IndexedBase('u')

print(sp.diff(f(u), u[0]))

输出

4*(u[0]**2 + u[1]**10 + u[2] - 4)*u[0]

这是 f(u) 对 u[0] 的导数

<小时/>

示例 2

如果我们想要整个雅可比,我们可以这样做:

for i in range(3):
print(sp.diff(f(u), u[i]))

输出

4*(u[0]**2 + u[1]**10 + u[2] - 4)*u[0]
20*(u[0]**2 + u[1]**10 + u[2] - 4)*u[1]**9
2*u[0]**2 + 2*u[1]**10 + 2*u[2] - 8

我们可以定义一个临时函数并复制粘贴这些行

def temp(u):
return np.array([
4*(u[0]**2 + u[1]**10 + u[2] - 4)*u[0],
20*(u[0]**2 + u[1]**10 + u[2] - 4)*u[1]**9,
2*u[0]**2 + 2*u[1]**10 + 2*u[2] - 8,
])

temp([1., 1., 1.])

此输出 array([ -4., -20., -2.])

并验证

from autograd import grad
gradient = grad(f)
gradient([1., 1., 1.])

此输出:[array(-4.), array(-20.), array(-2.)]

注意:这只是一个简单的展示如何在 sympy 中进行多元导数。我希望我能帮助别人解决这个问题

关于python - 通过 SymPy 求多元函数的微分并在一点求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48356041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com