0

まず、問題の方程式をお見せしましょう。

CFL方程式

この式で、S、V、および t は既知の定数です。CFLも知られています。D の初期値はありますが、k が何であるかはわかりません。

私がする必要があるのは、計算された CFL と測定された CFL の残差の 2 乗を最小にする D と k の両方の理想的な値を見つけることです。残差の二乗を使用することは、それらが可能な限り最良の値であるかどうかを確認するための単なる方法ですが、他の方法を使用する別の方法があれば問題ありません。

残差の 2 乗は、計算された CFL と測定された CFL の差の絶対値であり、2 乗されます。残差の二乗が低いほど、適合度が高くなります。したがって、k と D の両方を方程式に入れることで得られる最小の残差二乗が必要です。その結果、計算された CFL が得られ、これを測定された CFL と比較して、残差の 2 乗を計算できます。

これを行う方法についての私の最初のアイデアは、Excel の数式の使用方法がわからないため、D の値を修正し (作業の初期開始値があるため)、k のさまざまな値を変化させることでした。それらを式に代入して計算された CFL を見つけ、それを測定値と比較して残差の二乗を見つけ、最小の残差の二乗が得られるものを見つけます。次に、k をその理想値に固定し、最小の残差が見つかるまで D を変化させます。次に、D を再度固定し、k を変更する方法に戻ります。私の考えは、D と k の両方が以前の値の特定のパーセンテージ内に収まるまで、このように前後に跳ね続けることができるというものでした。この方法である程度の平衡に達すると思いました

ただし、数値は狂ってしまい、最終的にはゼロになるか、無限大になります。そのため、プロセスをやり直す必要があります。あなたたちが来るところです!

k 以外のすべての変数の値が与えられていると仮定すると、D と k の両方の最も理想的な値を見つけて、測定値に最も近い計算された CFL を見つける方法は? 最初に与えられた D の値は、単に作業の開始点であり、最も理想的な値ではないことを忘れないでください。

私はこのプログラムに長い間 (少なくとも 1 か月は) 取り組んできました。皆さんが私を助けてくれることを願っていました。

使用する初期値は次のとおりです。

S = 19.634954

V = 12.271846

D (初期) = 0.01016482

CFL (測定値) = 0.401

t = 4

k=?

アイデアをお寄せいただきありがとうございます。

4

2 に答える 2

1

ディーンが言ったように、あなたのシステムには 2 つの未知数があり、一般的に無限の数の解 ( の異なるペア(D,k)) があります。を固定することによりDCFLは の連続関数であり、そのため、測定した を (ある程度の精度で) 与えるkを見つけることができるはずです。この問題 (つまり、与えられたを見つけること) には、ゴール シークツールを使用できます。方法は次のとおりです。kCFLkCFL

1) 問題の設定: 変数の名前を使用して、値を入力するセルに名前を付けます ([数式] --> [定義済みの名前] --> [名前の定義] に移動し、各変数の名前をセルに付けます)。次に、これらのセルにパラメータの値を入力し (kたとえば、任意の値を指定)、次のよう = 1に数式をセルに入力します。 と は名前付き範囲として定義されていること に注意してください。CFL=(S/V)*SQRT(D/k)*(ERF(SQRT(k*t))+SQRT(k*t/PI())*EXP(-k*t))S,V,D,kt

CFL 2) 問題の解決策: [データ] --> [データ ツール] --> [What-If 分析] --> [ ゴール シーク] に移動し、次のパラメーターを入力します0.401k

これによりk=0.151759378、 が得られましたCFL = 0.401261265054823

ここに画像の説明を入力

これが役立つことを願っていますか?

編集:VBAを使用していくつかのソリューションペアを見つける:

1) 測定CFL値をセルに入れます (私は を選びましたH2)。

k2) 名前付き範囲、Dおよび を置き換えますCFLrngKrngDおよび をrngCFL、それぞれ 2 行目から 20 行目まで使用しました。

rngD3)数式を使用して、ステップ (私は 0.01 を取りました) を記入し=INDEX(rngD,ROW()-ROW($C$2))+0.01ます。の最初のエントリrngDはセルC2にあり、値は です0.01016482。数式は、範囲内の他のすべてのセルにコピーされます。

4)rngKいくつかの初期値を入力します (私は を取りました=1)。

rngCFL5)数式で範囲を埋め=(S/V)*SQRT(INDEX(rngD,ROW()-ROW($G$1))/INDEX(rngK,ROW()-ROW($G$1)))*(ERF(SQRT(INDEX(rngK,ROW()-ROW($G$1))*t))+SQRT(INDEX(rngK,ROW()-ROW($G$1))*t/PI())*EXP(-INDEX(rngK,ROW()-ROW($G$1))*t))ます。ROW()関数と関数を使用して、必要な要素をINDEX() 参照します。Range

6) 最後に、このコードをサブで使用します。

Dim iCnt As Long
For iCnt = 1 To Range("rngk").Count
    Range("rngCFL")(iCnt).GoalSeek goal:=Range("H2"), changingCell:=Range("rngK")(iCnt)
Next iCnt

上記は(D,k)、測定値を与える 19 のペアを生成しCFLます。

于 2013-05-29T01:00:05.220 に答える