zhangtao 发表于 2012-11-26 15:25 
Newtons
Newtons<-function (fun, x, ep=1e-5, it_max=100){
index<-0; k<-1
while (k<=it_max){
x1 <- x; obj <- fun(x);
x <- x - solve(obj$J, obj$f);
norm <- sqrt((x-x1) %*% (x-x1))
if (norm<ep){
index<-1; break
}
k<-k+1
}
obj <- fun(x);
list(root=x, it=k, index=index, FunVal= obj$f)
}
moment <-function(p){
f<-c(p[1]*p[2]-M1,p[1]*p[2]-p[1]*p[2]^2-M2)
J<-matrix(c(p[2],p[1],p[2]-p[2]^2,p[1]-2*p[1]*p[2]),nrow=2,byrow=T)#Jacobi
list(f=f,J=J)
}
#####Binomial distribution B(size,prob)
set.seed(123)
y<-rbinom(1000, 20, 0.5);
n<-length(y)
M1<-mean(y); #9.978
M2<-(n-1)/n*var(y) #4.977516
p<-c(10,0.7) # p[1]=k , p[2]=p
Newtons(moment, p)
$root
[1] 19.9101695 0.5011509
$it
[1] 5
$index
[1] 1
$FunVal
[1] 1.826095e-12 -4.090950e-12
##########
答复你的问题
1.obj$J和obj$f是什么意思?如何求出Jacobi矩阵的?
obj <- fun(x);这里的fun(x)就是moment(p)
function moment()就已经定义了
f<-c(p[1]*p[2]-M1,p[1]*p[2]-p[1]*p[2]^2-M2) #FunVal
J<-matrix(c(p[2],p[1],p[2]-p[2]^2,p[1]-2*p[1]*p[2]),nrow=2,byrow=T)#Jacobi
2.solve是什么意思?
solve Solve a System of Equations
solves the equation a %*% x = b for x, where b can be either a vector or a matrix.
详细请看帮助?solve
3.x - solve(obj$J, obj$f)为什么要赋给x?
迭代法:
k=1,x(start value)=[10,0.7]
经Newton's method,
x <- x - solve(obj$J, obj$f);
x=[18.3035020 , 0.4165549]
这就形成k=2,x(start value)=[18.3035020 , 0.4165549]
k=3,x(start value)=[19.089003 , 0.527265]
...
当k=5,x(start value)=[19.9101655 , 0.5011505]
x value 是[19.9101695 0.5011509]
其与[19.9101655 , 0.5011505]的norm(4.05753e-06)
已经小于ep=1e-5,故程序中止