大哥大姐们,帮我看看下面这个程序吧~输入m,x后,只有一个未知数n,为什么会出现无法调用啊 ,我用的是牛顿迭代法,帮我改改吧Dim n0, n1, fn0, f1n0 As Singlea11 = 0.026949: a21 = -0.000009958: a31 = -0.0040529: a41 = 0.00077344: b11 = 7.72211: b21 = 0.393864: c11 = -0.176416: c21 = 2.30417: c31 = -8.28598: d11 = 4.09249: d21 = -0.089058: d31 = 0.023875: m01 = 5.0699: n01 = 3: hg1 = 60.9347: hf1 = 21.7697: sg1 = 13.442: sf1 = 5.71697: a12 = 0.0318219: a22 = -0.000050416: a32 = -0.0071294: a42 = 0.0026517: b12 = 6.18881: b22 = 1.26706: c12 = -0.203312: c22 = 1.8395: c32 = -4.69069: d12 = 3.82918: d22 = 0.02369: d32 = 0.04495: m02 = 3.2515: n02 = 2.141: hg2 = 26.6392: hf2 = 5.20916: sg2 = 8.29281: sf2 = 1.70201: f1 = 25.5078: f2 = 0.4935: f3 = -0.0115994: f4 = -165.353: f5 = -2.57531: f6 = 256.593: f7 = 3.25854: f8 = -149.857: f9 = 1.60532: f10 = 0.284681: f11 = -0.0053865: f12 = -0.784621: f13 = -0.775995: f14 = 0.37872: f15 = 0.0225936: f16 = 8.00572m = Val(Text1.Text)x = Val(Text2.Text)n0 = 1: n1 = n0Grg1 = hg1 - m * sg1 + (d11 - d21) * (m - m01) + 0.5 * (d21 - d31) * (m ^ 2 - m01 ^ 2) + d31 * (m ^ 3 - m01 ^ 3) / 3 - d11 * (Log(m) - Log(m01)) + m * Log(n0 / n01) + c11 * m * (n0 - n01) + c21 * (n0 - n01) + c31 * (n0 / m + m * n01 / m01 ^ 2 - 2 * n01 / m01)Grg2 = hg2 - m * sg2 + (d12 - d22) * (m - m02) + 0.5 * (d22 - d32) * (m ^ 2 - m02 ^ 2) + d32 * (m ^ 3 - m02 ^ 3) / 3 - d12 * (Log(m) - Log(m02)) + m * Log(n0 / n02) + c12 * m * (n0 - n02) + c22 * (n0 - n02) + c32 * (n0 / m + m * n02 / m02 ^ 2 - 2 * n02 / m02)Gre = (f1 + f2 * n0 + f3 * n0 ^ 2 + (f4 + f5 * n0) / m + (f6 + f7 * m) / m ^ 2 + f8 / m ^ 3 + (f9 + f10 * n0 + f11 * n0 ^ 2 + (f12 + f13 * n0) / m) * (2 * x - 1) + (f14 + f15 * n0 + f16 / m) * (2 * x - 1) ^ 2) * x * (1 - x)Grf1 = hf1 - m * sf1 + (m * b11 - b21) * (m - m01) + 0.5 * b21 * m * (m ^ 2 - m01 ^ 2) - b11 * (Log(m) - Log(m01)) + a11 * (n0 - n01) + 0.5 * a21 * (n0 ^ 2 - n01 ^ 2) + a31 * m * (n0 - n01) + a41 * m ^ 2 * (n0 - n01)Grf2 = hf2 - m * sf2 + (m * b12 - b22) * (m - m02) + 0.5 * b22 * m * (m ^ 2 - m02 ^ 2) - b12 * (Log(m) - Log(m02)) + a12 * (n0 - n02) + 0.5 * a22 * (n0 ^ 2 - n02 ^ 2) + a32 * m * (n0 - n02) + a42 * m ^ 2 * (n0 - n02)Grexn = (1 - 2 * x) * (f2 + 2 * f3 * n0 + f5 / m) + (-6 * x ^ 2 + 6 * x - 1) * (f10 + 2 * f11 * n0 + f13 / m) + f15 * (-16 * x ^ 3 + 24 * x ^ 2 - 10 * x + 1)Grex = (f1 + f2 * n0 + f3 * n0 ^ 2 + (f4 + f5 * n0) / m + (f6 + f7 * m) / m ^ 2 + f8 / m ^ 3) * (1 - 2 * x) + (f9 + f10 * n0 + f11 * n0 ^ 2 + (f12 + f13 * n0) / m) * (-6 * x ^ 2 + 6 * x - 1) + (f14 + f15 * n0 + f16 / m) * (-16 * x ^ 3 + 24 * x ^ 2 - 10 * x + 1)Gren = x * (1 - x) * (f2 + 2 * f3 * n0 + f5 / m + (2 * x - 1) * (f10 + 2 * f11 * n0 + f13 / m) + (2 * x - 1) ^ 2 * f15)Grg1n = m / n0 + c11 * m + c21 + c31 / mGrg2n = m / n0 + c12 * m + c22 + c32 / mGrf1n = a11 + a21 * n0 + a31 * m + a41 * m ^ 2Grf2n = a12 + a22 * n0 + a32 * m + a42 * m ^ 2 Don0 = n1fn0 = Exp((Grf1 + m * Log(1 - x) + Gre - x * Grex - Grg1) / m) + Exp((Grf2 + m * Log(x) + Gre + (1 - x) * Grex - Grg2) / m) - 1f1n0 = Exp((Grf1 + m * Log(1 - x) + Gre - x * Grex - Grg1) / m) * (Grf1n + Gren - x * Grexn - Grg1n) / m + Exp((Grf2 + m * Log(x) + Gre + (1 - x) * Grex - Grg2) / m) * (Grf2n + Gren + (1 - x) * Grexn - Grg2n) / mn1 = n0 - fn0 / f1n0Loop While Abs(n1 - n0) > 0.0001Print n1 End Sub输入m,x后,只有一个未知数n,为什么会出现无法调用啊 ,我用的是牛顿迭代法,帮我改改吧

解决方案 »

  1.   

    别的不说,你的loop就没有写完整。下面是一个典型的牛顿法解方程的例子:
    Private Sub Command3_Click()
       Dim x1 As Single, x2 As Single, y1 As Single, y2 As Single
        Dim dX As Single, dY As Single
        x1 = 1
        x2 = 1.1
        Dim x As Single, y As Single
        Dim i As Integer
        Do While i < 20
            y = x2 - NT(x2) * (x2 - x1) / (NT(x2) - NT(x1))
            If Abs(y - x2) > 0.001 Then
                x1 = x2
                x2 = y
            Else
                Exit Do
            End If
            i = i + 1
        Loop
        Debug.Print y, i
    End Sub
    Private Function NT(ByVal x As Single) As Single
        Dim y As Single
        y = x ^ 3 + 2 * x ^ 2 - 17
        NT = y
    End Function
      

  2.   

    哎,这些东西还是用MATLAB吧,或者两者结合。