What would be the equation of the following surface?

2 次查看(过去 30 天)
I have the raw data of X, Y, Z, where X and Y are inputs and Z is the output. Plotting the surface gives the red curve in the below picture:
The surface seems to be a simple function involving trigonometric functions. For example, plotting the equation cos(X)^2 + cos(Y)^2 gives the blue surface and it looks similar to the red graph (but the RMS error is very large).
I have tried introducing variables (a1*cos(X)^2 + a2*cos(Y)^2), where a1 and a2 vary from 0 to 1) but the RMS error is still large.
I also tried the surface fitting functions (MATLAB's fit function) but it's models are limited (unlike the curve fitting models which include Fourier series, sin series, etc).
How can I find the equation which gives the red surface?
Edit for clarity: I am able to use the lsqcurvefit (or any other curve fitting toolbox functions) to find which coefficients to use, but I am not sure what the equation should be. cos(X)^2 + cos(Y)^2, for example, is not the right equation but it does have a similar shape.
If this seems improbabilistic, how can I vary cos(X)^2 + cos(Y)^2 to align the end curves of the surface (where there seems to be highest misalignment)?

采纳的回答

Sam Chak
Sam Chak 2024-2-21
编辑:Sam Chak 2024-2-21
You can probably try this quadratic function , where is a constant, and , .
Update 1: Another candidate function for the surface is hyperbolic function, .
Update 2: If you insist on using the periodic trigonometric function on a non-oscillatory surface, then modify the fitting model to become so that it fits the local data.
Update 3: Added some surface plots.
[X, Y] = meshgrid(-1:0.05:1);
%% Polynomial function
c = 1;
b = 1/2;
a = b;
Z = c - b*Y.^2 - a*X.^2; % can try higher-order polynomial functions
surf(X, Y, Z), grid on
title('Quadratic function'), xlabel x, ylabel y, zlabel f(x,y)
%% Hyperbolic function
c = 1/(1 - sech(1));
b = [1, (c*sech(1))/2];
a = b;
Z = c - b(2)*cosh(b(1)*Y) - a(2)*cosh(a(1)*X);
surf(X, Y, Z), grid on
title('Hyperbolic function'), xlabel x, ylabel y, zlabel f(x,y)
%% Trigonometric function (local)
c = 0;
b = [pi/2, 1/2];
a = b;
Z = c + b(2)*cos(b(1)*Y).^2 + a(2)*cos(a(1)*X).^2;
surf(X, Y, Z), grid on
title('Trigonometric function'), xlabel x, ylabel y, zlabel f(x,y)
%% Gaussian function (local)
c = 1/(1 - exp(1));
b = exp(1)/(2*(exp(1) - 1));
a = b;
Z = c + b*exp(-Y.^2) + a*exp(-X.^2); % can sech(x) if you like single-hump functions
surf(X, Y, Z), grid on
title('Gaussian function'), xlabel x, ylabel y, zlabel f(x,y)

更多回答(1 个)

Matt J
Matt J 2024-2-21
You could try fitting a 2D Gaussian surface to it, e.g., with this FEX download,

类别

Help CenterFile Exchange 中查找有关 Interpolation 的更多信息

产品


版本

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by