有什么方法可以解决未知变量而不是使用Solve吗?

时间:2019-06-20 13:26:41

标签: matlab

我以min_x f(x,c)的形式编写代码以进行优化以解决问题。 sum(x)=1 and g(x,c)=1,其中x是向量,cx的函数,使得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,或者有任何修改代码的方法?

0 个答案:

没有答案