I had problem while using the fmincon in for loop
22 次查看(过去 30 天)
显示 更早的评论
x0(1,1)=-4;
x0(1,2)=4;
{for i=1:3 x0(i,1)=x0(1,1)+k*(1/18); x0(1,2)=x0(1,2)+k*(1/36);
energy=@(x)(K0+K1*((sin(x(1))*cos(x(2)))^2*(sin(x(1))*sin(x(2)))^2+(sin(x(1))*sin(x(2)))^2*(cos(x(1)))^2+(cos(x(1)))^2*(sin(x(1))*cos(x(2)))^2)) ;
A=[];b=[];Aeq=[];beq=[];
[x,fval]=fmincon(energy,x0,A,b,Aeq,beq,lb,ub)
m1=sin(x(1))*cos(x(2)) m2=sin(x(1))*sin(x(2)) m3=cos(x(1)) k=k+1; end}
But i want to run for different values of starting point so that i can get the different values of x at each time,but it shows the error
Length of lower bounds is < length(x); filling in missing lower bounds with -Inf. so how to rectify this error
0 个评论
回答(1 个)
Ayush
2024-8-7,6:40
编辑:Ayush
2024-8-7,6:45
Hi Manik,
The issue seems to be in the implementation. The error Length of lower bounds is < length(x) is because the size of "x0" and vectors "lb" and "ub" are different during the subsequent iterations.
I've solved it using two methods as decribed below:
Method-1: Instead of increasing the size of vector "x0" during different iterations, it can be made constant by using "x0" as 2x2 matrix.
x0(1) =-4;
x0(2) =4;
and in the loop, the corresponding change can be made:
x0(1) = -4 + k * (1/18);
x0(2) = 4 + k * (1/36);
This works because now the size of vector "x0" remains constant and is same as size of vectors "lb" and "ub".
Method-2: Increasing the size of vectors "lb" and "ub" during different iterations. The aim is to make size of vectors "lb", "ub" same as "x0".
% Define bounds
lb(1,1) = -Inf;
lb(1,2) = -Inf;
ub(1,1) = -Inf;
ub(1,2) = Inf;
and in the loop, the corresponding change can be made:
lb(i,1) = -Inf;
lb(i,2) = -Inf;
ub(i,1) = Inf;
ub(i,2) = Inf;
This works because now the size of vectors "lb" and "ub" remains constant and is same as size of vector "x0".
For futher information, you can refer to documentation of fmincon function: https://in.mathworks.com/help/optim/ug/fmincon.html
Hope it helps!!
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!