您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > Python三维可视化:Scipy基础一
Scipy基础一黄天羽的介绍在Numpy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数例如:线性代数常微分方程数值求解信号处理图像处理稀疏矩阵……SciPy库的安装Win平台:“以管理员身份运行”cmd在下载目录执行pipinstallnumpy-1.13.0+mkl-cp36-cp36m-win_amd64.whlpipinstallscipy-0.19.1-cp36-cp36m-win_amd64.whl测试SciPy安装成功SciPy的常数SciPy的常数SciPy的constants模块包含了众多的物理常数:真空中的光速普朗克常数SciPy的常数在字典physical_constants中,以物理常量名为键,对应的值是一个含有三个元素的元组,查看电子质量的例子:常数值单位误差SciPy的常数constants模块中还包含了许多单位信息,它们是1单元的量转换成标准单位时的数值:1英里等于多少米1英寸等于多少米1克等于多少千克1磅等于多少千克SciPy拟合与优化-optimizeSciPy的optimize模块optimize模块提供了许多数值优化算法,可以实现非线性方程组求解数据拟合函数最小值……最小二乘拟合optimize库中的leastsq函数:对数据进行最小二乘拟合调用形式为:func(x)是计算方程组误差的函数,它使得误差的平方和最小;x0为待确定参数的初始值。leastsq(func,x0)最小二乘拟合-举例假定有一组实验数据(𝑥𝑖,y𝑖),他们之间满足函数关系𝑓𝑥=𝑘𝑥+𝑏,求解k和b是多少?𝑋8.19,2.72,6.39,8.71,4.7,2.66,3.78𝑌7.01,2.78,6.47,6.71,4.1,4.23,4.05最小二乘拟合-举例importnumpyasnp#计算以p为参数的直线和原始数据之间的误差deff(p):k,b=preturn(Y-(k*X+b))则误差函数可以定义为:最小二乘拟合-举例求解和结果输出:fromscipy.optimizeimportleastsq#leastsq使得f的输出数组的平方和最小,参数初始值为[1,0]r=leastsq(f,[1,0])k,b=r[0]print(k=,k,b=,b)最小二乘拟合-举例最小二乘拟合-举例程序运行结果为:非线性方程组求解optimize库中的fsolve函数:对非线性方程组进行求解调用形式为:func(x)是计算方程组误差的函数,它的参数x是一个矢量,表示方程组的各个未知数的一组可能解,func返回将x代入方程组之后得到的误差;x0为未知数矢量的初始值。fsolve(func,x0)非线性方程组求解对下面方程组进行求解:f1(u1,u2,u3)=0f2(u1,u2,u3)=0f3(u1,u2,u3)=0误差函数func可以定义为:deffunc(x):u1,u2,u3=xreturn[f1(u1,u2,u3),f2(u1,u2,u3),f3(u1,u2,u3)]非线性方程组求解-举例使用fsolve求解分线性方程组:5𝑥1+3=04𝑥02−2sin𝑥1𝑥2=0𝑥1𝑥2−1.5=0非线性方程组求解-举例frommathimportsindeff(x):#转换为标准的浮点数列表x0,x1,x2=x.tolist()return[5*x1+3,4*x0*x0-2*sin(x1*x2),x1*x2-1.5]则误差函数可以定义为:tolist()将x转换为Python的标准浮点数列表,在单个数值运算时,标准浮点数比NumPy的浮点类型更快,从而缩短计算时间非线性方程组求解-举例fromscipy.optimizeimportfsolve#f是计算的方程组误差函数,[1,1,1]是未知数的初始值result=fsolve(f,[1,1,1])#输出方程组的解print(result)#输出误差print(f(result))求解和结果输出:非线性方程组求解-举例非线性方程组求解-举例程序运行结果为:非线性方程组求解结果方程组求解误差SciPy插值-interpolate插值V.S.拟合插值:通过已知的离散数据来求解未知数据的方法,要求曲线通过所有的已知数据。拟合:要求曲线函数与已知数据集的误差最小,不要求曲线通过所有的已知数据。SciPy的interpolate模块intepolate模块提供了许多对数据进行插值运算的函数:B样条曲线插值外推Spline拟合(UnivariateSpline插值运算)二维插值运算等……B样条曲线插值一维数据的插值运算可以通过interp1d()实现。其调用形式为:Interp1d可以计算x的取值范围之内任意点的函数值,并返回新的数组。interp1d(x,y,kind=‘linear’,…)参数x和y是一系列已知的数据点参数kind是插值类型,可以是字符串或整数B样条曲线插值Kind给出了B样条曲线的阶数:‘zero‘‘nearest’:阶梯插值,相当于0阶B样条曲线‘slinear’‘linear’:线性插值,相当于1阶B样条曲线‘quadratic’‘cubic’:2阶和3阶B样条曲线,更高阶的曲线可以直接使用整数值来指定……B样条曲线插值-举例fromnumpyimportnpx=np.linspace(0,10,11)y=np.sin(x)创建数据点集:绘制数据点集:importpylabasplpl.plot(x,y,'ro')B样条曲线插值-举例绘制数据点集:B样条曲线插值-举例创建interp1d对象f、计算插值结果:xnew=np.linspace(0,10,11)fromscipyimportinterpolatef=interpolate.interp1d(x,y,kind=kind)ynew=f(xnew)B样条曲线插值-举例根据kind类型创建interp1d对象f、计算并绘制插值结果:xnew=np.linspace(0,10,11)forkindin['nearest','zero','linear','quadratic']:#根据kind创建插值对象interp1df=interpolate.interp1d(x,y,kind=kind)ynew=f(xnew)#计算插值结果pl.plot(xnew,ynew,label=str(kind))#绘制插值结果B样条曲线插值-举例B样条曲线插值-举例
本文标题:Python三维可视化:Scipy基础一
链接地址:https://www.777doc.com/doc-7105209 .html