代码如下,标红的是出错的地方
/**
***
*** Program to find the MLEs using several iterations of Newton-Raphson
***
**/
library pgraph;
graphset;
gausset;
cls;
rndseed 123457;
/** (1) - Simulate the model **/
t = 5;
x = { 1,2,4,5,8 };
beta = 1.0;
sig2 = 4.0;
y = beta*x + sqrt(sig2)*rndn(t,1);
/** (3) - Evaluate gradient and Hessian at theta0 **/
beta_0 = 1.0;
sig2_0 = 4.0;
theta_0 = beta_0 | sig2_0;
g = zeros(2,1);
g[1] = meanc( (y - beta_0*x).*x ) / sig2_0;
g[2] = -0.5/sig2_0 + 0.5*meanc( (y - beta_0*x).^2 )/sig2_0^2;
h = zeros(2,2);
h[1,1] = -meanc(x.^2)/sig2_0;
h[1,2] = -meanc( (y - beta_0*x).*x )/sig2_0^2;
h[2,1] = -meanc( (y - beta_0*x).*x )/sig2_0^2;
h[2,2] = 0.5/sig2_0^2 - meanc( (y - beta_0*x).^2 )/sig2_0^3;
/** (4) - Log-likelihood at theta0 **/
lnl_0 = -0.5*ln(2*pi) - 0.5*ln(sig2_0) - 0.5*meanc( (y - beta_0*x).*2 )/sig2_0;
i=1;
/** (5) - Newton-Raphson update **/
do while i<=5;
theta_i = theta_i - inv(h_i)*g_i;
beta_i = theta_i[1];
sig2_i = theta_i[2];
g_i[1] = meanc( (y - beta_i*x).*x ) / sig2_i;
g_i[2] = -0.5/sig2_i + 0.5*meanc( (y - beta_i*x).^2 )/sig2_i^2;
h_i[1,1] = -meanc(x.^2)/sig2_i;
h_i[1,2] = -meanc( (y - beta_i*x).*x )/sig2_i^2;
h_i[2,1] = -meanc( (y - beta_i*x).*x )/sig2_i^2;
h_i[2,2] = 0.5/sig2_i^2 - meanc( (y - beta_i*x).^2 )/sig2_i^3;
lnl_i = -0.5*ln(2*pi) - 0.5*ln(sig2_i) - 0.5*meanc( (y - beta_i*x).*2 )/sig2_i;
print "Log-likelihood at theta_i =" lnl_i;
i=i+1;
endo;
运行后显示Line 69 in D:\GAUSS\prc\max_nr_iter.g
Illegal redefinition of procedure G0156 : 'g_i'
Line 70 in D:\GAUSS\prc\max_nr_iter.g
Illegal redefinition of procedure G0156 : 'g_i'
Line 72 in D:\GAUSS\prc\max_nr_iter.g
Illegal redefinition of procedure G0156 : 'h_i'
在下是Gauss新手,妄自考虑了一下,想到两个可能的问题,首先可能是代码h_i 和g_i 的idex _i的表示问题,另外我在main program中也定义了g 和 h(分别代表梯度向量和hessian矩阵)。这个程序主要是为了连续有关loop的编写。