计算方法程序
- 格式:doc
- 大小:205.50 KB
- 文档页数:15
扫描加二分法Private Sub Command1_Click()Dim l As Double, u As Double, h As Double, i As Double, r As Double h = Val(Text2.Text)For i = -3 To 3 - h / 2 Step hl = f(i)u = f(i + h)If l * u <= 0 Thenr = bisection(i, i + h)PrintEnd IfNext iEnd SubFunction f(x As Double) As Doublef = 4 * x ^ 3 - 8 * x ^ 2 + 2 * x + 1End FunctionFunction bisection(a As Double, b As Double) As DoubleDim e As Double, m As Doublee = Val(Text1.Text)Dom = (a + b) / 2If f(a) * f(m) <= 0 Thenb = mElsea = mEnd IfLoop Until (Abs(b - a) < e)Print mEnd FunctionPrivate Sub Command1_Click()Dim x0!, x1!, x2!, ep#, n%, k%x0 = Val(Text1.Text)x1 = Val(Text4.Text)ep = Val(Text2.Text)n = Val(Text3.Text)k = 0Dok = k + 1x2 = x1 - g(x1) * (x1 - x0) / (g(x1) - g(x0))If Abs(x1 - x2) < ep ThenLabel5.Caption = x2Exit SubElsex0 = x1x1 = x2End IfLoop Until (k = n)Label5.Caption = "迭代失败,请调整参数!" End SubPublic Function g(x)g = x ^ 3 + 2 * x ^ 2 + 10 * x - 20End FunctionPrivate Sub Command1_Click()Dim x0!, x1!, ep#, n%, k%x0 = Val(Text1.Text)ep = Val(Text2.Text)n = Val(Text3.Text)k = 0Dok = k + 1x1 = g(x0)If Abs(x0 - x1) < ep ThenLabel4.Caption = x1Exit SubElsex0 = x1End IfLoop Until (k = n)Label4.Caption = "迭代失败,请调整参数!" End SubPublic Function g(x)g = (x + 1) ^ (1 / 3)End FunctionPrivate Sub Command1_Click()Dim x0!, ep!, n%, k%, x1!x0 = Val(Text1.Text)ep = Val(Text2.Text)n = Val(Text3.Text)k = 0Dok = k + 1If (g(x0) = 0) ThenText4.Text = "wrong"Exit SubEnd Ifx1 = x0 - f(x0) / g(x0)If (Abs(x1 - x0) < ep) ThenText4.Text = Format(x1, "0.000")Exit SubEnd Ifx0 = x1Loop Until (k = n)Text4.Text = "迭代失败!"End SubFunction f(x)Dim e!e = 2.718f = x * e ^ x - 1End FunctionFunction g(x)Dim e!e = 2.718g = x + e ^ xEnd FunctionPrivate Sub Command1_Click()Dim x0!, x1!, x2!, ep#, n%, k%x0 = Val(Text1.Text)ep = Val(Text2.Text)n = Val(Text3.Text)k = 1Dok = k + 1x1 = g(x0)x2 = g(x1)x2 = x2 - (x2 - x1) ^ 2 / (x2 - 2 * x1 + x0)If Abs(x0 - x1) < ep ThenLabel4.Caption = x2Exit SubElsex0 = x2End IfLoop Until (k = n)Label4.Caption = "迭代失败,请调整参数!" End SubPublic Function g(x)g = (x + 1) ^ (1 / 3)End FunctionDim a!(), b!(), n%, i%, j%, k%Private Sub Command1_Click() Open "c:\aa.txt" For Input As #1 Input #1, nReDim a(n, n), b(n)Picture1.Print "n="; nFor i = 1 To nFor j = 1 To nInput #1, a(i, j)Picture1.Print a(i, j);Next jInput #1, b(i)Picture1.Print b(i)MsgBox "文件读入成功!", 64Close #1End SubPrivate Sub Command2_Click()Dim k%For k = 1 To nl = kD = a(k, k)For i = k + 1 To nIf Abs(a(i, k)) > Abs(D) ThenD = a(i, k)l = iEnd IfNext iIf D = 0 ThenPicture2.Print "奇异矩阵"Exit SubEnd IfIf l <> k ThenFor j = k To nt = a(l, j)a(l, j) = a(k, j)a(k, j) = tNext jt = b(k)b(k) = b(l)b(l) = tEnd IfFor j = k + 1 To na(k, j) = a(k, j) / a(k, k)Next jb(k) = b(k) / a(k, k)For i = k + 1 To nFor j = k + 1 To na(i, j) = a(i, j) - a(i, k) * a(k, j)Next jNext iFor i = k + 1 To nb(i) = b(i) - a(i, k) * b(k)Next iNext kFor i = n - 1 To 1 Step -1For j = i + 1 To ns = s + a(i, j) * b(j)Next jb(i) = b(i) - sNext iFor i = 1 To nPicture2.Print "x("; i; ")="; b(i)Next iEnd Sub高斯赛德尔迭代Private Sub Command1_Click()Dim a!(), b!(), x!(), y!(), max!, k%, n1%, ep!, n%, s!, i%, j%n = Val(Text1.Text)ReDim a(n, n), b(n), x(n), y(n)For i = 1 To nFor j = 1 To na(i, j) = InputBox("请输入系数矩阵a(" & i & "," & j & ")的值:") Next jb(i) = InputBox("请输入b(" & i & ")的值:")Next iep = Val(Text2.Text)n1 = Val(Text3.Text)k = 0For i = 1 To nx(i) = 0y(i) = 0Next iDok = k + 1For i = 1 To ns = 0For j = 1 To nIf i <> j Thens = s + a(i, j) * y(j)End IfNext jy(i) = (b(i) - s) / a(i, i)Next imax = 0For i = 1 To nIf max < Abs(x(i) - y(i)) Thenmax = Abs(x(i) - y(i))End IfNext iIf max < ep ThenFor i = 1 To nPicture1.Print "x("; i; ")="; y(i)Next iExit SubElseFor i = 1 To nx(i) = y(i)Next iEnd IfLoop Until (k = n1)Picture1.Print "迭代失败!"End Sub追赶法Dim a!(), b!(), C!(), D!(), n%, t#, s#Private Sub Command1_Click() Open "E:\ll.txt" For Input As #1 Input #1, nPicture1.Print "n="; nReDim a(n), b(n), C(n), D(n) Input #1, b(1), C(1), D(1)Picture1.Print b(1), C(1), D(1)For i = 2 To n - 1Input #1, a(i), b(i), C(i), D(i) Picture1.Print a(i), b(i), C(i), D(i) Next iInput #1, a(n), b(n), D(n)Picture1.Print a(n), b(n), D(n)MsgBox "文件读入成功!", 64 Close #1End SubPrivate Sub Command2_Click()C(1) = C(1) / b(1)D(1) = D(1) / b(1)For i = 2 To n - 1 Step 1t = b(i) - C(i - 1) * a(i)C(i) = C(i) / ts = D(i) - D(i - 1) * a(i)D(i) = s / tNext iD(n) = (D(n) - D(n - 1) * a(n)) / (b(n) - C(n - 1) * a(n)) For i = n - 1 To 1 Step -1D(i) = D(i) - (C(i) * D(i + 1))Next iFor i = 1 To nPicture2.Print "x("; i; ")="; D(i)Next iEnd Sub拉格朗日插值Private Sub Command1_Click()Dim a!, b!, x!(), y!(), t!, k%, j%, i%, n%a = Val(Text1.Text)n = Val(Text2.Text)ReDim x(n), y(n)For i = 0 To nx(i) = InputBox("请输入x(" & i & ")的值:") y(i) = InputBox("请输入y(" & i & ")的值:") Next ib = 0For k = 0 To nt = 1For j = 0 To nIf j <> k Thent = (a - x(j)) / (x(k) - x(j)) * tEnd IfNext jb = b + t * y(k)Next kText3.Text = bEnd Sub复化辛浦生算法Private Sub Command1_Click()Dim a!, b!, n%, h!, k%, s!, X!a = Val(Text1.Text)b = Val(Text2.Text)n = Val(Text3.Text)h = (b - a) / ns = f(b) - f(a)X = aFor k = 1 To nX = X + h / 2s = s + 4 * f(X)X = X + h / 2s = s + 2 * f(X)Next ks = h / 6 * sText4.Text = Format(s, "0.000000000") End SubFunction f(X)f = X ^ 2End Function三角分解法:Private Sub Command1_Click()Dim a(1 To 4, 1 To 4), b(1 To 4), l(1 To 4, 1 To 4), r(1 To 4, 1 To 4), y(1 To 4), x(1 To 4) As DoubleDim i, j, k, n, m As IntegerDim s, p, q, w As Doubles = 0p = 0q = 0w = 0n = InputBox("输入n的值")For i = 1 To nFor j = 1 To na(i, j) = InputBox("输入" & i & "," & j & "元素的值")NextNextFor i = 1 To nb(i) = InputBox("输入" & i & "元素的值")NextFor k = 1 To nFor j = k To nFor m = 1 To k - 1s = s + l(k, m) * r(m, j)Nextr(k, j) = a(k, j) - sNextFor i = k + 1 To nFor m = 1 To k - 1p = p + l(i, m) * r(m, k)Nextl(i, k) = (a(i, k) - p) / r(k, k)NextNextFor i = 1 To nFor j = 1 To i - 1p = p + l(i, j) * y(j)Nexty(i) = b(i) - pNextFor i = n To 1 Step -1For j = i + 1 To nw = w + r(i, j) * x(j)Nextx(i) = (y(i) - w) / r(i, i)NextFor i = 1 To nFor j = i To nPrint r(i, j);NextPrintNextFor i = 1 To nFor j = 1 To iPrint l(i, j);NextPrintNext iFor i = 1 To nPrint , x(i)NextEnd Sub。