[英]Can I use a built-in Excel solver to solve this equation somehow? If not, how would you go about it?
首先,讓我向你們展示一下這個等式。
在該等式中,S,V和t是已知常數。 CFL也是眾所周知的。 我們有D的初始值,我們不知道k是什么。
我需要做的是找到D和k的理想值,這將使計算的CFL和測量的CFL的殘差平方最小化。 使用殘差平方只是我檢查它們是否是最佳可能值的一種方法,但如果還有另一種方法可以使用其他方法,那就沒問題了。
殘差平方僅是計算和測量的CFL之間的差值的絕對值,然后是平方。 殘差平方越低,我們的擬合越好。 所以我需要將k和D都放入等式中得到的最小殘差平方。 這將導致計算出的CFL,然后我可以將其與測量的CFL進行比較,從而允許我計算殘差平方。
我對如何做到這一點的第一個想法,因為我不確定如何使用Excel方程,是為了修正D的值(因為我們有一個初始起始值來工作)然后通過不同的k值變化,放置將它們放入等式中以找到計算出的CFL,並將其與測量結果進行比較,找出殘差平方,直到找到一個殘差平方最小的結果。 然后我將k固定在理想值,然后改變D直到我找到那里最小的殘差。 然后我再次修復D,然后回到變化的k。 我的想法是,我可以像往常一樣來回反復,直到D和k都在他們先前值的某個百分比之內。 我認為它會與這種方法達到某種平衡
然而,數字只是變得瘋狂,最終要么變為零,要么變為無窮大。 所以我需要重新修改我的過程。 這是你們進來的地方!
你會如何為D和k找到最理想的值,這會導致計算出的CFL最接近測量值,假設你給出的每個變量的值都高於k? 請記住,最初給出的D值只是起作用的起點,並不是最理想的值。
我一直在研究這個項目很長一段時間(至少一個月),我只是陷入了地獄和絕望的境地。 我希望你們能幫助我。
以下是一些可以使用的初始值:
S = 19.634954
V = 12.271846
D(初始)= 0.01016482
CFL(測量)= 0.401
t = 4
k =?
感謝您提出的任何想法。
你不能解決1公式系統中的兩個未知變量。 但是,如果我按照給定的D那么你有1個未知/ 1公式系統。
我只是簡單地使用1列作為k的猜測(對於我的列B
我使用另一列來表示計算的CFL
和猜測的k(對於我的列C
)。我有另一列具有1或-1(對於我的列D
)。最后,我有一個列,表示我希望增加猜測的絕對值。
我使用給定的變量值命名單元格,以便更容易使用它們。
我開始猜測k=1
。 這是我的第一行中的公式,即7。
B7 = .1
C7 =(s/v)*(d/B7)^0.5*(ERF(((B7*t)^0.5))+((B7*t)/PI())^0.5*EXP(-1*B7*t))
D7或E7中沒有任何內容
在第8行:B8 = B7+E8+D8
C8 = =(s/v)*(d/B8)^0.5*(ERF(((B8*t)^0.5))+((B8*t)/PI())^0.5*EXP(-1*B8*t))
D8 = 1
E8 = .01
在第9行中,B和C列只是向下復制,但D和E如下:D9 = =IF(C9>cfl,1,-1)
E9 = =IF(D9=D8,E8,E8/10)
一旦你獲得了這些,你可以復制你想要的許多行。
這樣做的是每次CFL開關的殘余符號表示增量符號也會翻轉。 此外,增量的絕對值也將縮小10倍,以提供更高的精度。
這絕不是解決問題的最佳方法,但這是一種方式。
正如Dean所說,你的系統有兩個未知數,在一般情況下有無數個解(不同的(D,k)
)。 通過固定D
, CFL
是k
的連續函數,因此,您應該能夠找到一個k
,它給出您測量的CFL
(在一定精度內)。 對於這個問題(即,找到給定CFL
k
),您可以使用“ 目標搜索”工具。 方法如下:
1)問題設置:使用變量名稱命名輸入其值的單元格(轉到公式 - >定義名稱 - >定義名稱,並將每個變量的名稱提供給單元格)。 然后在這些單元格中輸入參數值(給k
任意值,例如= 1
),並在單元格CFL
輸入公式,如: =(S/V)*SQRT(D/k)*(ERF(SQRT(k*t))+SQRT(k*t/PI())*EXP(-k*t))
再次注意, S,V,D,k
和t
被定義為命名范圍。
2)問題解決方案:轉到數據 - >數據工具 - >假設分析 - >目標搜索並輸入以下參數:設置單元格: CFL
到值: 0.401
通過更改單元格: k
這得到k=0.151759378
,其導致CFL = 0.401261265054823
。
我希望這有幫助?
編輯 :使用VBA查找一些解決方案對:
1)將測量的CFL
值放在一個單元格中(我選擇H2
)。
2)替換命名范圍k
, D
和CFL
。 我使用了rngK
, rngD
和rngCFL
,每個從第2行到第20行。
3)使用公式=INDEX(rngD,ROW()-ROW($C$2))+0.01
,用步驟(我用0.01)填寫rngD
。 rngD
的第一個條目位於單元格C2
,其值為0.01016482
。 公式將向下復制到范圍中的所有其他單元格。
4)用一些初始值(我取=1
)填寫rngK
。
5)用公式=(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))
填寫rngCFL
范圍=(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)最后,在sub中使用此代碼:
Dim iCnt As Long
For iCnt = 1 To Range("rngk").Count
Range("rngCFL")(iCnt).GoalSeek goal:=Range("H2"), changingCell:=Range("rngK")(iCnt)
Next iCnt
以上產生19對(D,k)
,其給出測量的CFL
值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.