当前位置:编程学习 > VB >>

二分法解方程 代码

f = (0.76 * x - 0.76 * xd - 0.388) * Exp((x - 0.884) / 0.445) + xd - 0.496
要求用二分法求上面的方程
xd是开始输入的

自己写了一个
不管怎么改变xd的值,解出结果都是x=0.7
而且太复杂了
Private Sub Form_Load()

End Sub

Function twofen(w As Double, v As Double, eps As Double)
Dim a As Double
Dim b As Double
Dim e, t As Double
a = f(w)
b = f(v)
t = (w + v) / 2
While b - a > eps
t = (w + v) / 2
e = f(t)
If e = 0 Then
twofen = (w + v) / 2
Exit Function
Else
If e * a < 0 Then
v = (w + v) / 2
Else
w = (w + v) / 2
End If
If e * a > 0 And e * b > 0 Then
MsgBox "此方程无解!", vbOKOnly + vbExclamation, ""
End If
End If
Wend
twofen = (w + v) / 2
End Function
Function f(x As Double)

f = (0.76 * x - 0.76 * xd - 0.388) * Exp((x - 0.884) / 0.445) + xd - 0.496 '你要求解的方程
End Function

Private Sub Command1_Click()
Dim f As String
Dim u As Double
u = twofen(0.4, 1, 0.0001) '0.4,1为区间范围,0.0001为精度
f = FormatNumber(u, 3, vbUseDefault, vbUseDefault, vbFalse)
MsgBox "求得其解为 x = " & f
End Sub


哪位高手来帮下忙``` --------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 始终=0.7,估计是变量作用域的问题,因为:
Function f(x As Double)

f = (0.76 * x - 0.76 * xd - 0.388) * Exp((x - 0.884) / 0.445) + xd - 0.496 '你要求解的方程
End Function

这里的xd没有定义,如果编译能通过,而xd又不是模块级变量的话,实际上xd始终=0 --------------------编程问答-------------------- 高手来顶起啊```
--------------------编程问答-------------------- 关键的几句话写错了,如下测试一下,好像方程解都是1.006,与xd无关,挺奇怪的,这是什么方程啊?

Dim xd As Double
Private Sub Form_Load()
xd = -200
End Sub

Function twofen(w As Double, v As Double, eps As Double)
Dim a As Double
Dim b As Double
Dim e, t As Double
a = f(w)
b = f(v)
t = (w + v) / 2
While Abs(b - a) > eps 'b - a > eps 改为 Abs(b - a) > eps
t = (w + v) / 2
e = f(t)
If Abs(e) < eps Then 'e=0 改为 Abs(e)<eps
twofen = (w + v) / 2
Exit Function
Else
If e * a < 0 Then
v = (w + v) / 2
Else
w = (w + v) / 2
End If
If e * a > 0 And e * b > 0 Then
MsgBox "此方程无解!", vbOKOnly + vbExclamation, ""
Exit Function '添加此句,否则当方程无解时会陷入长时间的循环中
End If
End If
Wend
twofen = (w + v) / 2
End Function
Function f(x As Double)

f = (0.76 * x - 0.76 * xd - 0.388) * Exp((x - 0.884) / 0.445) + xd - 0.496 '你要求解的方程
End Function

Private Sub Command1_Click()
Dim f As String
Dim u As Double
u = twofen(0.4, 1.5, 0.0001) '求解区间增加
f = FormatNumber(u, 3, vbUseDefault, vbUseDefault, vbFalse)
MsgBox "求得其解为 x = " & f
End Sub
--------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 找一个显示函数图形的软件,看一下解大约是多少不就知道对不对了吗? --------------------编程问答-------------------- 该回复被版主删除
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,