簡體   English   中英

我可以使用內置的Excel解算器以某種方式解決這個等式嗎? 如果沒有,你會怎么做?

[英]Can I use a built-in Excel solver to solve this equation somehow? If not, how would you go about it?

首先,讓我向你們展示一下這個等式。

CFL方程

在該等式中,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) )。 通過固定DCFLk的連續函數,因此,您應該能夠找到一個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,kt被定義為命名范圍。

2)問題解決方案:轉到數據 - >數據工具 - >假設分析 - >目標搜索並輸入以下參數:設置單元格: CFL到值: 0.401通過更改單元格: k

這得到k=0.151759378 ,其導致CFL = 0.401261265054823

在此輸入圖像描述

我希望這有幫助?

編輯 :使用VBA查找一些解決方案對:

1)將測量的CFL值放在一個單元格中(我選擇H2 )。

2)替換命名范圍kDCFL 我使用了rngKrngDrngCFL ,每個從第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM