Программа для решения уравнений методом Ньютона: улучшить код - VB
Формулировка задачи:
Имеется программа для решения уравнений методом Ньютона в VB 6.0.Только в моей проге максимальная степень 5-я которую считает,а попросили сделать,чтобы степень была не ограниченной.Сам тыркался-что-то не получается,почему-то находит ошибку если степени большие(15,20 и т.п).
И заодно чтоб при вводе степени-появлялись окна в которые нужно вводить переменные уравнения-вроде Inputbox надо использовать,но что-то не получается.Помогите плз
Листинг программы
- Dim A#(6), a1#, b1#, x#
- Dim m%, n%
- Const eps = 0.01
- Private Sub Command1_Click()
- Label4 = "Результат:"
- A(0) = Val(Text2.Text)
- A(1) = Val(Text3.Text)
- A(2) = Val(Text4.Text)
- A(3) = Val(Text5.Text)
- A(4) = Val(Text6.Text)
- A(5) = Val(Text7.Text)
- a1 = Val(Text8.Text)
- b1 = Val(Text9.Text)
- n = Val(Text1.Text)
- Label5 = n & " " & a1 & " " & f(a1): Label6 = b1 & " " & f(b1)
- 'проверяем на сходимость
- If f(a1) * f(b1) >= 0 Then
- MsgBox ("Условие не выполняется!")
- Else
- 'ищем начальную точку
- If fp2(a1) > 0 Then
- ElseIf f(a1) > 0 Then
- x = a1
- ElseIf f(b1) > 0 Then
- x = b1
- End If
- If fp2(a1) < 0 Then
- ElseIf f(a1) < 0 Then
- x = a1
- ElseIf f(b1) < 0 Then
- x = b1
- End If
- 'Метод Ньютона
- Dim x0#, x1#
- x0 = x
- Label4 = Label4 + Chr(13)
- Do
- 'вычисляем приближение
- x1 = x0 - f(x0) / fp(x0)
- Label4 = Label4 + CStr(x1) + Chr(13)
- x0 = x1
- Loop While Abs(f(x0)) > eps Or Abs(x0 - x1) > eps
- End If
- Picture1.Scale (-150, 150)-(150, -150) 'расположение системы координат и масштаб
- Picture1.Cls
- Picture1.Line (-150, 0)-(150, 0) 'Ось Х
- Picture1.Line (0, -250)-(0, 150) 'Ось Y
- For XX = -150 To 150 Step 30 'Засечки на оси Х
- Picture1.Line (XX, -5)-(XX, 5) 'размер засечек с обеих сторон оси Х
- Next
- For Y = -150 To 150 Step 50 'Засечки на Y
- Picture1.Line (-5, Y)-(5, Y)
- Next
- nn = Val(Text1.Text)
- a11 = Val(Text3.Text)
- a2 = Val(Text4.Text)
- a3 = Val(Text5.Text)
- a4 = Val(Text6.Text)
- a5 = Val(Text7.Text)
- a0 = Val(Text2.Text)
- On Error Resume Next ' Откладываем перехват ошибок.
- Mashtab = 10 ' масштаб графика
- For XX = -1.5 * (10 / Mashtab) To 1.5 * (10 / Mashtab) Step 1 / 1000 'Шаг в знач. качества
- Y = a0 + a11 * XX + a2 * XX ^ 2 + a3 * XX ^ 3 + a4 * XX ^ 4 + a5 * XX ^ 5
- Picture1.Circle (XX * Mashtab, Y * Mashtab), 1
- Next XX
- End Sub
- Function f(ByVal x As Double) As Double
- f = A(0)
- For i = 1 To n
- f = f + A(i) * x ^ i
- ' f = A(0) + A(1) * x + A(2) * x * x + A(3) * x * x * x + A(4) * x * x * x * x
- Next
- End Function
- Function fp(ByVal x As Double) As Double
- fp = 0
- For i = 1 To n
- fp = fp + i * A(i) * x ^ (i - 1)
- ' Производная fp = A(1) + 2 * A(2) * x + 3 * A(3) * x * x + 4 * A(4) * x * x * x
- Next
- End Function
- Function fp2(ByVal x As Double) As Double
- fp2 = 0
- For i = 1 To n
- fp2 = fp2 + (i - 1) * i * A(i) * x ^ (i - 2)
- ' fp2 = 2 * A(2) + 6 * A(3) * x + 12 * A(4) * x * x
- Next
- End Function
- Private Sub Text1_Change()
- n = Val(Text1.Text)
- If n < 1 Or n > 5 Then
- MsgBox " степень от 1 до 5"
- Text1.SetFocus
- End If
- End Sub
Решение задачи: «Программа для решения уравнений методом Ньютона: улучшить код»
textual
Листинг программы
- Picture1.Scale (a1 - 1, f(a1))-(b1 + 1, f(b1))
- Picture1.Cls
- Picture1.Line (a1, 0)-(b1, 0) '??? ?
- Picture1.Line (0, f(a1))-(0, f(b1)) '??? Y
- For i% = 0 To 10000
- XX = a1 + (b1 - a1) / 10000 * i
- Y = f(XX)
- Picture1.PSet (XX, Y)
- Next
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д