楼主: fdw001
5397 12

[问答] fmincon函数调用问题 [推广有奖]

11
fdw001 发表于 2012-4-6 23:17:20
epoh 发表于 2012-3-26 15:23
这个程序,只是让你的数据能运行
你的模型,还存在问题
就让你自行慢慢修改.
您好,我按您所说的添加线性约束条件x(7)+x(8)<1,将您的程序修改为

load szzs.txt
a = szzs(:);
y =100*(diff(log(a)));
n=length(y);
x0 = [0,0,0,1,1,1,0,0,0.5];
lb=[-inf,-inf,-inf,0,-inf,-inf,-inf,-inf,0];
ub=[inf,inf,inf,inf,inf,inf,inf,inf,1];
  A=[0,0,0,0,0,0,1,1,0];
b=[1];                    
[x,fval] = fmincon(@(x)subfun(x,y,n),x0,[],[],[],[],lb,ub,@nonlcon)


%%%%subfun.m
function f = subfun(x,y,n)
    mu =(x(1)+x(5)*x(4))/(1-x(2)-x(3));
    m = sum((y-mu)'*(y-mu));
    deta =((x(6)/(1-x(7)-x(8)))-(2*((x(9)^2))*x(4)*(1-x(4))))*(1/(1-x(2)^2-x(3)^2));
    f = -(n/2)*log((2*pi)*deta)+((1/(2*deta))*m);
   

%nonlinear inequalities c(x)
%%%%%%%nonlcon.m
function [c,ceq]=nonlcon(x)
c(1)=x(2)^2+x(3)^2-1;
c(2)=x(7)^2+x(8)^2-1;
ceq=[];
这便解决了方差为负的问题,但是我仍然得不到结果,麻烦您帮忙看一下是什么原因?还有您说的我的模型还存在问题具体是什么方面的问题啊?我对这方面了解的很少,能不能麻烦您具体讲讲啊?非常感谢!
ceq=[];

12
epoh 发表于 2012-4-7 08:12:31
fdw001 发表于 2012-4-6 23:17
您好,我按您所说的添加线性约束条件x(7)+x(8)
呵呵,模型若不存在问题,
答案不早就就出来
模型问题,包括限制条件,初始值设定,函数..等等
我不知你的模型,无法正确回答

13
行走在阳光下 学生认证  发表于 2012-8-17 21:17:20
[x,fval] = fmincon(@(x)subfun(x,y,n),x0,[],[],[],[],lb,ub,@nonlcon)
是不是忘记把约束A、b写进去了啊?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 07:11