一般的结构:
[x,fval] = fgoalattain(FUN,X0,GOAL,WEIGHT,A,B,Aeq,Beq,LB,UB,NONLCON)
当然,你还可以在等式右侧添加输出量,等式左侧的输入量,如果缺则填[]。
按照你给的目标函数举例:
min (x1-1)^2+(x2-2)^2+(x3-3)^2
min x1^2+2*x2^2+3*x3^2
s.t. x1+x2+x3=6
x1,x2,x3>=0
%建立个m文件:
function y=fun(v,options)
x1=v(1);
x2=v(2);
x3=v(3);
y(1)=(x1-1)^2+(x2-2)^2+(x3-3)^2;
y(2)=x1^2+x2^2+x3^2;
%命令窗求解:
[x,fval]=fgoalattain(@fun,[1 1 1],[1 1],[1 1],[],[],[1 1 1],[6],[0 0 0],[])
%结果如下:
x =
2.0000 2.0000 2.0000
fval =
2.0000 12.0000
PS:fgoalattain函数是多目标规划早期的算法,目的是把多目标转化为单目标,给每个目标函数一个权重weight,然后去求解。
查帮助文件,或执行 help fgoalattain 命令后,有介绍。