สวัสดีผม ผมกำลังทำ thesis เกี่ยวกับการเปรียบเทียบตัวประมาณทางด้านสถิติครับ โโยผมใช้โปรแกรม matlab ในการ generate ข้อมูลแล้วนำมาใส่ในฟังก์ชัน เพื่อหาค่าสูงสุด ซึ่งผมใช้คำสั่ง fminunc นี้ครับ มีฟังก์ชัน และ โค้ด matlab ดังต่อไปนี้ครับ
function [f] = dls1(b)
global stdevu u EX covEX s XS X y n;
f = -(((stdevu*y'*u+s'*X*covEX*EX*s)/n)-(y-b(0)*s-XS*b)'*(y-b(0)*s-XS*b)/(2*n)-(s'*EX*covEX*EX*s)/(2*n));
end
.......................................................................................................................................................................
function [EX,X,y,W,z,lam,covEX] = GEN(XS,stdevu,stdevex,n,p,col)
b = ones(col,1);
u = normrnd(0,stdevu,[1 n]);
EX1 = normrnd(0,stdevex,n,p);
EX = [zeros(n,1) EX1];
covEX = cov(EX1);
X = XS + EX;
y = (XS*b)+ u';
X_seq=ones(n,1);
for j = 1: col
C=X(:,j) - mean(X(:,j),1);
X_seq=[X_seq C];
end
X_seq(:,1:2)=[];
W = X_seq;
z = y -mean(y);
lam = (stdevex^2)/(stdevu^2);
end
......................................................................................................................................................
clc;
rng(156)
global stdevu EX covEX s XS X y n;
stdevu = 0.5;
stdevex = 0.5;
n = 100;
p = 1; %%%%%
col = 2; %%%%%
it = 500;
tmseo = 0;
tmsejls = 0;
XS = normrnd(2,1,n,p);
XS = [ones(n,1) XS];
%for l = 1:it
[EX,X,y,W,z,lam,covEX] = GEN(XS,stdevu,stdevex,n,p,col);
options = optimset('GradObj','on');
s = [1];
binit = [1;1];
[bdls,fval] = fminunc(@dls1,binit,options);
%bdls = [b0dls;b1dls];
...............................................................................................................................................................................
โดยจะเอาค่าต่างๆแทนในฟังก์ชัน dls1 เพื่อที่จะหาค่าของตัวประมาณ b0 b1 ที่ทำให้ f มีค่าสูงสุด แต่พอผมรันโปรแกรม ได้ error ดังนี้ครับ

ผมแก้มาจะ 1 สัปดาห์แล้ว ไม่ออกสักที ช่วยผมด้วยครับ ใครมีคำแนะนำอะไรบอกผมได้เลยครับ ตอนนี้เครียดมาก ไม่เคยเรียนเขียนโปรแกรมมาก่อนเลย
ขอบคุณล่วงหน้าครับ
ขอความช่วยเหลือโปรแกรม matlab ทางสถิติ
function [f] = dls1(b)
global stdevu u EX covEX s XS X y n;
f = -(((stdevu*y'*u+s'*X*covEX*EX*s)/n)-(y-b(0)*s-XS*b)'*(y-b(0)*s-XS*b)/(2*n)-(s'*EX*covEX*EX*s)/(2*n));
end
.......................................................................................................................................................................
function [EX,X,y,W,z,lam,covEX] = GEN(XS,stdevu,stdevex,n,p,col)
b = ones(col,1);
u = normrnd(0,stdevu,[1 n]);
EX1 = normrnd(0,stdevex,n,p);
EX = [zeros(n,1) EX1];
covEX = cov(EX1);
X = XS + EX;
y = (XS*b)+ u';
X_seq=ones(n,1);
for j = 1: col
C=X(:,j) - mean(X(:,j),1);
X_seq=[X_seq C];
end
X_seq(:,1:2)=[];
W = X_seq;
z = y -mean(y);
lam = (stdevex^2)/(stdevu^2);
end
......................................................................................................................................................
clc;
rng(156)
global stdevu EX covEX s XS X y n;
stdevu = 0.5;
stdevex = 0.5;
n = 100;
p = 1; %%%%%
col = 2; %%%%%
it = 500;
tmseo = 0;
tmsejls = 0;
XS = normrnd(2,1,n,p);
XS = [ones(n,1) XS];
%for l = 1:it
[EX,X,y,W,z,lam,covEX] = GEN(XS,stdevu,stdevex,n,p,col);
options = optimset('GradObj','on');
s = [1];
binit = [1;1];
[bdls,fval] = fminunc(@dls1,binit,options);
%bdls = [b0dls;b1dls];
...............................................................................................................................................................................
โดยจะเอาค่าต่างๆแทนในฟังก์ชัน dls1 เพื่อที่จะหาค่าของตัวประมาณ b0 b1 ที่ทำให้ f มีค่าสูงสุด แต่พอผมรันโปรแกรม ได้ error ดังนี้ครับ
ผมแก้มาจะ 1 สัปดาห์แล้ว ไม่ออกสักที ช่วยผมด้วยครับ ใครมีคำแนะนำอะไรบอกผมได้เลยครับ ตอนนี้เครียดมาก ไม่เคยเรียนเขียนโปรแกรมมาก่อนเลย
ขอบคุณล่วงหน้าครับ