全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1773 2
2014-04-17
下面这个程序运行后报错,错误显示没有定义y,不知道怎么回事,请各位高手指教!谢谢了!
图中是我要遍的程序,图中的函数 f 和程序里面的 f 不是一回事,图中f=sum_{i=1-n} {log(1+lambda^T*(x_i - mu))}



IMG_20140417_164314.jpg

经验证,下面程序中函数 f 没有错

function [F1,F2,F3]=f(x,mu,lambda)w1=x-mu;
w2=1+lambda.*(x-mu);
F1=log(w2);
F2=w1./w2;
F3=-w1.*w1./w2;
x=normrnd(0,1,10,1);
lambda=0; k=0; gamma=1; mu=0;
while (abs(y)<10^-8)
    [F1,F2,F3]=f(x,mu,lambda);
    y1=sum(F1);
    y2=sum(F2);
    y3=sum(F3);
    y=inv(y3)*y2;
    delta=gamma*y;
while (f(lambda-delta)<f(lambda))
    gamma=0.5*gamma;
end
k=k+1;
lambda=lambda-delta;
gamma=1/sqrt(k+1);
end
  lambda



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-4-18 15:26:37
还没运行呢,光是看你的程序就找了两个错误和两个可能的问题

错误:
1. 按照你这种迭代求近似解,明显应该是abs(y) >= 10^-8作为判定条件。while 大于10的-8次方,才继续迭代,不是么?
2. 原来你定义的f,是三input三output的,你倒数第八行代码那里,f只有一个输入,当然有问题

问题:
1. 把function和程序主体分开定义会比较好一点,混一块容易编译不过(个人感觉)。y没定义我觉得你可以给它来一发初始值,比如说y = 1试试
2. y3那里矩阵可能会奇异,所以也会导致y没有定义。(BTW,论坛有代码功能,如下图)

复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-4-21 09:33:48
非常感谢,已更正
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群