Ограничения неравенства в системе уравнений с fmincon (Matlab) - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно решить систему из 44 уравнений с 44 неизвестными (x) следующего вида

(- 1 / (1 - x (t))) + (phi (t) * (1 / T) * Σ_ {h = 45} ^ {60} β ^ {ht})) = 0

где phi_t принимает значение 0 для t <= 25 и значение 1 везде, а где T = phi (1) x (1) + phi (2) x (2) + ... + phi (44) x (44). </p>

У меня есть два типа ограничений. Во-первых, все х должны быть между 0,1 и 0,5, а Т должен быть ниже 0,9.

РЕДАКТИРОВАТЬ: Следующие ссылки представляют собой картинки с полной проблемой и связанной системой уравнений, которые представляют решение, переполнение стека не позволяет мне публиковать картинки. Задача максимизации и система уравнений . Ограничение в основном означает, что x (t) \ in [0,1, 0,5] для всех t и phi (25) x (25) + phi (26) x (26) ... + phi (43) x (43) + фи (44) х (44) <= 0,9 </p>

Я использую fmincon от Matlab, и решение, которое оно возвращает, удовлетворяет ограничивающему месту на τ, , но возвращает результат для T, который значительно превышает значение 0,9 , которое предполагается получить как максимум.

Я использую следующий Основной файл:

clear all
clc

% Solve restricted problem

global beta phi w C R D
C = 25;
R = 40;
D = 55;
beta = 0.99;
phi = [0,1];
w = ones(1,R-1);

phiB = phi(1)*ones(1,R-1);
for i=C:R-1
    phiB(i) = phi(2);
end

lb = 0.1*ones(1,R-1); % Lower bound constraint
ub = 0.5*ones(1,R-1); % Lower bound constraint
rng default % reproducible initial point
x0 = 0.01*ones(R-1,1);
opts = optimoptions(@fmincon,'Algorithm','interior-point','Display','off');
sol = fmincon(@(x)0,x0,phiB,0.9,[],[],lb,ub,@fminconstr,opts)

Где функция fmincon представляет максимизацию константы и, следовательно, единственное, что должно быть выполнено, - это ограничения равенства и неравенства. Вызывает функцию fminconstr , вида

function [c,ceq] = fminconstr(x)

    c = []; % nonlinear inequality
    ceq = fbnd(x); % the fsolve objective is fmincon constraints

end

где ограничение - система уравнений, определяемая функцией fbnd

function F = fbnd(x)

    global R C D
    global beta
    global phi
    global w

    phiB = phi(1)*ones(1,R-1);
    for i=C:R-1
         phiB(i) = phi(2);
     end

    T =  phiB * x;

    F = NaN(1,R-1);
    for i=1:C
        betaM = beta*ones(1,D-R);
        for j = 1:D-R
            betaM(j) = beta^(R+j-i-1);
        end
        F(i) = ((-1/(w(i)-x(i))) + phi(1)*(1/T)*sum(betaM));            
    end
    for i=C-1:R-1
        betaM = beta*ones(1,D-R);
        for j = 1:D-R
            betaM(j) = beta^(R+j-i-1);
        end
        F(i) = ((-1/(w(i)-x(i))) + sum(phi(2)*betaM'*(1/T)));        
    end

end

Программа возвращает значения для х в диапазоне от 0,1 до 0,5, поэтому эти ограничения работают. Но при вычислении T, как описано в задаче (в нотации fmincon я бы понял, что это ограничение Ax <= b), я получаю значения для T около 4,6, что намного выше значения 0,9, определенного ограничением. </p>

Я также попытался определить это ограничение как c (x) <= 0, изменив код как </p>

 sol = fmincon(@(x)0,x0,[],[],[],[],lb,ub,@fminconstr2,opts)

где fminconstr2 сейчас

function [c,ceq] = fminconstr2(x)

    global phi
    global R 
    global C

    c = fbnd2(x); % nonlinear inequality
    ceq = fbnd(x); % the fsolve objective is fmincon constraints

end

и fbnd2 is

function T = fbnd2(x)

    global R C
    global phi

    phiB = phi(1)*ones(1,R-1);
    for i=C:R-1
        phiB(i) = phi(2);
    end

    T =  phiB * x - 0.9;

end

и получите тот же результат с Т около 4,6.

Я хочу решить ту же систему уравнений, но мне нужно получить значение T, которое находится в указанном мною ограничении.

1 Ответ

0 голосов
/ 11 мая 2019

enter image description here

Ваше ограничение равенства логически неверно.Если вы установите ceq = [], вы получите решение, которое удовлетворяет только ограничениям lb, ub и T <= 0,9 </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...