| 查看: 2447 | 回復(fù): 15 | |||
| 本帖產(chǎn)生 2 個 程序強帖 ,點擊這里進(jìn)行查看 | |||
liangzidou銀蟲 (小有名氣)
|
[交流]
【求助】求助:vb編程中用牛頓迭代解三次方程為什么只得到一個根?【已完成】 已有5人參與
|
||
|
我在用vb編寫中,遇到這樣一個問題,解一個一元三次方程只得到一個根,實際上不只一個根。請各位高手幫忙找一下錯誤。 Private Sub Command1_Click() Dim r, p, t, w, pc, tc, m, a, b, ca, cb, xl, xm, xn As Double r = 8.314 p = 101.325 t = 301 pc = 3384 tc = 460.4 w = 0.227 m = 0.37464 + 1.5422 * w + 0.2699 * w ^ 2 tr = t / tc a = 0.45723553 * r ^ 2 * tc ^ 2 * (1 + m * (1 - Sqr(tr))) ^ 2 / pc b = 0.077796074 * r * tc / pc Print "a="; a, "b="; b ca = a * p / (r ^ 2 * t ^ 2) cb = b * p / (r * t) xl = cb - 1 xm = -3 * cb ^ 2 - 2 * cb + ca xn = cb ^ 3 + cb ^ 2 - ca * cb Print "A="; ca, "B="; cb Print "xl="; xl, "xm="; xm Print "xn="; xn Dim f, z As Single z = 0.01 Do z = z1 f = z ^ 3 + xl * z ^ 2 + xm * z + xn f1 = 3 * z ^ 2 + 2 * xl * z + xm z1 = z - f / f1 Loop While Abs(z - z1) >= 0.0005 Print z1 End Sub [ Last edited by liangzidou on 2010-5-15 at 22:22 ] |
銀蟲 (小有名氣)
|
方程就是f = z ^ 3 + xl * z ^ 2 + xm * z + xn=0 其中xl,xm,xn分別是方程的二次項、一次項系數(shù)及常數(shù)項。 下面這段程序就是我用迭代法就該方程的程序: Dim f, z As Single z = 0.01 Do z = z1 f = z ^ 3 + xl * z ^ 2 + xm * z + xn f1 = 3 * z ^ 2 + 2 * xl * z + xm z1 = z - f / f1 Loop While Abs(z - z1) >= 0.0005 Print z1 最后得到的結(jié)果只有一個根。 |
版主 (知名作家)
|
不是還有其他解法嗎? 我查到的其他解法是先判斷delta與0的關(guān)系 ①:當(dāng)A=B=0時,方程有一個三重實根; ②:當(dāng)Δ=B^2-4AC>0時,方程有一個實根和一對共軛虛根; ③:當(dāng)Δ=B^2-4AC=0時,方程有三個實根,其中有一個兩重根; ④:當(dāng)Δ=B^2-4AC<0時,方程有三個不相等的實根。 |

