Калькулятор для решения нелинейных уравнений


Для решения нескольких видов нелинейных уравнений с использованием пользовательской формы можно предложить калькулятор, показанный на рис. 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; просмотров: 387;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.