很复杂的计算公式如何实现
a=(k0+k1*p)/(p*p) ,b=p*e的幂(a+a*a) ,其中k0、k1、b为已知数。 麻烦问下用迭代法求出p的代码如何实现啊?
Private Sub Command1_Click() '牛顿迭代法是个高效的算法,他利用函数点的切线(函数倒数)不断逼近实际值 '求平方根的公式为x=(x+a/x)/2,其中a即为要求平方根的数 '同样求2的平方根,牛顿迭代法只需循环5次,而二分迭代法却要47次,可见牛顿迭代的效率 Dim c As Long, a As Double, x As Double If Val(Text1) = 0 Then Exit Sub d = 0.00000000000001 '设置精度 a = Val(Text1) '取出要开平方的数 x = a '初始值设置 c = 0 Do c = c + 1 x = (x + a / x) / 2 Loop Until Abs(a - x ^ 2) < d or c>100 '直到误差小于规定的误差即停止循环 Text2 = x '输出结果 Label3.Caption = "牛顿迭代法所用次数为" & c End Sub Private Sub Command2_Click() '二分迭代法求平方根,所谓二分就是区间距离的平分 '比如求2的平方根,第一次赋值j为2,j1为0,j-j1=2,平分后为1,因此j调整为2-1=1 '第二次因为区间变成了1到2之间,所以平分即为(2-1)/2=0.5,由于1的平方小于2,因此至此j=1+0.5=1.5 '第三次区间变成了1到1.5之间,平分值为(1.5-1)/2=0.25,由于上次计算的1.5平方大于2,因此这次调整为1.5-0.25=1.25 '第四次区间变成了1.25到1.5之间,平分值为0.125,上次1.25的平方小于2,这次j调整为1.25+0.125=1.375 '第五次区间为1.375到1.25,平分为0.0625,由于1.375平凡小于2,就调整为1.375+0.0625=1.4375 '第六次区间为1.4375到1.375,平分为0.03125,上次1.4375平方大于2,就调整为1.4375-0.03125=1.40625 '如此不断调整区间的平分数,并根据上次误差是大于0还是小于0来加减平分数,逐渐逼近实际数值 Dim c As Long, i As Double, j As Double, j1 As Double, d As Double, k As Double, f As Integer If Val(Text1) = 0 Then Exit Sub d = 0.00000000000001 '设置精度 i = Val(Text1) '取出要开平方的数 j = i j1 = 0 'j和j1是第一次二分的区间 f = -1 '第一次给的数肯定是大于目标数的,必定是减去二分数 c = 0 '计数器清零 Do c = c + 1 '记录迭代次数 k = Abs(j - j1) / 2 '变量j和j1是确定二分的区间,以此计算二分调整值 j1 = j j = j + k * f f = 1 '默认为下次调整为加上二分值 If i - j ^ 2 < 0 Then f = -1 '如果j的平方大于实际值则下次调整为减去二分值 Loop Until Abs(i - j ^ 2) < d Or k < d '直到误差或二分调整值小于规定的误差即停止循环 Text2 = j '输出结果 Label3.Caption = "二分法迭代次数为" & c End Sub