我以min_x f(x,c)
的形式编写代码以进行优化以解决问题。 sum(x)=1 and g(x,c)=1
,其中x
是向量,c
是x
的函数,使得c(x)
是固定的x
时的常量。实际上,g(x,c)
采用以下形式
n=5; N=1000000; idx = 1:1:n; df=4; theta=2; alpha=2.4;
central_Simulation_Points=mvtrnd(eyes(n),df,N);
x=sym('x_%d',[n,1]); syms c
g(x,c)=1./N.*sum((theta.*(alpha-1).*central_Simulation_Points*x).^2+c).^(1./(alpha-1)))==1;
Constraint_equ = solve(g(x,c), c);
Constraint_equ_handle = matlabFunction(Constraint_equ);
使用solve
是用c
来表达x
,而matlabFunction
则将符号功能更改为输入的函数句柄。然后,我定义一个目标函数obj_fun=@(x)f(x,c(x))
。优化的目标函数是
(alpha-1)/alpha*sum_{i=1}^N[(theta*(alpha-1)*V(x,Xi)+c)^(1/(alpha-1))*V(x,Xi)]+c/(theta*alpha*(1-alpha))
V(x,Xi)
是任何函数。我使用(x^{T}Xi)^2
。 Xi是central_Simulation_Points
的第i行。
当我计算时间时,Equ = 1./N.*sum((theta.*(alpha-1).*central_Simulation_Points*x).^2+c).^(1./(alpha-1)))==1;
花费了203秒的运行时间,但似乎Constraint_equ = solve(Equ, c);
从未使程序停止。我想知道是否可以使用其他方法代替
Constraint_equ = solve(Equ, c);
Constraint_equ_handle = matlabFunction(Constraint_equ);
是否有任何方法可以根据c
查找x
,或者有任何修改代码的方法?