Оптимизировать определенный интеграл - PullRequest
0 голосов
/ 27 мая 2018

В интеграле

Equations & Definite Integral

Я хочу оптимизировать функцию Dt, так как знаю конечный результат интеграла.У меня есть выражения для k1 и k0 в терминах k2 и N, и я бы хотел оптимизировать k2 и N.У них есть ограничения, которые должны быть между определенными значениями.У меня все это настроено в моем коде, но я просто не знаю, как сказать генетическому алогриту оптимизировать интегральную функцию?Есть что-то, чего я здесь не хватает?Интеграл обычно оценивается численно, но я пытаюсь вернуться назад, и, предполагая, что я знаю ответ, найдите входные параметры

РЕДАКТИРОВАТЬ: Хорошо, вот мой код.Я знаю, что интеграл ДОЛЖЕН сложить известное значение, и я знаю это значение, поэтому мне нужно оптимизировать переменные с помощью данного параметра.Я создал целевую функцию у = интеграл - DT.Я сохранил тета в виде символов, потому что это то, что нужно интегрировать, чтобы дать DT.

 function y = objective(k)
 % Define constants
 AU = astroConstants(2);
 mu = astroConstants(4);


 % Define start and finish parameters for the exponential sinusoid.
 r1  = AU;                 % Initial radius
 psi = pi/2;               % Final polar angle of Mars/finish transfer
 phi = pi/2;
 r2 = 1.5*AU;
 global k1 
 k1 = sqrt( ( (log(r1/r2) + sin(k(1)*(psi + 2*pi*k(2)))*tan(0)/k(1)) / (1- 
 cos(k(1)*(psi+2*pi*k(2)))) )^2 + tan(0)^2/k(1)^2 );
 k0 = r1/exp(k1*sin(phi));
 syms theta
 R = k0*exp(k1*sin(k(1)*theta + phi));
 syms theta
 theta_dot = sqrt((mu/(R^3))*1/((tan(0))^2 + k1*(k(1))^2*sin(k(1)*theta + 
 phi) + 1));
 z = 1/theta_dot;
 y = int(z, theta, 0,(psi+2*pi*k(2))) - 1.3069e08;
 global x
 x=y;
 end

, мои k ограничены, и ниже приводится функция ограничения.Я надеюсь, что то, что я сделал здесь, это скажите, что функция ДОЛЖНА = 0.

function [c,c_eq] = myconstraints(k)
global k1 x  
c = [norm(k1*(k(1)^2))-1 -norm(k1*(k(1)^2))];
c_eq =[x];
end

И, наконец, мой код GA выглядит следующим образом.Честно говоря, я играл с ним всю ночь и получал сообщения об ошибках после сообщений об ошибках - от «Функция ограничения должна возвращать реальное значение» до «Ошибка в fcnvectorizer» и «Невозможно преобразовать выражение в двойной массив» с последними двумяпосле того, как я снял ограничения.

clc; clear;
ObjFcn = @objective;
nvars = 2
LB = [0 2];
UB = [1 7];
ConsFcn = @myconstraints;
[k,fval] = ga(ObjFcn,nvars,[],[],[],[],LB,UB,ConsFcn);

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

...