找回密码
 注册
查看: 6982|回复: 1

matlab极大似然估计中方程组求解的问题

[复制链接]
发表于 2012-10-12 09:49:13 | 显示全部楼层 |阅读模式
就是我用蒙特卡洛模拟,极大似然估计来求解一个问题。。。
u = normrnd(0,1,100,1);
Y = 3*B1 + 4*X +u
syms b1 b2 s;
    f = ((2*pi*s)^(-50))*exp(-(1/(2*s))*sum((Ys-b1*B1-b2*X).*(Ys-b1*B1-b2*X)));
    f2 = log(f);
    df1 = diff(f2,b1);   %对B1,B1,SIG分别求导;
    df2 = diff(f2,b2);
    df3 = diff(f2,s);
最后是要解一个方程组:
df1和df2和df3
用[b1,b2,s]=solve('df1=0','df2=0','df3=0') (ps:fsolve用过,貌似不行)
解出来b1,b2,s都为0.。。。。
但是,要是把df1,df2,df3的方程带到solve函数里面去再解,就能得到b1=3.??,b2=4.??,s=0

关键是要是模拟一万次,不是要人工代入公式一万次么,
求问怎么解决??

为什么[b1,b2,s]=solve('df1=0','df2=0','df3=0'),不对
回复

使用道具 举报

 楼主| 发表于 2012-10-12 12:06:10 | 显示全部楼层
我把程序修改了,原来不行应该是应为,程序把df1,df2当成一个数了,应该定义成函数,但是我不会调用函数
我的主程序是:


  for i = 1:100%生成1到100的X的数;
     
     
    X(i)=i;

   end
X=X'; %转置;


  Y = [];
  x =[];
  y =[];
  X0 = ones (100,1);
  Y0 = ones (100,1);
  B1 = ones(100,1);  %生成3个矩阵,分别为xy均值矩阵,b1的矩阵做准备;
  B2 = ones(100,1);
   u = normrnd(0,1,100,1);
    Y = 3*B1 + 4*X   ;
   
   
   
    Ys=Y + u;

    aguess=[0,0,0.00000001];
    a = fsolve('start',aguess);
    b1 = a(1);
    b2 = a(2);
    s = a(3);
   
之后的function是:
function f= start(a)
b1 = a(1);
b2 = a(2);
s = a(3);

  
   f(1) =   diff(ln,b1)*(2*s);
   f(2) =   diff(ln,b2)*(2*s);
   f(3) =  diff(ln,s);
   %通过求导后可以得到df1,df2,df3的式子,再代入函数计算;
    %当一阶导为0时的数值;
   
end
function p = ln(a)
b1 = a(1);
b2 = a(2);
s = a(3);
p(1) = log(((2*pi*s)^(-50))*exp(-(1/(2*s))*sum((Ys-b1*B1-b1*X).*(Ys-b1*B1-b2*X))));
end

怎么把两个连起来算啊啊啊
{:soso_e109:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 14:59 , Processed in 0.021711 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表