Калькулятор для решения нелинейных уравнений
Для решения нескольких видов нелинейных уравнений с использованием пользовательской формы можно предложить калькулятор, показанный на рис. 2.5.1.
Рис. 2.5.1
Выбор уравнения осуществляется с помощью объектов OptionButton, при этом в объектах TextBox, обеспечивающих ввод пределов промежутка, в котором обнаружен корень, [a;b] и точность, устанавливается некоторый вариант, который при необходимости можно изменить.
Так при выборе нелинейного уравнения вида 2x3+x2-3x+2=0
устанавливается вариант расчета при a = -1,8, b = -1,7 и e = 0,00001.
При выборе других уравнений, устанавливаются варианты пределов промежутков и точности в соответствии с модулями, программно поддерживающими объекты OptionButton2иOptionButton3.
Private Sub OptionButton1_Click()
TextBox1 = "-1,8"
TextBox2 = "-1,7"
TextBox3 = "0,00001"
End Sub
Private Sub OptionButton2_Click()
TextBox1 = "-1,2"
TextBox2 = "-1,1"
TextBox3 = "0,00001"
End Sub
Так как в модулях VBA, использовавшихся для вычисления значений корней применялись грамматические конструкции Function, не позволявшие определить количество итераций, то для определения количества итераций необходимо применить грамматические конструкции Sub.
Sub PolDel(a As Double, b As Double, e As Double, c As Double, ii As Integer)
ii = 0
10 c = (a + b) / 2
ii = ii + 1
If nel_ur_1(a) * nel_ur_1(c) < 0 Then b = c Else a = c
If Abs(a - b) >= e Then GoTo 10
End Sub
Sub Newton(a As Double, e As Double, x1 As Double, j As Integer)
Dim x As Double
x = a
x1 = x - nel_ur_1(x) / nel_ur_1D(x)
j = 1
While Abs(x - x1) > e
x = x1
x1 = x - nel_ur_1(x) / nel_ur_1D(x)
j = j + 1
Wend
End Sub
Sub Horda(a As Double, b As Double, delta As Double, c1 As Double, jj As Integer)
Dim c2 As Double
Fa = nel_ur_1(a)
Fb = nel_ur_1(b)
If Fa * Fb > 0 Then
MsgBox ("Интервал [a, b] выбран неправильно")
Exit Sub
End If
c1 = a - (b - a) / (Fb - Fa) * Fa
jj = 0
While Abs(c1 - c2) >= delta
Fa = nel_ur_1(a)
Fb = nel_ur_1(b)
Fc = nel_ur_1(c1)
If Fc * Fa > 0 Then b = c1: Fb = Fc Else a = c1: Fa = Fc
c2 = c1
c1 = a - (b - a) / (Fb - Fa) * Fa
jj = jj + 1
Wend
End Sub
Sub PolDel2(a As Double, b As Double, e As Double, c As Double, ii As Integer)
ii = 0
10 c = (a + b) / 2
ii = ii + 1
If nel_ur_2(a) * nel_ur_2(c) < 0 Then b = c Else a = c
If Abs(a - b) >= e Then GoTo 10
End Sub
Sub Newton2(a As Double, e As Double, x1 As Double, j As Integer)
Dim x As Double
x = a
x1 = x - nel_ur_2(x) / nel_ur_2D(x)
j = 1
While Abs(x - x1) > e
x = x1
x1 = x - nel_ur_2(x) / nel_ur_2D(x)
j = j + 1
Wend
End Sub
Дата добавления: 2020-07-18; просмотров: 447;