簡體   English   中英

如何在 matlab 中向輪廓 plot 添加約束

[英]How do I add a constraint to a contour plot in matlab

我正在做一個優化問題,我需要找到一個罐子的最小表面積,以便給我至少 400 cm^3 的液體,但受到一些尺寸限制。 我已經創建了表面積的輪廓 plot 但正如標題所說,我不知道如何添加 (pi/4) D^2 H <= 400 的約束。這是我已經擁有的代碼:

clear all;
clc;

%set constraints
%g1 and g2
D = linspace(3.5,8,100);
%g3 and g4
H = linspace(8,18,100);

%set objective function
[X,Y] = meshgrid(D,H);
f = pi*((X.*Y)+(X.^2/2));

%plot isolines
contour(X,Y,f,'Showtext','on');
xlim([0,10])
ylim([5,20])
hold on
xline(3.5) %g1
xline(8)   %g2
yline(8)   %g3
yline(18)  %g4
xlabel('Diameter [cm]')
ylabel('Height [cm]')

一種方法是在不滿足約束的目標 function 中替換 NaN。

clear all;
close all;
clc;

%set constraints
%g1 and g2
D = linspace(3.5, 8, 100);
%g3 and g4
H = linspace(8, 18, 100);

%set objective function
[X,Y] = meshgrid(D, H);
f = pi*((X.*Y)+(X.^2/2));

g = (pi/4).*X.^2.*Y;
constr = g <= 400;

f1 = f;
f1(~constr) = NaN;

lvls = 100:25:600;

figure
hold on
% Original contour
subplot(1, 2, 1);
hold on
contour(X, Y, f, lvls, 'ShowText', 'on');
xlim([0, 10])
ylim([5, 20])
xline(3.5);
xline(8);
yline(8);
yline(18);
xlabel('Diameter [cm]')
ylabel('Height [cm]')
title('Original')

% Modified
subplot(1, 2, 2)
hold on
contour(X, Y, f1, lvls, 'ShowText', 'on');
xlim([0, 10])
ylim([5, 20])
xline(3.5);
xline(8);
yline(8);
yline(18);
xlabel('Diameter [cm]')
ylabel('Height [cm]')
title('Modified')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM