回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我发现自己想使用mpmath包中提供的approxmations,但却搞不清它们到底应该做什么:</p>
<p><a href="http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html" rel="nofollow">http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html</a></p>
<p>sympy表达式和数学硕士表情?在</p>
<p>如果我想要一个符号表达式的泰勒近似,而不了解mpmath包在做什么,我可以执行以下操作:</p>
<pre><code>#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
</code></pre>
<p>但是,如果我尝试根据文档对mpmath执行相同的操作:</p>
^{pr2}$
<p>我可以尝试将python函数塞进其中(它是可调用的):</p>
<pre><code>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')]
</code></pre>
<p>但我不知道上面的任何一个函数的导数。在</p>
<p>我可以调用mpmath函数<code>sin</code>:</p>
<pre><code>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')]
</code></pre>
<p>但这样我就不能按我想要的方式来操作它——就像我想做的那样</p>
<pre><code>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'
</code></pre>
<p>什么是mpmath函数?在</p>
<p>它不是一个sypy表达式,也不是一个python函数。如何对任意表达式进行操作?在</p>
<p>似乎我不能在文档中对任意的sympy表达式进行近似处理。
<a href="http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html" rel="nofollow">http://docs.sympy.org/dev/modules/mpmath/calculus/approximation.html</a></p>
<p>如何进行任意近似(Pade/Cheby-Chev/Fourier)
对武断的同情?在</p>
<p>编辑:</p>
<p>所以我要找的一个例子是下面的近似值:</p>
<pre><code>#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') )
</code></pre>
<p>结果可以是<code>a</code>和{<cd3>}函数的系数表达式列表:</p>
<pre><code>wantedSympyExpressionCoefficients = [ Coef0Expression(a,b), Coef1Expression(a,b), ... , CoefNExpression(a,b)]
</code></pre>
<p>或者结果可能是整个sympy表达式本身(它本身是<code>a</code>,<code>b</code>)的函数:</p>
<pre><code>wantedSympyExpression = Coef0Expression(a,b) + Coef1Expression(a,b) *(x**2) + ... + CoefNExpression(a,b) (x**N)
</code></pre>
<p>注意,<code>a</code>和{<cd3>}不是在执行近似之前选择的。在</p>