赞
踩
曲面拟合用于二维变量与目标函数之间关系的分析;
根据实际实验测试数据,求取函数f(x,y)与变量x及y之间的解析式,使其通过或近似通过所有的实验测试点;即使所有实验数据点能近似地分布在函数f(x,y)所表示的空间曲面上;
插值方式
逼近方式
均利用曲面上或接近曲面的一组离散点,寻求良好的曲面方程;
插值方式得到的方程,所表示的曲面全部通过这组数据点,例如:lowess曲面拟合;
逼近方式只要求在某种准则下,其方程表示的曲面与这组数据点接近即可,例如:多项式曲面拟合;
逼近方式一般使用最小二乘法实现;
最小二乘法是一种逼近理论,也是采样数据进行拟合时最常用的一种方法;曲面一般不通过已知数据点,而是根据拟合的曲面在取样处的数值与实际值之差的平均和达到最小时求得;使拟合数值与实际数值之间的偏平方差的和达到最小;
Statsmodels包的ols函数可以实现多元多次曲面拟合;
先使用现有的数据集拟合得到多项式方程z=f(x,y);
再使用np.meshgird()函数生成x和y的网格数据;
然后使用拟合的多项式预测z数值;
最后使用ax.plot_surface()函数绘制拟合曲面;
from statsmodels.formula.api import ols
import pandas as pd
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
df=pd.read_csv('d:\python\out\SurfaceD.csv')
##多项式拟合z=f(x, y)=a+bx+cy+dx2+ey2
formula = 'z~x+y'
est = ols(formula,data=df).fit()
print(est.summary())
N=30
xmar= np.linspace(min(df.x),max(df.x),N)
ymar= np.linspace(min(df.y),max(df.y),N)
X,Y=np.meshgrid(xmar,ymar)
df_grid =pd.DataFrame({
'x':X.flatten(),'y':Y.flatten()})
Z=est.predict(df_grid)
fig = plt.figure(figsize=(10,8),dpi =90)
ax = fig.gca(projection='3d')
#ax.set_aspect('equal','box')
ax.view_init(azim=60, elev=20)
##改变绘制图像的视角,即相机的位置,azim沿着z轴旋转,elev沿着y轴
#----------------------------------------------------------------
ax.grid(False)
ax.xaxis._axinfo['tick']['outward_factor'] = 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。