how to fit a surface to 3d data points

Hi, I have a set of 3D data points (x,y,z) that I want to fit using the equation
A*x^2+B*y^2+C*x*y = [ z (1-z) ]^2
A, B, C being the parameters I have to estimate.
can anyone help me?

 Accepted Answer

If your data points are each vectors, try this:
x = rand(1, 10); % Create Data
y = rand(1, 10); % Create Data
z = rand(1, 10); % Create Data
DM = [x(:).^2, y(:).^2, x(:).*y(:)]; % Design Matrix
P = DM \ (z(:).*(1-z(:))).^2; % Estimate Parameters
A = P(1);
B = P(2);
C = P(3)
Experiment to get the result you want.

6 Comments

Thanks, the fact is now I changed the equation in
A*x^2+B*y^2+C*x*y = [ (z-D)/(1-D) (1-z) ]^2
A, B, C, D being the parameters I have to estimate.
Is it still possible to use your solution?
As always, my pleasure.
Is it still possible to use your solution?
Yes. The ‘P’ calculation then becomes:
P = DM \ [(z(:)-D(:))./(1-D(:)) (1-z(:))].^2; % Estimate Parameters
and ‘P’ is now a (3x2) matrix, so the parameters are now:
A = P(1,:);
B = P(2,:);
C = P(3,:);
Thank you for your answer. Can I, also, ask you how to evaluate the goodness of the fit? R^2?
As always, my pleasure.
I’m not certain which model you’re referring ot, so I calculated it for both:
x = rand(1, 10); % Create Data
y = rand(1, 10); % Create Data
z = rand(1, 10); % Create Data
D = rand(1, 10); % Create Data
DM = [x(:).^2, y(:).^2, x(:).*y(:)]; % Design Matrix
P = DM \ (z(:).*(1-z(:))).^2; % Estimate Parameters
SStot = sum(((z(:).*(1-z(:))).^2 - mean(z(:))).^2);
SSres = sum(((z(:).*(1-z(:))).^2 - DM*P).^2);
Rsq = 1 - SSres/SStot
P = DM \ [(z(:)-D(:))./(1-D(:)) (1-z(:))].^2; % Estimate Parameters
SStot = sum(([(z(:)-D(:))./(1-D(:)) (1-z(:))].^2 - mean(z(:))).^2);
SSres = sum(([(z(:)-D(:))./(1-D(:)) (1-z(:))].^2 - DM*P).^2);
Rsq = 1 - SSres/SStot
Alessandraro
Alessandraro on 12 Jun 2019
Edited: Alessandraro on 12 Jun 2019
Thank you. I am sorry, can I ask you why you calculate SStot
SStot = sum(([(z(:)-D(:))./(1-D(:)) (1-z(:))].^2 - mean(z(:))).^2);
calculating mean(z(:)) instead of mean([(z(:)-D(:))./(1-D(:)) (1-z(:))].^2)?
Thank you.
Because that is how ‘SStot’ is calculated, at least as I interpret it in the context of yoiur model. See the Wikipedia article on: Coefficient of determination (link).

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2017b

Tags

Community Treasure Hunt

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

Start Hunting!