2d多项式拟合表数据MATLAB

时间:2012-09-06 11:28:48

标签: matlab polynomial-math data-fitting

我正在尝试使用2D多项式拟合来处理我的表数据,我的数据格式与下面的链接完全相同: http://www.mathworks.de/help/toolbox/curvefit/brx2ldg-1.html#bso46rp-1

我的意思是我的长度为Xn长度为Ym矩阵为m*n的向量Z,我想将5度2d多项式拟合到我的数据

我想知道MATLAB中有没有解决这个问题的语法?像IDL中的SFIT命令http://star.pst.qub.ac.uk/idl/SFIT.html

我有cftoolsftool,但似乎它们不能用于此目的,或者很可能我不知道如何使用它们。

我知道人们在MATLAB Mathworks文件交换中有一些m.file,如果你知道一个正常工作,请告诉我。

我很感激任何帮助和评论。

1 个答案:

答案 0 :(得分:2)

您可以在文件交换中使用polyfitn并重新格式化数据,以便拥有3个MxN x,y,z个向量。

示例

假设您有表格数据

N = 100; M = 80;
x = linspace(0, 1, M);
y = linspace(0, 1, N).';
z = bsxfun(@franke, x, y);

为x创建meshgrid,而为

创建y
N = 100; M = 80;
[x, y] = meshgrid(0:1:N, 0:1:M);
z = bsxfun(@franke, x, y);

(请注意,unique(x)unique(y)会为您提供表格行和列的原始linspace值。)

使用polyfitn获取5次多项式系数

p = polyfitn([x(:),y(:)], z(:), 5);

您还可以将结果转换为符号形式,以使用提供的polyn2sym(p)

查看多项式
>> pretty(polyn2sym(p))

                      5                           4                             4                         3   2
     90264379051097 X1         2537627280433653 X1  X2       7778045812403061 X1       6982058230382053 X1  X2
- ------------------------- - -------------------------- + ------------------------ - -------------------------- + ...
  2417851639229258349412352   38685626227668133590597632   604462909807314587353088   77371252455336267181195264