3

改进工程设计的一种方法是以最小化或最大化问题的形式描述设计的方程。这种方法称为设计优化。要最小化的数量的例子是能源消耗和建筑材料。要最大化的项目是使用寿命和容量,例如可以由桥梁支撑的车辆重量。在这个项目中,我们考虑最小化与建造水箱相关的材料成本的问题。水箱由一个半径为r、高度为h的圆柱形部分和一个半球形顶部组成。水箱的建造应在装满时容纳 500 米立方。圆柱部分的表面积为2*pi*rh,其体积为pi*r^2。半球形顶部的表面积由 2*pi*r^2 给出,体积由 2*pi*r^3/3 给出。建造罐的圆柱形部分的成本是每平方米表面积 300 美元;半球形部分的成本是每平方米 400 美元。使用 fminbnd 函数计算导致成本最低的半径。计算相应的高度 h。

我得到了正确的答案,但它非常混乱。我创建了一堆功能。我想知道我是否可以创建一个函数?...让我们将其命名为 ONEFUN

function R = findR(x)
   h = (1500-2.*pi*x.^3)./(3.*pi.*x.^2);
   R = 2.*pi.*x.*(h) + 2.*pi.*x.^2+pi.*x.^2;

function H = findH(x)
H = (1500-2.*pi*x.^3)./(3.*pi.*x.^2);

function [Cc, Chs, Tc] = Costs(r,h) % Cc - Cost of Cylinder, Chs - Cost of Hemishpere,
%Tc - Total Cost
Cc = ((2.*pi.*r.*h) + (pi.*r.^2)).*300;
Chs = (2.*pi.*r.^2).*400;
Tc = Cc+Chc;

我想过使用开关,响应,但我不知道该怎么做。

function Anwsers
response = input('Type "find r", "find h", "costHS", "costC", "total": ','s');
response = lower(response);
switch response
case 'find r'
Radius = fminsearch(@ONEFUN, [1]);
case 'find h'
Hight = findH(r)
case 'costHS'

case 'costC'

case 'total'

otherwise
disp('You have not entered a proper choice.')
end

我将不胜感激和帮助

4

2 回答 2

1

在一个函数中执行它是一个坏主意。很多简单的功能,每个都做一件事是好的。

从我的角度来看,大多数混乱似乎是简洁的名称、神奇的数字,依赖于运算符优先级和重复。

h = (1500- (2.*pi*x.^3)./(3.*pi.*x.^2));比如,我想……你为什么不使用同名函数?两次相同的代码。

克苏鲁名字中的数字 1500、300 和 400 是从哪里来的?

我自己从来没有热衷于单字符函数名称,但这可能是我不熟悉用数学方式表达问题。

于 2013-10-05T16:25:01.003 回答
0

这是一个用约束最小化函数的典型问题。也就是说,您希望Cost(R,H)在保持Volume(R,H)固定不变的同时最小化 ,并且您对其中的每一个都有一个简单的(双变量)方程。

为此,您可以使用 matlab 函数fmincon

以上是最直接的计算方法,但还有其他方法可以使用不同程度的将约束以解析方式结合到解中来解决它。例如,您可以做一个完整的解析解,或求解 的Volume方程H,然后将其代入Cost方程(即Cost(R,H)->Cost(R)),然后最小化R等。您使用的方法在这个部分解析的中间地带内,但它有点混乱。

于 2013-10-05T19:03:09.123 回答