我是matlab的新手,如果问题很愚蠢,我深表歉意。我正在使用该fmincon
函数来推导矩阵 (X) 的元素,该矩阵将在非负性约束下最大化以下目标函数,并且:
在哪里
在我曾经这样做的代码fmincon
中使用了,因为目标函数是非线性的:
function optim = optim(m,n)
A= ones(1,m*n);
b = 100;
z = zeros(m,n);
in = inf(m,n);
X = ones(m,n);
[x, bestval] = fmincon(@myfun2,X,A,b,[],[],z,in,[])
function f = myfun2(x)
Alpha = 5;
%kappa = 5;
zeta = 5;
beta = 0.90909;
delta = 0.4;
gamma = 0.4;
pf = 1;
pw = 1;
for i= 1:m
f=0;
sum(i)=0;
for j=1:n
sum(i) = sum(i) +((beta^(i-1))*(-1)*(zeta)*(((Alpha*pf.*((x(i,j)).^delta))-
(pw.*x(i,j)))^gamma));
end
f = f+sum(i)
end
end
end
当代码针对 5x5 矩阵 (optim(5,5)) 运行时,得到的解是 x =
1.5439 1.5439 1.5439 1.5439 1.5439
1.5439 1.5439 1.5439 1.5439 1.5439
1.5439 1.5439 1.5439 1.5439 1.5439
1.5439 1.5439 1.5439 1.5439 1.5439
3.1748 3.1748 3.1748 3.1748 3.1748
bestval =
-31.8780
但这不是全局最小值 - 正如边际条件指定的全局最小值(对于第一行):
每行以此类推。我们还将为每一列:
对于第一列,依此类推。结果矩阵不满足这些条件。我已经查看了堆栈溢出中的相关问题以及文档,但我不知道如何获得更好的结果。代码有问题吗?可以调整代码以获得更好的结果吗?
我可以将边际条件设为停止条件吗?我该如何去做。或者我可以以某种方式使用雅可比吗?任何帮助,将不胜感激。谢谢你。