作者tn00364361 (小氵斿)
看板MATLAB
标题Re: [讨论] fit平面问题
时间Tue Aug 18 20:07:08 2015
※ 引述《liwes5566 (wes5566)》之铭言:
: 目前是利用指令中的fit(2元2次多项式poly22)下去fit
: 再一般的情况下,都可以fit得很好
: 可是当我是fit一个平面(数值全部都一样),所得到的答案不是平面
: 这是我已1024*1024矩阵,数值为2^16的结果
: fitobject(x,y)=p00+p10x+p01y+p20x^2+p11xy+p02y^2
: p00=6.554e+04
: p10=-5.012e-12
: p01=3.291e-09
: p20=2.868e-14
: p11=-7.413e-16
: p02=-1.801e-11
: 有没有甚麽方法可以让p00的值为2^16,其他都为0呢?
任何方法fit的结果都不太可能会是真的零误差
在一般电脑上MATLAB的machine epsilon大概是2.22e-16
通常可接受的数值误差范围大概是sqrt(machine epsilon),也就是1.49e-8
----------------------------------------
Fit多项式曲面(或是曲线)可以看成是一个线性的least-squares问题
假设你有m个资料点,p = [p1; p2; ...; pn]为你想要fit的曲面的系数。
而曲面的方程式可以写成 z = a1 * p1 + a2 * p2 + ... + an * pn = dot(a, p)
其中a是x跟y的函数
把所有的资料点"叠"起来,可以写成
z1 ~ a11 * p1 + a12 * p2 + ... + a1n * pn
z2 ~ a21 * p1 + a22 * p2 + ... + a2n * pn
...
zm ~ am1 * p1 + am2 * p2 + ... + amn * pn
这可以重新写成矩阵的形式: Z ~ A * p (这里的"~"是指大约等於)
其中,[A]ij = aij,Z = [z1; z2; ...; zm]
这时候的最佳解(依least-squares)就是 p_fit = argmin(norm(A * p - Z))
也就是 p_fit = A \ Z (或是写成 p_fit = pinv(A) * Z)
----------------------------------------
回到你的case。先把格点跟资料点都向量化,变成column vector
n = 1024;
x = reshape(x, n^2, 1); % grid point
y = reshape(y, n^2, 1); % grid point
z = reshape(z, n^2, 1); % data point
----------------------------------------
1. 如果用least-squares去fit所有的系数:
A = [ones(n^2, 1), x, y, x.^2, x .* y, y.^2];
p_fit = A \ z; % = [p00; p10; p01; p20; p11; p02]
----------------------------------------
2. 如果只去fit除了p00以外的系数(已知p00 = 2^16):
z = z - 2^16;
A = [x, y, x.^2, x .* y, y.^2];
p_fit = A \ z; % = [p10; p01; p20; p11; p02]
----------------------------------------
这个方法可以很轻易的fit任意维度空间的任意多项式曲面(例如在三维空间中fit椭球)
希望这对你有帮助
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 68.43.178.167
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1439899632.A.F90.html
※ 编辑: tn00364361 (68.43.178.167), 08/18/2015 22:09:36
1F:推 liwes5566: 了解! 不过不过要处理的不只全平面,前面我还要再加个 08/19 11:46
2F:→ liwes5566: 判断,判断其是不是为uniform平面 08/19 11:47
3F:→ tn00364361: uniform是指? 08/19 13:45
4F:→ liwes5566: 就是全部数值都相同的surface 08/19 14:11
5F:→ tn00364361: 喔喔,那你要fit的面有杂讯吗? 08/19 19:04
6F:→ liwes5566: 我fit的目的就是要计算Noise Power Spectrum(NPS),应 08/20 09:26
7F:→ liwes5566: 该都有杂讯,只是遇到全部数值相同的影像就变这样了 08/20 09:27