首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >定义渐近函数导数的数值计算

定义渐近函数导数的数值计算
EN

Stack Overflow用户
提问于 2014-07-12 23:49:39
回答 1查看 1.2K关注 0票数 2

如何定义一个函数的导数的数值计算?我有一些函数,我可以用样条来描述这个函数,它的导数使用scipy.interpolate。我想用这个函数操作一些表达式,然后用样条来计算表达式。

我可以用lambdify建立一个数值计算为样条的渐近函数。但是,如何定义一个渐近函数的导数来作为样条函数进行数值计算呢?

例如。

代码语言:javascript
运行
复制
import sympy as sp
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
from sympy.ultilitis.lambdify import implemented_function, lambdify

r = sp.symbols('r')
B = sp.symbols('B', cls=sp.Function)

B_spline = InterpolatedUnivariateSpline([1,2,3,4],[1,4,9,16])
B_der_spline = InterpolatedUnivariateSpline([1,2,3,4],[2,4,6,8])
B = implemented_function(B, lambda r: B_spline(r))

class A(sp.Function):
    nargs = 2

    @classfunction
    def eval(cls, r, B):
        return r**2*B(r)

 A_eval = lambdify(r, A(r,B))
 A_eval(3)
 >>> 81.0
 A_diff_eval = lambdify(r, sp.diff(A(r,B)))
 A_diff_eval(3)
 >>> NameError: global name 'Derivative' is not defined
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-14 01:33:54

SymPy不知道如何取样条函数的导数,因为它只有来自has的数值版本。

而且,这里的A可能只是一个Python函数,因为您从不不计算它。这也更有意义,因为将函数作为参数传递给SymPy函数是有点奇怪的。

implemented_function所做的就是symfunc._imp_ = staticmethod(implementation) (这里是symfunc = Bimplementation = lambda r: B_spline(r))。您还需要添加fdiff,以便它为B_der_spline返回一个新的SymPy函数。有点像

代码语言:javascript
运行
复制
class B_spline_sym(Function):
    _imp_ = staticmethod(B_spline)

    def fdiff(self, argindex=1):
        return B_der_spline_sym(self.args[0])

class B_der_spline_sym(Function):
    _imp_ = staticmethod(B_der_spline)

def A(r, B):
    return r**2*B(r)

给予

代码语言:javascript
运行
复制
In [87]: B = B_spline_sym

In [88]:  A_eval = lambdify(r, A(r,B))

In [89]:  A_eval(3)
Out[89]: 81.0

In [91]:  A_diff_eval = lambdify(r, sp.diff(A(r,B)))

In [92]:  A_diff_eval(3)
Out[92]: 108.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24718313

复制
相关文章

相似问题

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