В интеграле

Я хочу оптимизировать функцию 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);
Я застрял на этой проблеме в течение нескольких недель и нигде не добился, даже с поиском в литературе.