利用單變量求解和VBA進(jìn)行批量求解 254 4
楊海從2012-05-10 00:45
樓主
十多天前,對水質(zhì)模型參數(shù)K2的率定讓筆者甚是頭疼,特別是用VB編的程序后進(jìn)行參數(shù)輸入過程,輸?shù)目啾瓢?。前幾天專門學(xué)了一些文件和驅(qū)動的東西,感覺對處理現(xiàn)存問題不夠?qū)嵱?,就琢磨著尋求簡便的方法,還真被我找到了,很簡單,現(xiàn)記下來與大家分享。
一般地,遇到非線性一元方程,我們常用二分法、不動點(diǎn)迭代法、牛頓迭代法等數(shù)值方法編程求解。然而,當(dāng)需要處理大批量,多參數(shù)的此類方程時(shí),用編程的方法求解將是十分愚笨的方法。因?yàn)閮H對數(shù)據(jù)的輸入(鍵入)或者格式(文件輸入)就會讓我們煩悶不已。那么EXCEL的單變量求解將是一個(gè)十分快捷簡便的方法?,F(xiàn)敘述方法如下:
問題,有10個(gè)方程A*X*X+B*X-30=0,其中A={1,2,3,4……,9,10};B={2,3,4,……10,11}求解個(gè)方程的一個(gè)根(因?yàn)槲覀兘?jīng)常只需要求一個(gè)合適的參數(shù),所以這里不討論該方程根的分布情況)。
解決方法: 打開EXCEL,在A列輸入?yún)?shù)A的值,在B列輸入?yún)?shù)B的值,C列作為解X得盛放列,D列作為函數(shù)值,其中的函數(shù)當(dāng)然為A*X*X+B*X-30。
各項(xiàng)輸入完畢,請打開工具/宏/錄制新宏->在填入需要的各項(xiàng)之后點(diǎn)擊確定,即可錄制新宏了。(不要著急,您并不需要熟悉VBA,僅需要一點(diǎn)點(diǎn)的編程或者英語基礎(chǔ);當(dāng)然你可以查詞典) 錄制的宏當(dāng)然需要解決這個(gè)問題了。步驟是打開工具/單變量求解->填入各項(xiàng) 其中目標(biāo)單元格為D1,目標(biāo)值0,可變單元格C1;(各項(xiàng)很容易懂) 單擊確定,這個(gè)時(shí)候第一個(gè)方程的一個(gè)解應(yīng)該在C1單元格里。 下面進(jìn)行批量求解。 按alt+F11,打開EXCEL的VBA模塊,找到錄制的宏,你可以看的一行剛才錄制的代碼如下: Sub Macro1() ' Macro1 Macro ' 宏由 微軟中國 錄制,時(shí)間: 2012/5/10 ' Range("D1").GoalSeek Goal:=0, ChangingCell:=Range("C1") End Sub 大部分需要處理這類問題的同學(xué)都基本能看明白吧(錄制宏的目的就是要我們自己弄夠明白EXCEL的內(nèi)部命令是怎么實(shí)現(xiàn)的,這種方法在學(xué)習(xí)和工作中經(jīng)常用到) 下面要對上面代碼進(jìn)行修改,已處理批量方程。 需要處理的方程有10個(gè),處理代碼如上,故而代碼如下
Sub Macro1() ' Macro1 Macro ' 宏由 微軟中國 錄制,時(shí)間: 2012/5/10 Dim i As Integer For i = 1 To 10 Range("D" & i).GoalSeek Goal:=0, ChangingCell:=Range("C" & i) Next i End Sub
點(diǎn)擊運(yùn)行,就搞定啦。 |
|