I am trying to use 2D polynomial fitting for my table data, my data format is exactly like the link below: http://www.mathworks.de/help/toolbox/curvefit/brx2ldg-1.html#bso46rp-1
I mean I have vector X
with length n
, Y
with length m
and m*n
Matrix Z
, I would like to fit 5 degree 2d polynomial to my data,
I am wondering that is there any syntax in MATLAB for solving this problem? like SFIT command in IDL, http://star.pst.qub.ac.uk/idl/SFIT.html
I have cftool
and sftool
, but it seems that they don't work for this purpose or most probably I don't know how to employ them.
and I know that there some m.file which people share in MATLAB Mathworks file exchange, please if you know one works properly, suggest me.
I'd appreciate any help and comment.
You can use polyfitn from file exchange and re-format your data in order to have 3 MxN
x,y,z
vectors.
Example :
Assume you have a table data of the form
N = 100; M = 80;
x = linspace(0, 1, M);
y = linspace(0, 1, N).';
z = bsxfun(@franke, x, y);
Create meshgrid
for x, and y instead
N = 100; M = 80;
[x, y] = meshgrid(0:1:N, 0:1:M);
z = bsxfun(@franke, x, y);
(Note that unique(x)
and unique(y)
will give you the original linspace
values of your table rows and columns.)
Use polyfitn to get the 5-degree polynomial coefficients
p = polyfitn([x(:),y(:)], z(:), 5);
You can additionally convert the result into a symbolic form to view the polynomial using the provided polyn2sym(p)
>> pretty(polyn2sym(p))
5 4 4 3 2
90264379051097 X1 2537627280433653 X1 X2 7778045812403061 X1 6982058230382053 X1 X2
- ------------------------- - -------------------------- + ------------------------ - -------------------------- + ...
2417851639229258349412352 38685626227668133590597632 604462909807314587353088 77371252455336267181195264
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.