# curve fitting. cfit<-function(x,t,m) { n=length(x); a<-matrix(seq(0,0,length.out=m+1),m+1,m+1); for (j in seq(0,m)) { for (k in seq(0,m)) { a[j+1,k+1] <- sum((x^k)*(x^j)); } } b<-seq(0,0,length.out=m+1); for (j in seq(0,m)) { b[j+1]<-sum(t*(x^j)); } w<-solve(a,b); return(w); } fw<-function(x,w) { m=length(w); m=m-1; s<-0; for (i in seq(0,m)) { s<-s+w[i+1]*x^i; } return(s); } foo<-function(m) { x<-seq(0,1,by=0.1); t<-sin(x*6); e<-rnorm(length(t),sd=0.15); # foo(9), over-fitting t<-t+e; w<-cfit(x,t,m); print(w); plot(x,t); curve(fw(x,w),from=0,to=1,add=TRUE); } cfit2<-function(x,t,m) { n=length(x); a<-matrix(seq(0,0,length.out=m+1),m+1,m+1); for (j in seq(0,m)) { for (k in seq(0,m)) { a[j+1,k+1] <- sum((x^k)*(x^j)); if (k == j) a[j+1,k+1] <- a[j+1,k+1]+0.01; } } b<-seq(0,0,length.out=m+1); for (j in seq(0,m)) { b[j+1]<-sum(t*(x^j)); } w<-solve(a,b); return(w); } foo2<-function(m) { x<-seq(0,1,by=0.1); t<-sin(x*6); e<-rnorm(length(t),sd=0.15); # foo(9), over-fitting t<-t+e; w<-cfit2(x,t,m); print(w); plot(x,t); curve(fw(x,w),from=0,to=1,add=TRUE); }