VB 牛顿迭代法、二分法和弦截法解一元三次方程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB 牛顿迭代法、二分法和弦截法解一元三次方程

Option Explicit

Private a As Double, b As Double, c As Double, d As Double, xx1 As Double, xx2 As Double, e As Double

Private Sub Form_Load()

a = 1 'a * x ^ 3 +

b * x ^ 2 +

c * x +

d = 0

b = 2

c = 3

d = -4

xx1 = 0 '二分法区间或弦截法区间或牛顿迭代法初值

xx2 = 1 '二分法区间或弦截法区间

e = 0.00001 '精度

End Sub

Private Sub Command1_Click() '牛顿迭代法

Dim x As Double, y As Double, dy As Double, ydy As Double, i As Long

x = xx1

For i = 0 To 1000

y = f(a, b, c, d, x)

dy = f1(a, b, c, x)

If Abs(y) < e Then

Print "牛顿迭代法x = " & x

Print "迭代次数i = " & i

Print

Exit Sub

ElseIf dy = 0 Then

Print "失败,请另设初值试试"

Print

Exit Sub

End If

ydy = y / dy

x = x - ydy

Next

Print "失败!"

Print

End Sub

Private Sub Command2_Click() '二分法

Dim x1 As Double, x2 As Double, x0 As Double, y1 As Double, y2 As Double, y0 As Double, i As Long

x1 = xx1

x2 = xx2

y1 = f(a, b, c, d, x1)

y2 = f(a, b, c, d, x2)

If (y1 > 0 And y2 > 0) Or (y1 < 0 And y2 < 0) Then

Print "y1=" & y1 & " y2=" & y2 & ",二分法里y1与y2不能同号,请重新设置x1和x2"

ElseIf y1 = 0 Then

Print "二分法x = " & x1

Print "迭代次数i = " & i

ElseIf y2 = 0 Then

Print "二分法x = " & x2

Print "迭代次数i = " & i

Else

For i = 1 To 1000

x0 = (x1 + x2) / 2

'Debug.Print x0

y0 = f(a, b, c, d, x0)

If y0 = 0 Then

Print "二分法x = " & x0

Print "迭代次数i = " & i

Print

Exit Sub

ElseIf Abs(x1 - x2) < e Then

Print "二分法x = " & x0

Print "迭代次数i = " & i

Print

Exit Sub

ElseIf (y1 < 0 And y0 < 0) Or (y1 > 0 And y0 > 0) Then

x1 = x0

Else

x2 = x0

End If

Next

Print "失败!"

End If

Print

End Sub

Private Sub Command3_Click() '弦截法

Dim x1 As Double, x2 As Double, x0 As Double, y1 As Double, y2 As Double, y0 As Double, i As Long

x1 = xx1

x2 = xx2

y1 = f(a, b, c, d, x1)

y2 = f(a, b, c, d, x2)

If (y1 > 0 And y2 > 0) Or (y1 < 0 And y2 < 0) Then

Print "y1=" & y1 & " y2=" & y2 & ",二分法里y1与y2不能同号,请重新设置x1和x2"

ElseIf y1 = 0 Then

Print "弦截法x = " & x1

Print "迭代次数i = " & i

ElseIf y2 = 0 Then

Print "弦截法x = " & x2

Print "迭代次数i = " & i

Else

For i = 1 To 1000

x0 = x1 - (x2 - x1) / (y2 - y1) * y1

'Debug.Print x0

y0 = f(a, b, c, d, x0)

If y0 = 0 Then

Print "弦截法x = " & x0

Print "迭代次数i = " & i

Print

Exit Sub

ElseIf Abs(x1 - x2) < e Then

Print "弦截法x = " & x0

Print "迭代次数i = " & i

Print

Exit Sub

ElseIf (y1 < 0 And y0 < 0) Or (y1 > 0 And y0 > 0) Then

x1 = x0

Else

相关文档
最新文档