Matlab: найти максимальную точку для цикла

Для функции двух переменных, скажем, f (x, y) = x ^ 2 + y + b, где b:

b=raylrnd(1*sqrt(2/pi),10^6,1)  %% b is 1x1000000 vector

и при условии ограничения: 2 * x + 1<= b.

Я хочу найти максимум функции для интервала, скажем, x находится между [-10,10], а y между [-10,10] (Конечно, моя фактическая функция более полная, чем эта, мне понадобится помощь настроить фреймворк, чтобы я мог применить его к своей реальной функции).

Есть ли способ реализовать это?


Попытка:

Шаг 1: Написать файл objfun.m.

function f = objfun(x,b)
f = x(1)^2+(2)+b;

Шаг 2: Напишите файл confuneq.m для нелинейных ограничений.

function [c, ceq] = confuneq(x)
% Nonlinear inequality constraints
c = 2*x(1)+1-b;

Шаг 3: вызвать ограниченную процедуру оптимизации.

for i=1:1:length(b)
bi=b(i);
x0 = [-1,1];            % Make a starting guess at the solution
options = optimoptions(@fmincon,'Algorithm','sqp');
[x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],... 
   @confuneq,options);

0 ответов

Другие вопросы по тегам