跪求数学程序高手通过编写VB程序实现下列问题:编程实现牛顿法对方程f(x)=xe^x-1=0在Xo=0.5附近的实根,要求精确到小数点后5位
- 提问者网友:趣果有间
- 2021-07-19 20:46
- 五星知识达人网友:山河有幸埋战骨
- 2021-07-19 21:05
牛顿迭代法果然是个有技术含量的算法,要根据原方程和方程在某一点的导数值作切线,然后通过与交点不断的逼近方程的根,花了老半天功夫帮你实现了,把如下代码复制到窗体中运行即可,求的根为0.56714329
Function Fx(ByVal x As Double) As Double
Fx = x * Exp(x) - 1
End Function
Function DiffFx(ByVal x As Double) As Double
DiffFx = Exp(x) + x * Exp(x)
End Function
Function RTNEWT(X1, X2, XACC) '牛顿迭代算法实现,X1,X2为根所在的区间,XACC为精度
JMAX = 20
RTNEWT = 0.5 * (X1 + X2)
For J = 1 To JMAX
Call BIJin(RTNEWT, f, DF)
DX = f / DF
RTNEWT = RTNEWT - DX
If (X1 - RTNEWT) * (RTNEWT - X2) < 0 Then
Print "jumped out of brackets"
Exit Function
End If
If Abs(DX) < XACC Then Exit Function
Next J
Print "RTNEWT exceeding maximum iterations."
End Function
Sub BIJin(x, FN, DF)
FN = Fx(x)
DF = DiffFx(x)
End Sub
Private Sub Form_Load()
MsgBox RTNEWT(0.2, 0.8, 0.00001)
Unload Me
End Sub
- 1楼网友:煞尾
- 2021-07-20 00:14
1、先赋初值a=0,b=1
2、设置循环 用 |a-b|<0.0005控制
循环体:
令:x=(a+b)/2
选择结构:如果SGN(x*EXP(x)-1)>0,则b=x
如果SGN(x*EXP(x)-1)<0,则a=x
如果SGN(x*EXP(x)-1)=0,退出循环
循环结束
输出结果x。
- 2楼网友:詩光轨車
- 2021-07-19 23:32
方程是不是 x*e^x=1 ?,如果是的话,那么小数点后5位的解是不足以满足这个方程的,至少得小数点后几百位,因此我们一般采取无限逼近法,下面 If (x * Exp(x) - 1) = 0 Then 的后面注释有说。要取得准确值的话,之能将步进取为更小的值,但是就目前的 Double 类型的精度来看也不足以满足等于0的要求,之能求得无限接近0的解。
Dim isStop As Boolean
Private Sub Command3_Click() Dim x As Double Command3.Enabled = False isStop = False For x = 0.567143283795563 To 0.567143296991271 Step 0.00000000000001 '要准确等于0的话,这里的步进估计需要小数点后好几百位 Label3.Caption = "(x * Exp(x) - 1)=" & Format((x * Exp(x) - 1), "0.00000000000000000000") Text1.Text = "x=" & Format(x, "0.00000000000000000000") If (x * Exp(x) - 1) = 0 Then '求无限接近0的话,这里可以改为 (x * Exp(x) - 1) < 0.00000000000001 或 abs(x * Exp(x) - 1) < 0.00000000000001,这样共有两个x解 MsgBox "x=" & x Exit For End If If isStop = True Then Exit For DoEvents Next Command3.Enabled = True End Sub
Private Sub Command4_Click() isStop = True End Sub
- 3楼网友:过活
- 2021-07-19 22:42
定义总量等于X,计算出每个人拿走的数量,相加等于X
第一个人是(x-1)/5, 剩余4(x-1)/5
第二个人是(4(x-1)/5-1)/4,剩余3(4(x-1)/5-1)/4
。。。。
一次算出其他几个人的,最后形成一元方程
就能解出了