Matlab中的仿射尺度法

Matlab中的仿射尺度法,matlab,optimization,linear-programming,Matlab,Optimization,Linear Programming,我试图为最大化LP问题的仿射缩放方法编写代码,我使用了以下代码 function [X,y,k] = affsm(A,x,c) xx(:,1)=x'; er=1e-5 k=1; test=1; r=2/3; theta=1 while test>er/theta D = diag(xx(:,k).^2); AD = A*D; dx = -(D-AD'*(AD*A')^(-1)*AD)*c'; theta =r*min([xx(:,k)./abs(dx);1]); xx(:,k+1)

我试图为最大化LP问题的仿射缩放方法编写代码,我使用了以下代码

function [X,y,k] = affsm(A,x,c)
xx(:,1)=x';
er=1e-5
 k=1;
test=1;
r=2/3;
theta=1
while test>er/theta
D = diag(xx(:,k).^2);
AD = A*D;
dx = -(D-AD'*(AD*A')^(-1)*AD)*c';
 theta =r*min([xx(:,k)./abs(dx);1]);
 xx(:,k+1) = xx(:,k) + theta*dx ;
 test=max([c*dx ,norm(dx)]);
 k=k+1;
end
y=xx(:,k);
X=xx;
end 
我正在努力解决以下问题

\begin{array}{c}{\max \quad Z=3 x+5 y} \\ {x+3 y \leq 60} \\ {3 x+4 y \leq 120} \\ {x \geq 10} \\ {x, y \geq 0}\end{array}
但是它给了我错误的结果我在上面的代码中做错了什么


注意:最优解必须是
$(x,y)=(12,24)$,其中$z=132$

我不知道你的函数应该做什么,因为没有解释,但是要解决这种带约束的线性方程,你可以使用它

结果:

x = 
    24
    12

注意,为了最大化解决方案,我颠倒了目标函数的符号(默认情况下,linprog将最小化解决方案)

您的问题中有一个错误:
(x,y)=(24,12)
,而不是
(12,24)
。也因此不支持乳胶。
x = 
    24
    12