08-02-28.mw

> 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);
 

Plot_2d
 

> badline:=CurveFitting[LeastSquares](stuff,x);
 

`+`(`-`(5.953614974), `-`(`*`(1.466929810, `*`(x)))) (1)
 

> plot([stuff,badline],x=-10..10,style=[point,line]);
 

Plot_2d
 

> nops(stuff);
 

50 (2)
 

> epsilon:=(m,b,pt) -> ( m*pt[1]+b - pt[2]);
 

proc (m, b, pt) options operator, arrow; `+`(`*`(m, `*`(pt[1])), b, `-`(pt[2])) end proc (3)
 

> H:=(m,b,data) -> sum( epsilon(m,b,data[i])^2,i=1..nops(data));
 

proc (m, b, data) options operator, arrow; sum(`*`(`^`(epsilon(m, b, data[i]), 2)), i = 1 .. nops(data)) end proc (4)
 

> H(1,2,stuff);
 

56653.98178 (5)
 

> plot3d(H(m,b,stuff),m=-3..0,b=-10..0, axes=boxed);
 

Plot
 

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));
 

proc (m, b, data) options operator, arrow; sum(`+`(1, `-`(exp(`+`(`-`(`*`(`^`(epsilon(m, b, data[i]), 2))))))), i = 1 .. nops(data)) end proc (6)
 

> plot3d(R(m,b,stuff),m=-3..0,b=-10..0, axes=boxed);
 

Plot
 

> plot3d(R(m,b,stuff),m=-3..-1,b=-10..-7.5, axes=boxed);
 

Plot
 

> 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});
 

{b = -9.438843067, m = -2.059879800} (7)
 

> Rline:=subs(%,m*x+b);
 

`+`(`-`(`*`(2.059879800, `*`(x))), `-`(9.438843067)) (8)
 

> plot([stuff,badline,Rline],x=-10..10,style=[point,line,line]);
 

Plot_2d
 

> plot([stuff,badline,Rline],x=-10..10,y=-40..20,style=[point,line,line]);
 

Plot_2d
 

> S:=(m,b,data) -> sum( ln(1+epsilon(m,b,data[i])^2),i=1..nops(data));
 

proc (m, b, data) options operator, arrow; sum(ln(`+`(1, `*`(`^`(epsilon(m, b, data[i]), 2)))), i = 1 .. nops(data)) end proc (9)
 

> plot3d(S(m,b,stuff),m=-3..0,b=-20..0, axes=boxed);
 

Plot
 

> plot3d(S(m,b,stuff),m=-2.2..-2,b=-10..-9, axes=boxed);
 

Plot
 

> 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});
 

{m = -2.071275296, b = -9.417948115} (10)
 

> Sline:=subs(%,m*x+b);
 

`+`(`-`(`*`(2.071275296, `*`(x))), `-`(9.417948115)) (11)
 

> plot([stuff,badline,Rline,Sline],x=-10..10,y=-40..20,style=[point,line,line,line]);
 

Plot_2d
 

> ?Minimize
 

> Optimization[Minimize](S(m,b,stuff));
 

[41.4772536309248281, [b = -9.41794811355315886, m = -2.07127529556625989]] (12)
 

> Optimization[Minimize](R(m,b,stuff));
 

[13.7299695565519926, [b = -9.43884306821842323, m = -2.05987980005038018]] (13)
 

> T:=(m,b,data) -> sum( abs(epsilon(m,b,data[i])),i=1..nops(data));
 

proc (m, b, data) options operator, arrow; sum(abs(epsilon(m, b, data[i])), i = 1 .. nops(data)) end proc (14)
 

> T(1,2,stuff);
 

1201.591899 (15)
 

> plot3d(T(m,b,stuff),m=-3..0,b=-20..0, axes=boxed);
 

Plot
 

> 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);
 

Plot
 

>
 

>