SciPy

我再次推荐这款http://www.scipy.org/Wiki/Documentation?action=AttachFile&do=get&target=scipy_tutorial.pdf.有许多有用的SciPy模块,特别是scipy.Optimize、scipy.stats、scipy.linalg、scipy.linsolve、scipy.parse、scipy.Integrate、scipy.fftpack、scipy.ignal、scipy.Special。它们中的大多数都有相对较好的文档,通常您可以从函数的名称中找出它们的作用。我建议你去探索它们。例如,如果您这样做

sage: import scipy
sage: from scipy import optimize

然后

sage: optimize.[tab]

将显示可用功能的列表。您应该会看到一系列用于查找最小函数的例程。尤其是如果你这样做了

sage: optimize.fmin_cg?

你会发现这是一个例程,它使用共轭梯度算法来寻找函数的最小值。

sage: scipy.special.[tab]

will show all the special functions that SciPy has. Spending a little bit of time looking around is a good way to familiarize yourself with SciPy. One thing that is sort of annoying, is that often if you do scipy.:math:langle tab \(\rangle\). You won't see a module that is importable. For example scipy.:math:langle tab \(\rangle\) will not show a signal module but

sage: from scipy import signal

然后

signal.[tab]

将向您展示大量用于信号处理和滤波器设计的函数。我上面列出的所有模块都可以导入,即使您最初看不到它们。

scipy.integrate

该模块有与数值求解常微分方程组和数值积分相关的例程。让我们给出一个使用ODE解算器的例子。假设你想要解这首颂歌

\(x''(t) + ux'(t)(x(t)^2-1)+x(t)=0\)

它作为一个系统读取

\(x'=y\)

\(y'=-x+\mu y(1-x^2).\)

我们要使用的模块是scipy.Integrate中的odeint。我们可以解这首颂歌,计算出 \((y,y')\) ,在1000个点之间 \(0\) ,以及 \(100\) 使用以下代码。

sage: import numpy
sage: from scipy import integrate
sage: def f_1(y,t):
....:    return[y[1],-y[0]-10*y[1]*(y[0]**2-1)]
sage: def j_1(y,t):
....:    return [ [0, 1.0],[-2.0*10*y[0]*y[1]-1.0,-10*(y[0]*y[0]-1.0)] ]
sage: x = numpy.arange(0,100,.1)
sage: y = integrate.odeint(f_1,[1,0],x,Dfun=j_1)

如果我们想要,我们可以通过这样做来绘制解决方案

sage: pts = [(x[i],y[i][0]) for i in range(len(x))]
sage: point2d(pts).show()

最佳化

优化模块有与求根、最小二乘拟合和最小化相关的例程。 \(\langle\) 待写 \(\rangle\)