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\)