| > | read("/home/scott/www/mat331.spr08/problems/lsq_data.txt"); |
| defined line_pts(), bad_line_pts(), quadratic_pts(), cubic_pts(), and circle_pts() |
| > | stuff:=bad_line_pts(): |
| > | plot(stuff,style=point); |
![]() |
| > | badline:=CurveFitting[LeastSquares](stuff,x); |
| (1) |
| > | plot([stuff,badline],x=-10..10,style=[point,line]); |
![]() |
| > | nops(stuff); |
| (2) |
| > | epsilon:=(m,b,pt) -> ( m*pt[1]+b - pt[2]); |
| (3) |
| > | H:=(m,b,data) -> sum( epsilon(m,b,data[i])^2,i=1..nops(data)); |
| (4) |
| > | H(1,2,stuff); |
| (5) |
| > | plot3d(H(m,b,stuff),m=-3..0,b=-10..0, axes=boxed); |
![]() |
Rachel suggests 1-exp(-x^2). Let's try it.
| > | R:=(m,b,data) -> sum( 1-exp(-epsilon(m,b,data[i])^2),i=1..nops(data)); |
| (6) |
| > | plot3d(R(m,b,stuff),m=-3..0,b=-10..0, axes=boxed); |
![]() |
| > | plot3d(R(m,b,stuff),m=-3..-1,b=-10..-7.5, axes=boxed); |
![]() |
| > | solve({diff(R(m,b,stuff),m)=0, diff(R(m,b,stuff),b)=0}, {m,b}); |
| Warning, computation interrupted |
| > | fsolve({diff(R(m,b,stuff),m)=0, diff(R(m,b,stuff),b)=0}, {m,b}, {m=-2.5..-1.5, b=-10..-9}); |
| (7) |
| > | Rline:=subs(%,m*x+b); |
| (8) |
| > | plot([stuff,badline,Rline],x=-10..10,style=[point,line,line]); |
![]() |
| > | plot([stuff,badline,Rline],x=-10..10,y=-40..20,style=[point,line,line]); |
![]() |
| > | S:=(m,b,data) -> sum( ln(1+epsilon(m,b,data[i])^2),i=1..nops(data)); |
| (9) |
| > | plot3d(S(m,b,stuff),m=-3..0,b=-20..0, axes=boxed); |
![]() |
| > | plot3d(S(m,b,stuff),m=-2.2..-2,b=-10..-9, axes=boxed); |
![]() |
| > | fsolve({diff(S(m,b,stuff),m)=0, diff(S(m,b,stuff),b)=0}, {m,b}, {m=-2.5..-1.5, b=-10..-9}); |
| (10) |
| > | Sline:=subs(%,m*x+b); |
| (11) |
| > | plot([stuff,badline,Rline,Sline],x=-10..10,y=-40..20,style=[point,line,line,line]); |
![]() |
| > | ?Minimize |
| > | Optimization[Minimize](S(m,b,stuff)); |
| (12) |
| > | Optimization[Minimize](R(m,b,stuff)); |
| (13) |
| > | T:=(m,b,data) -> sum( abs(epsilon(m,b,data[i])),i=1..nops(data)); |
| (14) |
| > | T(1,2,stuff); |
| (15) |
| > | plot3d(T(m,b,stuff),m=-3..0,b=-20..0, axes=boxed); |
![]() |
| > | Optimization[Minimize](T(m,b,stuff)); |
| Error, (in Optimization:-NLPSolve) no improved point could be found |
| > | plot3d(T(m,b,stuff),m=-2.25..-2,b=-9.5..-9.25, axes=boxed); |
![]() |
| > |
| > |