首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多参数函数的scipy.misc.derivative

多参数函数的scipy.misc.derivative
EN

Stack Overflow用户
提问于 2013-12-21 00:34:49
回答 3查看 16.8K关注 0票数 17

使用SciPy函数scipy.misc.derivative可以直接计算函数相对于第一个参数在某一点的偏导数。下面是一个示例:

代码语言:javascript
复制
def foo(x, y):
  return(x**2 + y**3)

from scipy.misc import derivative
derivative(foo, 1, dx = 1e-6, args = (3, ))

但是我该如何去求函数foo对第二个参数的导数呢?我能想到的一种方法是生成一个lambda函数,它可以重新组合周围的参数,但这很快就会变得很麻烦。

另外,有没有一种方法可以生成关于函数的部分或全部参数的偏导数数组?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-21 01:05:31

我会写一个简单的包装器,类似于

代码语言:javascript
复制
def partial_derivative(func, var=0, point=[]):
    args = point[:]
    def wraps(x):
        args[var] = x
        return func(*args)
    return derivative(wraps, point[var], dx = 1e-6)

演示:

代码语言:javascript
复制
>>> partial_derivative(foo, 0, [3,1])
6.0000000008386678
>>> partial_derivative(foo, 1, [3,1])
2.9999999995311555
票数 21
EN

Stack Overflow用户

发布于 2014-04-07 09:14:13

是的,它是用sympy实现的。演示:

代码语言:javascript
复制
>>> from sympy import symbols, diff
>>> x, y = symbols('x y', real=True)
>>> diff( x**2 + y**3, y)
3*y**2
>>> diff( x**2 + y**3, y).subs({x:3, y:1})
3
票数 2
EN

Stack Overflow用户

发布于 2015-08-04 23:55:40

以下是使用数值微分工具进行数值微分的答案。

代码语言:javascript
复制
import numpy as np
import numdifftools as nd

def partial_function(f___,input,pos,value):
    tmp  = input[pos]
    input[pos] = value
    ret = f___(*input)
    input[pos] = tmp
    return ret

def partial_derivative(f,input):
    ret = np.empty(len(input))
    for i in range(len(input)):
        fg = lambda x:partial_function(f,input,i,x)
        ret[i] = nd.Derivative(fg)(input[i])
    return ret

然后:

代码语言:javascript
复制
print (partial_derivative(lambda x,y: x*x*x+y*y,np.array([1.0,1.0])))

提供:

代码语言:javascript
复制
[ 3.  2.]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20708038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档