
设f(x)=2x^3-4x^2+3x-6,对它求导的f'(x)=6x^2-8x+3
根据牛顿迭代公式令x(k+1)=x(k)-f[x(k)]/f'[x(k)]
然后将x(0)=15代入方程
x
f(x)
f'(x)
15
-375
45
233333333
22963
170000
219826
方程的根就是219826
取得精度不同,算出来的数据可能稍有差别,如果这个数据精度不够要求,你可以按照这个方法再往下算几次就可以了
那就累加到高阶项的值小于1e-6啊,vb可以支持这个精度的。
---------------------------------------------------------
迭代的思想不是这样的吧,如果可以直接求1/3次,那还迭代什么。
它主要思想是用简单运算如加减乘除来代替复杂运算如开方。
通常用牛顿展开式,因展开式有无穷项但有些式子高阶项逐渐趋近于零,
所以高阶项<误差时,结果小于误差。
因此要判断高阶项,不是直接判断结果。
但有时收敛会很慢,那要多迭代几次。
给你一个容易理解但是很麻烦的办法吧,先估算出未知数t和k的范围,比如t∈(-100,500),k∈(-300,1000),再设两个步长,dt=0001,k=0003。再设一个阈值d=001,然后循环
for t=-100 to 500 step 0001
for k=-300 to 1000 step 0003
if a1t^3++h1 < 001
//在阈值范围内,输出t和k值
next k
next t
这个方法在步长和阈值设置合理的情况下可以求得近似解。
如果要优化,可以参考优化设计方面的书籍,像什么分支定界法之类的提高计算效率。
Dim a1, b1, c1, d1, e1, f1, g1, h1, a2, b2, c2, d2, e2, f2, g2, h2 As Double
'要给这些常数赋值
Dim t, k As Double
For t = 0 To 1 Step 0001
For k = 0 To 1 Step 0001
If Abs(a1t ^ 3 + b1 t ^ 2 + c1 t + d1 t k ^ 2 + e1 t k + f1 k ^ 2 + g1 k + h1) < 0001 And Abs(a2 k ^ 3 + b2 k ^ 2 + c2 k + d2 k t ^ 2 + e2 k t + f2 t ^ 2 + g2 t + h2) < 0001 Then
'在阈值范围内,输出t和k值
Print "t="; t
Print "k="; k
End If
Next k
Next t
从中解出S,就是S=V0t-(1/2)at^2
Private Sub Command1_Click()
dt = Val(Text1Text)
v0 = Val(Text2Text)
a = Val(Text3Text)
t = 0
Print: Print: Print: Print: Print
Print " t", " Vt", " S"
For i = 1 To 20
t = t + dt
v = v0 + a t
s = v0 t + 05 a t t
Print t, v, s
Next i
End Sub
压缩包中有源程序和可执行文件。
哪个迭代?
Private Sub Command1_Click()Dim n As Double
n = Val(Text1Text)
Dim k As Integer
k = 0
Do While n > 0
n = n \ 10
k = k + 1
Loop
MsgBox k
End Sub
Private Sub Command1_Click()
'VB编程: 用迭代法求某数a的平方根平方根的迭代公式如下:
'xn+1=(xn+a/xn)/2; 设x0=a/2;
'当迭代相邻两项差的绝对值小于10-5时,迭代结束。
Dim a As Double, Xn As Double, X As Double, Delt As Double
a = Val(Text5Text)
Xn = a / 2
Delt = 000001
X = (Xn + a / Xn) / 2
Do While Abs(X - Xn) > Delt
Xn = X
X = (Xn + a / Xn) / 2
Loop
Print X
End Sub
以上就是关于VB 牛顿迭代法解方程全部的内容,包括:VB 牛顿迭代法解方程、VB 迭代法求x=a^1/3、VB高手请指教!高分答谢!怎样用VB编程,用迭代法解二元三次方程组等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)