roskar@jhunix.HCF.JHU.EDU (Veljko Roskar) (10/05/90)
Since only one person replied to my question about fitting a surface
to 3-dimensinal data, I am asking again for help.
This time I will be more general:
Using Mathematica, is there an easy procedure to plot both 3-dimensional
points and a surface that gives a best fit to these points?
The data is linear in one dimension and has a polynomial dependency
in the other, but a cubic-spline fit would give the best fit in both
dimensions.
Because of my time constraint, I cannot code the procedures from
Numerical Recipes in Fortran. Besides it's the 3D plot I'm after, not
an equation to model the data.
Below is a summary (long) of the correspondence I've exchanged with Jerry
who was my only help so far:
This is what my data looks like, the third variable is a function
of the first two:
^L
...
My data:
co1=List[{.807,1.0,22.84},{.575,1.0,12.36},{.417,1.0,7.43},{.267,1
.0,3.44},{0,1.0,1.23}]
co2=List[{.807,1.1,24.41},{.575,1.1,13.82},{.417,1.1,8.40},{.267,1
.1,3.85},{0,1.1,1.27}]
co3=List[{.807,1.2,25.97},{.575,1.2,15.29},{.417,1.2,9.37},{.267,1
.2,4.26},{0,1.2,1.31}]
co4=List[{.807,1.3,27.54},{.575,1.3,16.75},{.417,1.3,10.3},{.267,1
.3,4.67},{0,1.3,1.35}]
Note that the first variable repeats itself in every Rco#S set,
and that the second one is constant in each set.
...
+++++++++++++++
From: IN%"trantow%csd4.csd.uwm.edu%rutgers@APLCEN.BITNET" "Jerry J Trantow" 2-OCT-1990 10:06:11.71
To: roskar%jhunix%aplcen@mimsy
Subj: RE: Fitting surfaces (planes) to (x,y,f(x,y)) data:Mathematica
I don't think Fit[] will do what you want. What you really want is simple
multiple regression. I just had to do this for a HW assignment and I spent
a few extra minutes doing the graphics you also requested.
I'm not sure how this will cut/paste, but here goes
Problem 1.4.8 Multiple Regression
Multiple Regression fits two-dimensional data by a plane
y=C+Dt+Ez, instead of one-dimensional data by a line. If we are given
(t,z,b)
Write down the 4 equations in the 3 unknowns C,D,E. What is the least
squares solution from the normal equations?
givendata={{0,0,2},{0,1,2},{1,0,1},{1,1,5}}
{{0, 0, 2}, {0, 1, 2}, {1, 0, 1}, {1, 1, 5}}
A=Table[{1,givendata[[i,1]],givendata[[i,2]]},{i,1,4}];MatrixForm[A]
1 0 0
1 0 1
1 1 0
1 1 1
b=Table[{givendata[[i,3]]},{i,1,4}]
{{2}, {2}, {1}, {5}}
Aprime=Transpose[A].A;bprime=Transpose[A].b
{{10}, {6}, {7}}
solution=LinearSolve[Aprime,bprime]
{{1}, {1}, {2}}
yplane[w_]=Transpose[solution].w
{{1, 1, 2}} . w
ypoly=Polygon[{{0,0,yplane[{{1},{0},{0}}][[1,1]]},
{0,1,yplane[{{1},{0},{1}}][[1,1]]},
{1,0,yplane[{{1},{1},{0}}][[1,1]]},
{1,1,yplane[{{1},{1},{1}}][[1,1]]}}]
Polygon[{{0, 0, 1}, {0, 1, 3}, {1, 0, 2}, {1, 1, 4}}]
abc=Table[Graphics3D[Point[givendata[[i]]]],{i,1,4}]
Show[Graphics3D[ypoly],ViewPoint->{2,1,2}]
Show[Graphics3D[PointSize[.02]],abc,ViewPoint->{2,1,2}]
Show[Graphics3D[PointSize[.02]],abc,Graphics3D[ypoly],ViewPoint->{2,1,2}]
I will also pop a copy of this into snail mail for you. Good luck.
....
************
^L
My reply:
You mailed me:
...
Problem 1.4.8 Multiple Regression
Multiple Regression fits two-dimensional data by a plane
y=C+Dt+Ez, instead of one-dimensional data by a line. If we are given
(t,z,b)
Write down the 4 equations in the 3 unknowns C,D,E. What is the least
squares solution from the normal equations?
...
Did you mean y=Cb+Dt+Ez? There is also the problem that in one dimension
my data is linear (the third variable w/respect to the second--from
co1 to co4), and in the second dimension it best fits a polynomial of the
2nd order (the third variable with respect to the first--for each co# set).
So my surface will look like a bent sheet of paper that's angled about an
axis perpendicular to the "axis" of the bend.
Any ideas?
...
***************
^L
From: IN%"trantow@csd4.csd.uwm.EDU" "Jerry J Trantow" 2-OCT-1990 22:19:44.39
To: ROSKAR@JHUVMS.BITNET, trantow@csd4.csd.uwm.EDU
Subj: RE: Fitting a plane to 3D data
The example I gave was correct as sent. In one dimension
y=-mx+b with x being the variable
In two dimensions, you are fitting
y=C+Dt+Ez with t and z being the variables. I didn't pick the variable
names they were given in the book. If your data requires a
second order polynomial, I suspect you could set up the equation
to be
y=C+Dt+Ez+Fx^2
the same technique as I gave should work. I mailed it off to you
today. Find a linear algebra or statistic book that shows how
to do multiple regression. Your problem does not seem very bad.
****************
End of included text.
--
Veljko Roskar | roskar@jhuvms.bitnet
Department of Chemical Engineering | roskar@jhuvms.hcf.jhu.edu
The Johns Hopkins University, Baltimore | uunet!mimsy!aplcen!jhunix!roskar