3

エンジニアリング設計を改善する 1 つの方法は、最小化または最大化の問題の形で設計を記述する方程式を定式化することです。このアプローチは、設計の最適化と呼ばれます。最小化すべき量の例は、エネルギー消費と建設資材です。最大化すべき項目は耐用年数と橋梁が支えられる車両重量などの容量です。このプロジェクトでは、水槽の建設に関連する材料費を最小限に抑えるという問題を検討します。水槽は、半径r、高さhの円筒部分と半球状の天板で構成されています。タンクは満タン時に 500 立方メートルを保持するように構築されます。円筒部分の表面積は 2*pi*rh で、その体積は pi*r^2 です。半球の頂点の表面積は 2*pi*r^2 で与えられ、体積は 2*pi*r^3/3 で与えられます。タンクの円筒部分の建設費用は表面積 1 平方メートルあたり 300 ドル、半球部分の建設費用は 1 平方メートルあたり 400 ドルです。関数 fminbnd を使用して、コストが最小になる半径を計算します。対応する高さ h を計算します。

私は正しい答えを得ましたが、それは非常に混沌としています。たくさんの関数を作成しました。関数を 1 つ作成できるかな... 名前を「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

私は感謝し、助けたいと思います

4

2 に答える 2

1

1つの関数でそれを行うのは悪い考えです。それぞれ1つのことを行うシンプルな機能がたくさんあるのは良いことです。

私の観点から見た混乱のほとんどは、演算子の優先順位と重複に依存する、簡潔な名前、マジック ナンバーのようです。

h = (1500- (2.*pi*x.^3)./(3.*pi.*x.^2));たとえば、私は思う...なぜ同じ名前の関数を使用しないのですか? 同じコードを 2 回。

クトゥルフの名前の1500、300、400という数字はどこから来たのですか?

私自身は一文字の関数名に熱心ではありませんでしたが、問題を数学的に表現することに慣れていないのかもしれません。

于 2013-10-05T16:25:01.003 に答える
0

これは、制約のある関数を最小化する典型的な問題です。つまり、 を固定Cost(R,H)したままを最小化し、それぞれに対して単純な (2 変数の) 方程式を作成します。Volume(R,H)

これには、matlab 関数fminconを使用できます。

上記は最も直接的な計算アプローチですが、さまざまな程度の制約を分析的にソリューションに組み込むことを使用して、それを解決する他の方法があります。たとえば、完全な分析ソリューションを実行するか、 のVolume方程式を解いHてから、これをCost方程式 (つまり、Cost(R,H)->Cost(R)) に入れ、 を最小化するRことができます。 、しかし、それは少し面倒です。

于 2013-10-05T19:03:09.123 に答える