我发现自己想使用mpmath包中提供的approxmations,但却搞不清它们到底应该做什么:
http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html
sympy表达式和数学硕士表情?在
如果我想要一个符号表达式的泰勒近似,而不了解mpmath包在做什么,我可以执行以下操作:
#Imports
import sympy
import sympy.parsing
import sympy.parsing.sympy_parser
import Library_TaylorApproximation
#Create a sympy expression to approximate
ExampleStringExpression = 'sin(x)'
ExampleSympyExpression = sympy.parsing.sympy_parser.parse_expr(ExampleStringExpression)
#Create a taylor expantion sympy expression around the point x=0
SympyTaylorApproximation = sympy.series(
ExampleSympyExpression,
sympy.Symbol('x'),
1,
4,
).removeO()
#Cast the sympy expressions to python functions which can be evaluated:
VariableNames = [str(var) for var in SympyTaylorApproximation.free_symbols]
PythonFunctionOriginal = sympy.lambdify(VariableNames, ExampleSympyExpression)
PythonFunctionApproximation = sympy.lambdify(VariableNames, SympyTaylorApproximation)
#Evaluate the approximation and the original at a point:
print PythonFunctionOriginal(2)
print PythonFunctionApproximation(2)
#>>> 0.909297426826
#>>> 0.870987413961
但是,如果我尝试根据文档对mpmath执行相同的操作:
^{pr2}$我可以尝试将python函数塞进其中(它是可调用的):
TaylorCoefficients = sympy.mpmath.taylor(PythonFunctionOriginal, 1, 4 )
print 'TaylorCoefficients', TaylorCoefficients
#>>> TaylorCoefficients [mpf('0.8414709848078965'), mpf('0.0'), mpf('0.0'), mpf('0.0'), mpf('-8.3694689805155739e+57')]
但我不知道上面的任何一个函数的导数。在
我可以调用mpmath函数sin
:
TaylorCoefficients = sympy.mpmath.taylor(sympy.mpmath.sin, 1, 4 )
print 'TaylorCoefficients', TaylorCoefficients
#>>> TaylorCoefficients [mpf('0.8414709848078965'), mpf('0.54030230586813977'), mpf('-0.42073549240394825'), mpf('-0.090050384311356632'), mpf('0.035061291033662352')]
但这样我就不能按我想要的方式来操作它——就像我想做的那样
SinTimesCos = sympy.mpmath.sin*sympy.mpmath.cos
TaylorCoefficients = sympy.mpmath.taylor(SinTimesCos, 1, 4 )
print 'TaylorCoefficients', TaylorCoefficients
#>>> TypeError: unsupported operand type(s) for *: 'function' and 'function'
什么是mpmath函数?在
它不是一个sypy表达式,也不是一个python函数。如何对任意表达式进行操作?在
似乎我不能在文档中对任意的sympy表达式进行近似处理。 http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html
如何进行任意近似(Pade/Cheby-Chev/Fourier) 对武断的同情?在
编辑:
所以我要找的一个例子是下面的近似值:
#Start with a sympy expression of (a, b, x)
expressionString = 'cos(a*x)*sin(b*x)*(x**2)'
expressionSympy = sympy.parsing.sympy_parser.parse_expr(expressionString)
#Do not want to decide on value of `a or b` in advance.
#Do want approximation with respect to x:
wantedSympyExpression = SympyChebyChev( expressionSympy, sympy.Symbol('x') )
结果可以是a
和{
wantedSympyExpressionCoefficients = [ Coef0Expression(a,b), Coef1Expression(a,b), ... , CoefNExpression(a,b)]
或者结果可能是整个sympy表达式本身(它本身是a
,b
)的函数:
wantedSympyExpression = Coef0Expression(a,b) + Coef1Expression(a,b) *(x**2) + ... + CoefNExpression(a,b) (x**N)
注意,a
和{
编辑:重读我的答案->;我想我会填补一些缺失的部分,作为对某一天实际使用这个工具的人的服务。下面我标记了如何命名我的库,以及需要什么导入。我现在没有时间成为sympy的真正贡献者,但是我觉得这个功能肯定会被其他数学/物理教授/学生使用。在
注意,由于空间原因,省略了以下两个库,我将在以后的某个日期抛出指向回购的链接。在
创建一个python可调用函数对象,其参数(数字和名称)与sympy表达式中的自由变量相同。在
^{pr2}$字面上就是str(SympyExpression)
图书馆代谢比斯法:
图书馆协方差近似维数
在
示例:Sympychebysheva近似尺寸:
如果您有一个SymPy表达式,并希望将其计算为任意精度,请使用
evalf
,例如在计算之前,可以使用
sin(x).evalf(100, subs={x:1})
将x
替换为1
。evalf
在幕后使用了mpmath,因此这将得到与mpmath相同的结果,但不必直接使用mpmath。在mpmath函数是普通的Python函数。他们只是用任意精度的算术来计算。在
你不能把导数符号化,但你可以通过对函数求值几次并使用数值微分技术来计算导数的近似值。这就是
sympy.mpmath.taylor
所做的。引用文件:相关问题 更多 >
编程相关推荐