水箱材料成本的设计优化

时间:2013-10-05 15:54:50

标签: matlab math mathematical-optimization

改进工程设计的一种方法是通过最小化或最大化问题的形式制定描述设计的方程式。这种方法称为设计优化。要最小化的量的实例是能量消耗和建筑材料。要最大化的项目是有用的寿命和容量,例如桥梁可以支持的车辆重量。在这个项目中,我们考虑了最小化与建造水箱相关的材料成本的问题。水箱由半径为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

我很感激和帮助

2 个答案:

答案 0 :(得分:1)

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

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

h = (1500- (2.*pi*x.^3)./(3.*pi.*x.^2));例如,我认为...... 你为什么不使用同名的功能?相同的代码两次。

在Cthulhu的名字中,1500,300和400的数字来自哪里?

我自己从不热衷于单字符函数名称,但这可能是我对数学表达问题缺乏熟悉。

答案 1 :(得分:0)

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

为此你可以使用matlab函数 fmincon

以上是最直接的计算方法,但还有其他方法可以通过分析将约束纳入解决方案的不同程度来解决它。例如,您可以执行完整的分析解决方案,或者解析Volume的{​​{1}}等式,然后将其放入H等式(即Cost)然后只是最小化Cost(R,H)->Cost(R)等。你使用的方法是在这个部分分析的中间地带,但它有点麻烦。