| 查看: 2448 | 回復(fù): 15 | |||
| 本帖產(chǎn)生 2 個(gè) 程序強(qiáng)帖 ,點(diǎn)擊這里進(jìn)行查看 | |||
liangzidou銀蟲 (小有名氣)
|
[交流]
【求助】求助:vb編程中用牛頓迭代解三次方程為什么只得到一個(gè)根?【已完成】 已有5人參與
|
||
|
我在用vb編寫中,遇到這樣一個(gè)問題,解一個(gè)一元三次方程只得到一個(gè)根,實(shí)際上不只一個(gè)根。請各位高手幫忙找一下錯(cuò)誤。 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分別是方程的二次項(xiàng)、一次項(xiàng)系數(shù)及常數(shù)項(xiàng)。 下面這段程序就是我用迭代法就該方程的程序: 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é)果只有一個(gè)根。 |
版主 (知名作家)
|
不是還有其他解法嗎? 我查到的其他解法是先判斷delta與0的關(guān)系 ①:當(dāng)A=B=0時(shí),方程有一個(gè)三重實(shí)根; ②:當(dāng)Δ=B^2-4AC>0時(shí),方程有一個(gè)實(shí)根和一對共軛虛根; ③:當(dāng)Δ=B^2-4AC=0時(shí),方程有三個(gè)實(shí)根,其中有一個(gè)兩重根; ④:當(dāng)Δ=B^2-4AC<0時(shí),方程有三個(gè)不相等的實(shí)根。 |

版主 (知名作家)
|
我用盛金公式 寫的 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來自一個(gè)例子(見最后) 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 一建筑物的樓頂要建一個(gè)儲(chǔ)水池,按施工的設(shè)計(jì)要求,這個(gè)儲(chǔ)水池的長、寬、高之和為67.4dm,且寬=高,滿儲(chǔ)水量為9539.712(dm)^3,立體對角線為1706.92dm,問:如何施工才能達(dá)到設(shè)計(jì)要求? 解:設(shè)取長、寬、高分別為X⑴、X⑵、X⑶,依題意: X⑴+X⑵+X⑶=67.4; X⑴X⑵X⑶=9539.712; X⑴^2+X⑵^2+X⑶^2=1706.92。 解這個(gè)方程組,得一元三次方程 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ù)盛金判別法,此方程有三個(gè)實(shí)根,其中兩個(gè)相等。 應(yīng)用盛金公式③求解。 K=—33.6。 把有關(guān)值代入盛金公式③,得: X⑴=33.8(dm);X⑵=X⑶=16.8(dm)。 經(jīng)檢驗(yàn),結(jié)果正確。 因?yàn)閷?高, 所以,應(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時(shí),方程有一個(gè)三重實(shí)根" 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時(shí),方程有一個(gè)實(shí)根和一對共軛虛根" 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時(shí),方程有三個(gè)實(shí)根,其中有一個(gè)兩重根" 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時(shí),方程有三個(gè)不相等的實(shí)根" 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 |

銀蟲 (小有名氣)
金蟲 (職業(yè)作家)

| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 328求調(diào)劑 +7 | 嗯滴的基本都 2026-03-27 | 7/350 |
|
|---|---|---|---|---|
|
[考研] 291求調(diào)劑 +7 | 孅華 2026-03-22 | 7/350 |
|
|
[考研] 266求調(diào)劑 +11 | 陽陽哇塞 2026-03-27 | 12/600 |
|
|
[考研] 308求調(diào)劑 +7 | 墨墨漠 2026-03-25 | 7/350 |
|
|
[考研] 0703一志愿9,初試成績:338,四六級已過,有科研經(jīng)歷,求調(diào)劑! +3 | Zuhui0306 2026-03-25 | 3/150 |
|
|
[考研] 317求調(diào)劑 +5 | 十閑wx 2026-03-24 | 5/250 |
|
|
[考研] 303求調(diào)劑 +7 | 安憶靈 2026-03-22 | 8/400 |
|
|
[考研] 317求調(diào)劑 +7 | 蛋黃咸肉粽 2026-03-26 | 7/350 |
|
|
[考研] 321求調(diào)劑 +6 | wasdssaa 2026-03-26 | 6/300 |
|
|
[考研] 325求調(diào)劑 +3 | Aoyijiang 2026-03-23 | 3/150 |
|
|
[考研] 【雙一流院校新能源、環(huán)境材料,材料加工與模擬招收大量調(diào)劑】 +4 | Higraduate 2026-03-22 | 8/400 |
|
|
[考研] 總分322求生物學(xué)/生化與分子/生物信息學(xué)相關(guān)調(diào)劑 +5 | 星沉uu 2026-03-26 | 6/300 |
|
|
[考研] 一志愿天津大學(xué)339材料與化工求調(diào)劑 +3 | 江往賣魚 2026-03-26 | 3/150 |
|
|
[考研] 299求調(diào)劑 +4 | 15188958825 2026-03-25 | 4/200 |
|
|
[考研] 284求調(diào)劑 +15 | Zhao anqi 2026-03-22 | 15/750 |
|
|
[考研] 293求調(diào)劑 +7 | 加一一九 2026-03-24 | 7/350 |
|
|
[考研] 318求調(diào)劑 +3 | plum李子 2026-03-23 | 3/150 |
|
|
[考研] 一志愿北化315 求調(diào)劑 +3 | akrrain 2026-03-24 | 3/150 |
|
|
[考研] 344求調(diào)劑 +3 | desto 2026-03-24 | 3/150 |
|
|
[考研] 工科0856求調(diào)劑 +5 | 沐析汀汀 2026-03-21 | 5/250 |
|