版主 (知名作家)
|
我用盛金公式 寫的 Private Sub Command1_Click() Dim a, b, c, d, aa, bb, cc, delta, y1, y2, k, theta, t, x, x1, x2, x3, tt, tt1, xx2, xx3,s 'az^3+bz^2+cz+d=0,a、b、c、d來自一個例子(見最后) a = 1 b = -70.5 c = 1533.54 d = -10082.44 aa = Round((b ^ 2 - 3 * a * c), 4) bb = Round((b * c - 9 * a * d), 4) cc = Round((c * c - 3 * b * d), 4) delta = Round((bb * bb - 4 * aa * cc), 4) If (aa = 0) And (bb = 0) Then x = -b / (3 * a) Label1.Caption = "X1=X2=X3=:" & x Else Select Case delta Case Is > 0 y1 = aa * b + 3 * a * (-bb + Sqr(delta)) / 2 If y1 > 0 Then y1 = y1 ^ (1 / 3) Else y1 = y1 * (-1) y1 = y1 ^ (1 / 3) * (-1) End If y2 = aa * b + 3 * a * (-bb - Sqr(delta)) / 2 If y2 > 0 Then y2 = y2 ^ (1 / 3) Else y2 = y2 * (-1) y2 = y2 ^ (1 / 3) * (-1) End If tt = y1 + y2 tt1 = 3 ^ (1 / 3) * (y1 - y2) / (6 * a) s = (-2 * b + tt) / (6 * a) x1 = (-b - tt) / (3 * a) x2 = s & "+" & tt1 & "i" x3 = s & "-" & tt1 & "i" Label1.Caption = "X1=" & x1 Label2.Caption = "X2=" & x2 Label3.Caption = "X3=" & x3 Case Is = 0 k = bb / aa x1 = -b / a + k x = Str(-k / 2) Label1.Caption = "X1=" & x1 Label2.Caption = "X2=" & x Label3.Caption = "X3=" & x Case Is < 0 t = (2 * aa * b - 3 * a * bb) / (2 * aa ^ (3 / 2)) theta = Atn(-t / Sqr(-t * t + 1)) + 2 * Atn(1) theta = theta / 3 tt = aa ^ (1 / 2) * Cos(theta) tt1 = 3 ^ (1 / 2) * Sin(theta) x1 = (-b - 2 * tt) / (3 * a) xx2 = (-b + tt + tt1) / (3 * a) xx3 = (-b + tt - tt1) / (3 * a) Label1.Caption = "X1=" & x1 Label2.Caption = "X2=" & xx2 Label3.Caption = "X3=" & xx3 End Select End If End Sub 一建筑物的樓頂要建一個儲水池,按施工的設(shè)計要求,這個儲水池的長、寬、高之和為67.4dm,且寬=高,滿儲水量為9539.712(dm)^3,立體對角線為1706.92dm,問:如何施工才能達(dá)到設(shè)計要求? 解:設(shè)取長、寬、高分別為X⑴、X⑵、X⑶,依題意: X⑴+X⑵+X⑶=67.4; X⑴X⑵X⑶=9539.712; X⑴^2+X⑵^2+X⑶^2=1706.92。 解這個方程組,得一元三次方程 X^3-67.4X^2+1417.92X-9539.712=0 a=1,b=-67.4,c=1417.92,d=-9539.712。 A=289;B=-9710.4;C=81567.36, Δ=0。 根據(jù)盛金判別法,此方程有三個實根,其中兩個相等。 應(yīng)用盛金公式③求解。 K=—33.6。 把有關(guān)值代入盛金公式③,得: X⑴=33.8(dm);X⑵=X⑶=16.8(dm)。 經(jīng)檢驗,結(jié)果正確。 因為寬=高, 所以,應(yīng)取長為33.8dm;寬=高=16.8dm來進(jìn)行施工。 [ Last edited by jjdg on 2010-4-20 at 14:20 ] |

版主 (知名作家)

銀蟲 (小有名氣)
版主 (知名作家)

版主 (知名作家)
|
代碼如下: Dim res1 Private Sub Command1_Click() Dim a, b, c, d, aa, bb, cc, delta, y1, y2, k, theta, t, x, x1, x2, x3, tt, tt1, xx2, xx3 'az^3+bz^2+cz+d=0 a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) d = Val(Text4.Text) aa = Round((b ^ 2 - 3 * a * c), 4) bb = Round((b * c - 9 * a * d), 4) cc = Round((c * c - 3 * b * d), 4) delta = Round((bb * bb - 4 * aa * cc), 4) If (aa = 0) And (bb = 0) Then Label6.Caption = "當(dāng)A=B=0時,方程有一個三重實根" x = -b / (3 * a) Label7.Caption = "X1=X2=X3=:" & x Label8.Caption = "" Label9.Caption = "" Else Select Case delta Case Is > 0 y1 = aa * b + 3 * a * (-bb + Sqr(delta)) / 2 If y1 > 0 Then y1 = y1 ^ (1 / 3) Else y1 = y1 * (-1) y1 = y1 ^ (1 / 3) * (-1) End If y2 = aa * b + 3 * a * (-bb - Sqr(delta)) / 2 If y2 > 0 Then y2 = y2 ^ (1 / 3) Else y2 = y2 * (-1) y2 = y2 ^ (1 / 3) * (-1) End If tt = y1 + y2 tt1 = 3 ^ (1 / 3) * (y1 - y2) / (6 * a) s = (-2 * b + tt) / (6 * a) x1 = (-b - tt) / (3 * a) x2 = s & "+" & tt1 & "i" x3 = s & "-" & tt1 & "i" Label6.Caption = "當(dāng)Δ=B^2-4AC>0時,方程有一個實根和一對共軛虛根" Label7.Caption = "X1= " & x1 Label8.Caption = "X2=" & x2 Label9.Caption = "X3=" & x3 Case Is = 0 k = bb / aa x1 = -b / a + k x = Str(-k / 2) Label6.Caption = "當(dāng)Δ=B^2-4AC=0時,方程有三個實根,其中有一個兩重根" Label7.Caption = "X1= " & x1 Label8.Caption = "X2=" & x Label9.Caption = "X3=" & x Case Is < 0 t = (2 * aa * b - 3 * a * bb) / (2 * aa ^ (3 / 2)) theta = Atn(-t / Sqr(-t * t + 1)) + 2 * Atn(1) theta = theta / 3 tt = aa ^ (1 / 2) * Cos(theta) tt1 = 3 ^ (1 / 2) * Sin(theta) x1 = (-b - 2 * tt) / (3 * a) xx2 = (-b + tt + tt1) / (3 * a) xx3 = (-b + tt - tt1) / (3 * a) Label6.Caption = "當(dāng)Δ=B^2-4AC<0時,方程有三個不相等的實根" Label7.Caption = "X1= " & x1 Label8.Caption = "X2=" & xx2 Label9.Caption = "X3=" & xx3 End Select End If res1 = Label6.Caption + vbCrLf + Label7.Caption + vbCrLf + Label8.Caption + vbCrLf + Label9.Caption End Sub Private Sub Command2_Click() Clipboard.Clear Clipboard.SetText (res1) End Sub Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub Private Sub Text2_GotFocus() Text2.SelStart = 0 Text2.SelLength = Len(Text2) End Sub Private Sub Text3_GotFocus() Text3.SelStart = 0 Text3.SelLength = Len(Text3) End Sub Private Sub Text4_GotFocus() Text4.SelStart = 0 Text4.SelLength = Len(Text4) End Sub |

