改进工程设计的一种方法是以最小化或最大化问题的形式制定描述设计的方程。这种方法被称为设计优化。要最小化的数量的例子是能源消耗和建筑材料。要最大化的项目是有用的寿命和容量,例如可以由桥梁支撑的车辆重量。在这个项目中,我们考虑了最小化与建造水箱相关的材料成本的问题。水箱由半径为r、高度为h的圆柱形部分和半球形顶部组成。当filled时,该油箱将被建造为可容纳500m立方体。圆柱形部分的表面积为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;我想使用switch,response,但我不知道该怎么做。
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我会感激并帮助你
发布于 2013-10-06 00:25:01
在一个函数中做这件事不是一个好主意。很多简单的函数都做了一件事,每个都很好。
在我看来,大多数混乱似乎都是简短的名称,神奇的数字,依赖于运算符优先和重复。
例如h = (1500- (2.*pi*x.^3)./(3.*pi.*x.^2));,我认为..。为什么不使用同名的函数呢?相同的代码两次。
在克苏鲁的名字里,数字1500,300和400是从哪里来的?
我自己从来不热衷于单字符函数名称,但这可能是我不熟悉用数学表达问题的原因。
发布于 2013-10-06 03:03:09
这是一个典型的带有约束的最小化函数的问题。也就是说,您希望最小化Cost(R,H),同时保持Volume(R,H)不变,并且对于每个变量都有一个简单的(两个变量)等式。
为此,您可以使用matlab函数。
上面是最直接的计算方法,但也有其他方法来解决它,使用不同程度的将约束合并到解析解中。例如,你可以做一个完整的解析解,或者求解H的Volume方程,然后把它放到Cost方程(即Cost(R,H)->Cost(R))中,然后在R上最小化,等等。你使用的方法是在这个部分解析的中间地带,但对它来说有点混乱。
https://stackoverflow.com/questions/19199659
复制相似问题