优化定积分

时间:2018-05-27 12:58:08

标签: matlab optimization integration genetic-algorithm numerical-integration

在积分

Equations & Definite Integral

我想优化函数Dt,因为我知道积分的最终结果。我在k1k0方面有k2N的表达式,我希望优化k2N 。它们有约束,需要介于某些值之间。我在代码中设置了所有这些,但我不知道如何告诉遗传算法优化积分函数?我有什么东西在这里失踪吗?积分通常用数字进行评估,但我试图倒退,假设我知道答案找到输入参数

修改 好的,所以这是我的代码。我知道积分必须加起来一个已知的值,我知道这个值,所以我需要用给定的参数优化变量。我创建了一个目标函数y = integral - DT。我将theta保持为syms,因为它是集成给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被约束,以下是约束函数。我希望我在这里所做的就是告诉它函数MUST = 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"错误#34;并且"无法将表达式转换为双数组",最后两个在我删除约束后出现。

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

我已经被困在这个问题上好几个星期了,即使在搜索文献时也无处可去。

0 个答案:

没有答案