SLP optimization yields "Error Z must be at least a 2x2 matrix"
조회 수: 1 (최근 30일)
이전 댓글 표시
I'm trying to estimate the coefficient of lift and drag and then find the optimal geometry of the body using the SLP method, when using meshgrid I'm getting an error saying Z must be a 2x2 matrix, any help would be appreciated.
clc;
clear all;
close all;
global FUNC_COUNT
FUNC_COUNT.count=0;
save('FUNC_COUNT.mat','FUNC_COUNT')
%% Statement of Assumed Data Conditions
L = 1600; % Lift (Kg) with engine (Based on tomohawk missile)
Fd = 0.05; % Drag Force (Newtons)
rho = 0.4135; % Air Density (kg/m^3)
U = 1372; % Velocity (Mach 4 = 1372 m/s)
%% Visualisation of the Function and Constraint
hold all;grid minor;axis equal;
S = linspace(0, 4, 100);
A = linspace(0, 4, 100);
[x, y] = meshgrid(S, A);
F = (2*L)\(rho*U^2*S);
H = x.^2 + y.^2;
G = (2*Fd)\(rho*U^2*A);
cv1 = [100 2];
a = contour(x, y, H, cv1, 'k');
clabel(a);
cv2 = [1 100];
b = contour(x, y, G, cv2, 'r');
clabel(b);
bb = contour(x, y, F, 'green');
clabel(bb);
xlabel('X-Axis');
ylabel('Y-Axis');
title('Function Contour Plot')
ax = gca;
set(ax, 'FontName', 'Times', 'Fontsize', 14, 'FontWeight', 'bold');
set(gcf, 'color', [1 1 1])
text(-0.7, 1.55, 'Equality Constraint');
text(-0.7, 0.95, 'Inequality Constraint');
text(3, 2, 'Starting Point');
%% Initial Conditions
x0 = 3;
y0 = 2;
Initialvalues = [x0; y0]; %Initial Point
Iteration = 1;
Max_Iterations = 5;
%% Linearization Process
while Iteration < Max_Iterations
[F, h, g] = FunctionSLP(x0, y0);
[fx, fy, hx, hy, gx, gy]= finitediff(x0, y0);
tempval = [x0 y0];
%% Sequential Part
x = optimvar('x');
y = optimvar('y');
prob = optimproblem('Objective', fx.*x + fy.*y + F, 'ObjectiveSense', 'min');
prob.Constraints.c1 = hx*x + hy*y + h == 0;
prob.Constraints.c2 = gx*x + gy*y + g <= 0;
problem = prob2struct(prob);
[sol] = linprog(problem);
aa = sol(1,1);
bb = sol(2,1);
x0 = aa + x0;
y0 = bb + y0;
points = [x0; y0];
xpoints = [tempval(1) points(1)];
ypoints = [tempval(2) points(2)];
plot(xpoints, ypoints, '-bd');
hold on;
fprintf(' \n')
fprintf('Iteration Number :');
fprintf(' %d\n\n', Iteration)
fprintf(' Optimum Values :');
fprintf(' %f, %f\n', x0,y0)
fprintf(' Optimum cost function value :');
fprintf(' %f\n', FunctionSLP(x0,y0))
Iteration = Iteration + 1;
end
fprintf(' \n')
fprintf(' Sequential Linear Programming Method \n')
fprintf(' \n')
fprintf(' Initial Values :');
fprintf(' %f, %f\n',Initialvalues(1),Initialvalues(2))
fprintf(' Optimum Values :');
fprintf(' %f, %f\n', x0,y0)
fprintf(' Optimum cost function value :');
fprintf(' %f\n', FunctionSLP(x0,y0))
fprintf(' Number of Iterations :');
fprintf(' %d\n', Iteration)
fprintf(' Total Function Evaluations : %d\n', FUNC_COUNT.count)
The output looks like this:
Error using contour (line 48)
Z must be at least a 2x2 matrix.
Error in SLP_Mainprog (line 24)
b = contour(x, y, G, cv2, 'r');
댓글 수: 0
채택된 답변
Yongjian Feng
2021년 11월 21일
Your X is a 100x100 matrix, Y is also a 100x100 matrix. But your G is a 1x100 vector. The error is about your G (referred as Z).
Something must be wrong, the sizes don't match.
댓글 수: 0
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!