没用过MATLAB,但是语言是相通的,修改一下即可。呵呵,还是vb简单
以下是
VB代码
Sub p1()
'牛顿迭代法
n = 0
xx = 2
x = 4 '设定初值
x1 = x - func2_1(x) / func2_1_1(x)
If Abs(x1) < xx Then
delt = Abs(x1 - x)
Else
delt = Abs((x1 - x) / x1)
End If
Do While (delt > 0.000001 or Abs(func2_1(x)) > 0.000001)
n = n + 1
x = x1
x1 = x - func2_1(x) / func2_1_1(x)
If (Abs(x1) < xx) Then
delt = Abs(x1 - x)
Debug.Print x1, delt, "1"
Else
delt = Abs((x1 - x) / x1)
Debug.Print x1, delt, "2"
End If
If func2_1(x1) = 0 Then
Exit Do
End If
Loop
Debug.Print "牛顿迭代法结果", x1, "迭代次数" & n
End Sub
Private Function func2_1(ByVal x As Double) As Double
'原方程
func2_1 =x ^ 2 - x - 1
End Function
Private Function func2_1_1(ByVal x As Double) As Double
'原方程的求导后
func2_1_1 = 2 * x - 1
If func2_1_1 = 0 Then func2_1_1 = 0.00000001 '避免因为以0做除数而溢出
End Function