銀蟲 (小有名氣)

| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 275求調(diào)劑 +10 | jjjjjjjjjjl 2026-03-27 | 10/500 |
|
|---|---|---|---|---|
|
[考研] 285求調(diào)劑 +4 | AZMK 2026-03-27 | 7/350 |
|
|
[考研] 289求調(diào)劑 +7 | 新時代材料 2026-03-27 | 7/350 |
|
|
[考研] 266分求材料化工冶金礦業(yè)等專業(yè)的調(diào)劑 +4 | 哇呼哼呼哼 2026-03-26 | 4/200 |
|
|
[考研] 一志愿南師大0703化學(xué) 275求調(diào)劑 +4 | Ripcord上岸 2026-03-27 | 4/200 |
|
|
[考博] 26申博 +3 | 加油沖! 2026-03-26 | 3/150 |
|
|
[考研] 22408 359分調(diào)劑 +3 | Qshers 2026-03-27 | 3/150 |
|
|
[考研] 333求調(diào)劑 +3 | question挽風(fēng) 2026-03-23 | 3/150 |
|
|
[考研] 0703化學(xué)/290求調(diào)劑/本科經(jīng)歷豐富/工科也可 +7 | 丹青奶蓋 2026-03-26 | 8/400 |
|
|
[考研] 336材料求調(diào)劑 +7 | 陳瀅瑩 2026-03-26 | 9/450 |
|
|
[考研] 294分080500材料科學(xué)與工程求調(diào)劑 +4 | 柳溪邊 2026-03-26 | 4/200 |
|
|
[考研] 求調(diào)劑 +8 | Auroracx 2026-03-22 | 8/400 |
|
|
[考研] 機械學(xué)碩310分,數(shù)一英一,一志愿211本科雙非找調(diào)劑信息 +3 | @357 2026-03-25 | 3/150 |
|
|
[考研] 一志愿河工大 081700 276求調(diào)劑 +4 | 地球繞著太陽轉(zhuǎn) 2026-03-23 | 4/200 |
|
|
[考研] 291 求調(diào)劑 +7 | 化工2026屆畢業(yè)?/a> 2026-03-21 | 8/400 |
|
|
[考研] 求b區(qū)院校調(diào)劑 +4 | 周56 2026-03-24 | 5/250 |
|
|
[考研]
|
黃粱一夢千年 2026-03-24 | 3/150 |
|
|
[考研] 300求調(diào)劑,材料科學(xué)英一數(shù)二 +5 | leaflight 2026-03-24 | 5/250 |
|
|
[考博] 26申博自薦 +3 | whh869393 2026-03-24 | 3/150 |
|
|
[考研] 材料學(xué)碩301分求調(diào)劑 +7 | Liyouyumairs 2026-03-21 | 7/350 |
|