現在取り組んでいる JavaScript アプリで問題が発生しています。これは、ヨットの船体の静水圧データを計算するために使用されるボート設計のものです。私が抱えている問題は、相互に関連する 2 つの関数があり、両方とも特定の結果に到達する必要があることです。
明確にするために、ユーザーは設計変位を入力し、浸漬容積が設計変位と等しくなるまで船体を上下に動かします。
また、ユーザーは重心の縦方向の位置を入力し、浮力の中心 (浸漬ボリュームの重心) の縦方向の位置が重心と一致するまで船体を傾斜させます。
ただし、船体を傾けると変位が変化し、船体を上下に動かすと浮力の中心位置が変化します。
私が現在行っていること (疑似コード)
function raiseAndPitch
while a < maxIterations
if boat.volume < designVolume
move boat down
else if boat.volume > designVolume
move boat up
else
done
a++
while b < maxIterations
if boat.cg.x > designCG.x
pitch boat forward
else if boat.cg.x < designCG.x
pitch boat aft
else
done
b++
if boat.cg.x == designCG.x && boat.volume == designVolume
return data
else
raiseAndPitch
再帰の最大数を設定しています。ただし、これは、どちらか一方の非常に小さな動きが変位量または浮力の中心位置のいずれかに大きな変化をもたらす場合、両方のパラメータに対して多数の再帰を使用しても収束に失敗することがあります。
疑似コードには示されていませんが、値に収束する方法です。それが私の質問に関連しているかどうかを示してください。追加します。
両方のパラメータが同時に必要な値になることを確認できる、これを行うためのより良い方法はありますか?