四次方程求根是算法问题,和用vb还是vc没关系 简单的二分法是指先确定一个范围(x,y),在这个范围内,f(x)*f(y)<0,然后取z=(x+y)/2, 再用z替换掉x或y ( if f(x)*f(z)>0 then x=z else y=z ),然后递归 缺点是一次只能找一个,范围也要先给定,不过一般的四次方程没有公式解,只能这样了
模块中: 二分法求方程根 Function twofen(a As Double, b As Double, eps As Double) Dim c As Double Dim d As Double Dim e As Double While b - a > eps c = f(a) d = f(b) e = f((a + b) / 2) If e = 0 Then twofen = (a + b) / 2 Exit Function Else If e * c < 0 Then b = (a + b) / 2 Else a = (a + b) / 2 End If If e * c > 0 And e * d > 0 Then MsgBox "此方程无解!", vbOKOnly + vbExclamation, "" End If End If Wend twofen = (a + b) / 2 End Function Function f(x As Double)
f = x ^ 3 + 2 * x ^ 2 + 10 * x - 20 '你要求解的方程 End Function Sub main() Dim u As Double u = twofen(1, 2, 0.0001) '1,2为区间范围,0.0001为精度 MsgBox "用二分法求方程 x ^3+2*x^2+10*x-20 = 0的根,求得其解为 x = " & u End Sub
简单的二分法是指先确定一个范围(x,y),在这个范围内,f(x)*f(y)<0,然后取z=(x+y)/2,
再用z替换掉x或y ( if f(x)*f(z)>0 then x=z else y=z ),然后递归
缺点是一次只能找一个,范围也要先给定,不过一般的四次方程没有公式解,只能这样了
二分法求方程根
Function twofen(a As Double, b As Double, eps As Double)
Dim c As Double
Dim d As Double
Dim e As Double
While b - a > eps
c = f(a)
d = f(b)
e = f((a + b) / 2)
If e = 0 Then
twofen = (a + b) / 2
Exit Function
Else
If e * c < 0 Then
b = (a + b) / 2
Else
a = (a + b) / 2
End If
If e * c > 0 And e * d > 0 Then
MsgBox "此方程无解!", vbOKOnly + vbExclamation, ""
End If
End If
Wend
twofen = (a + b) / 2
End Function
Function f(x As Double)
f = x ^ 3 + 2 * x ^ 2 + 10 * x - 20 '你要求解的方程
End Function
Sub main()
Dim u As Double
u = twofen(1, 2, 0.0001) '1,2为区间范围,0.0001为精度
MsgBox "用二分法求方程 x ^3+2*x^2+10*x-20 = 0的根,求得其解为 x = " & u
End Sub