0

私の問題を説明しようとしますが、最後にいくつかの特定の質問があります。

Matlab でターボ機械の問題を解決するのに問題があります。目標は、既知の物理的測定値と動作条件を使用してタービンの効率を計算することです。これを行うために、私は科学論文で与えられた方程式を使用しています: http://www.sciencedirect.com/science/article/pii/S0196890409003124

私の場合の問題は、効率を知るには、効率に依存する出口ガスパラメータ(温度圧力速度...)が必要なことです。私は主に EES (工学方程式ソルバー) と呼ばれるソフトウェアでこの問題を解決しました。このソフトウェアでは、方程式を任意の順序で記述でき、プログラムがそれらをグループ化して自動的に解決します。プログラムの制限により、問題を拡大することができないため、Matlab に切り替えました。

matlab では、問題を解決するために必要な 2 つの終了パラメーターを除いて、すべての方程式を解決可能な順序で関数として記述することから始めました。2 つの終了パラメーターは、関数への入力として設定されました。2 つの基本方程式 (質量保存と計算された損失) を出力として使用しました。正しい解はこれらの方程式をゼロに設定します。次に、これを fsolve で解決しようとしました。

これは実際にはうまくいかず、解決策を見つけることができませんでした。代わりに、問題のすべての方程式 (27) を matlab に与え、同様の方法でそれらを解こうとしています。これもうまくいきません。(「解が見つかりません。最後のステップが無効だったため、fsolve が停止しました」)。

方程式の中には、いくつかのロジックと if ステートメントがあります。また、さまざまな圧力と温度でのガスのパラメーターを取得するために、流体パラメーター ライブラリを com サーバーとして使用しています。これらはどちらも -inf から +inf への入力を許可しておらず、いくつかの不連続性もある可能性があります...そしてこれが私の問題の理由かもしれません。

したがって、これは典型的なプログラミングの質問ではないと思います。コード自体がどれほど役立つかはわかりません。この問題へのアプローチのアイデアがあれば、それは大いに役立ちます! ただし、いくつかの具体的な質問もあります。

  1. fsolve にパラメーターを送信して、方程式の一部が範囲外であることを伝えることはできますか? (この場合、com-server はエラー メッセージを送信しますが、それを自動的に使用する方法がわかりません。)

  2. fzero と同様に、fsolve に範囲を指定することはできますか?

  3. ゼロベクトルに設定しようとしている関数の結果ベクトルには、非常にさまざまな方程式の結果が含まれているため、値が大きく異なります。誤差許容度も方程式間で大きく異なります。これに対処するスマートな方法はありますか?値を減らすために、正確性の低い方程式の結果を割ったところです。

4

1 に答える 1

0
  1. 方程式を最小化問題として記述し、発生させたくない場合に「ソフト」罰を追加するか、制約付きの非線形最小二乗法を使用することができます。
  2. いいえ、fsolve()脇に置きます。最小化ソルバーを使用します。
  3. はい。非線形最小二乗法を使用します。
于 2017-07-22T17:54:55.863 に答える