【长见识】matlab的二次函数拟合

看完文章,长点见识。

世界如此复杂,任一元素受到太多因素的影响,因而要挑出合适的元素。例如,对于无人机价格Price,仅考虑体积V和速度S对价格的影响,构建一个函数P(V,S)。人为选定采用二次函数的方法拟合。

收集的数据如表:

那么就不难列出如下一个方程:

价格=系数阵*数据阵   代码: c=data_new\price

其中系数阵就是不同下标的C,其中数据阵就是【V^2,S^2,V,S,SV,1】

欲求系数阵,只需用六或以上方程(正定或超定方程),六个未知数,继而:

系数阵=价格*数据阵的逆

代码如下:

%输入原始数据
data=[1,1169,124992,16;2,948,55200,22;3,1051,89280,15;4,825,10200,8;5,921,36400,12;6,873,8500,10;7,1100,80080,19];

%分别计算价格阵和数据阵
price=data(:,2);
data_new=[];
for n=1:7
    s=data(n,4);
    v=data(n,3);
    temp=[v^2,s^2,v,s,s*v,1];    
    data_new=[data_new;temp];
end

%计算结果
c=data_new\price

%验算结果
dis=data_new*c-price

但其实,你完全可以在工具栏输入cftool唤起拟合工具栏,进行如此的设置:

一步,就完成了全部。而且他还帮你算了各种我看不懂的系数。多么好啊?

闲谈

好了,正文结束了,我们来闲谈一下吧。这是我第一次做测绘专业之外的数据拟合工作(因比赛的需要)。我们都明白matlab可以干这个,但却还是折腾了不少时间才查到资料。

最开始我们其实都没意识到这是一个拟合问题,那时候我们查的关键词是:

已知X,Y,Z,matlab可以获得其曲面函数么?

我们发现网上很多回答都告诉了我们怎么画这个曲面,但少有答案提到获得其曲面函数,更没有人提到拟合这个词。

接着我对我的队友说,其实我们专业干过这个,我们有一套关于平差的方法可以处理这个问题。这其实就是一个解方程的问题。进一步,我突然想到,说,这是一个拟合问题。咱们可以自己用二次曲面来拟合,二次曲面拟合共6个未知数,咱们收集了七个数据,这是可以解的!接着,我们如此搜索:

matlab如何拟合二次曲面

答案有不少都指向了使用cftool。接着我们稍微查阅了一下,就获得了答案。

想法

上述的搜索至少反映出了两点:

1.界定清楚问题所属领域,很重要。

2.对于搜索,详细描述问题等于一无所获,宽泛描述问题便可各取所需。

另外,关于推测功能(对一个新接触的软件,处于常情考虑其可能有的功能,进而通过搜索使用之,并解决具体问题)关于matlab之所以会有拟合这个功能,也很容易想明白。拟合是一个重复性极高且十分重要的操作,封装于工具箱中,也是再正常不过的事情了。

猜你喜欢

转载自blog.csdn.net/qq_40938169/article/details/86677659