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

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

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

2021-04-18 120
Калькулятор для решения нелинейных уравнений 0.00 из 5.00 0 оценок
Заказать работу

Для решения нескольких видов нелинейных уравнений с использованием пользовательской формы можно предложить калькулятор, показанный на рис. 2.5.1.

Рис. 2.5.1

 

Выбор уравнения осуществляется с помощью объектов OptionButton, при этом в объектах TextBox, обеспечивающих ввод пределов промежутка, в котором обнаружен корень, [ a; b ] и точность, устанавливается некоторый вариант, который при необходимости можно изменить.

Так при выборе нелинейного уравнения вида 2 x 3 + x 2 -3 x +2=0

устанавливается вариант расчета при a = -1,8, b = -1,7 и e = 0,00001.

При выборе других уравнений, устанавливаются варианты пределов промежутков и точности в соответствии с модулями, программно поддерживающими объекты OptionButton 2 и OptionButton 3.

 

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

Sub Horda2(a As Double, b As Double, delta As Double, c1 As Double, jj As Integer)

Dim c2 As Double

Fa = nel_ur_2(a)

Fb = nel_ur_2(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_2(a)

Fb = nel_ur_2(b)

Fc = nel_ur_2(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 позволяют, в отличие от грамматических конструкций Function, в списке формальных параметров задать несколько выходных параметров. Вызов грамматических конструкций Sub осуществляется с помощью специального оператора вызова Call.

Поэтому в объекте CommandButton 1 пользовательской формы UserForm2 Решение нелинейных уравнений следует написать следующий программный модуль:

Private Sub CommandButton1_Click()

Dim a As Double, Ad As Double, Bd As Double

Dim An As Double, Ah As Double, bh As Double

Dim b As Double

Dim e As Double

Dim c As Double

Dim x1 As Double

Dim cc As Double

Dim i As Integer

Dim it As Integer

Dim jt As Integer

a = CDbl(TextBox1)

b = CDbl(TextBox2)

e = CDbl(TextBox3)

Ad = a: Bd = b

An = a:

Ah = a: bh = b

If OptionButton1 Then

Call PolDel(Ad, Bd, e, c, i)

TextBox4 = Format(c, "0.0000000000")

TextBox5 = i

Call Newton(An, e, x1, it)

TextBox8 = Format(x1, "0.0000000000")

TextBox9 = it

Call Horda(Ah, bh, e, cc, jt)

TextBox10 = Format(cc, "0.0000000000")

TextBox11 = jt

End If

If OptionButton2 Then

Call PolDel2(Ad, Bd, e, c, i)

TextBox4 = Format(c, "0.0000000000")

TextBox5 = i

Call Newton2(An, e, x1, it)

TextBox8 = Format(x1, "0.0000000000")

TextBox9 = it

Call Horda2(Ah, bh, e, cc, jt)

TextBox10 = Format(cc, "0.0000000000")

TextBox11 = jt

End If

End Sub

Некоторые комментарии к программе:

 

– фрагмент программы

Ad = a: Bd = b

An = a:

Ah = a: bh = b

обеспечивает запоминание начальных значений промежутка, в котором обнаружен корень [ a; b ], так при вычислениях в первой, по порядку, вызванной процедуре PolDel эти параметры принимают изменённые значения и при вызове в следующей, по порядку, процедуре Newton количество итераций определяется неправильно.

Использование пользовательской формы позволяет изменять значения промежутка, в котором обнаружен корень [ a; b ] и точность вычислений.

Так при точности e = 0,000000001 можно убедиться в полном совпадении значений корней вычисленных методом дихотомии, методом Ньютона и методом хорд и представленных в формате до десяти знаков после десятичной точки

- 1,7148059167.

При этом видно, что выбранная точность при использовании метода дихотомии достигается за 27 итераций, при использовании метода Ньютона – за 4 итерации и при использовании метода хорд – за 5 итераций.

 

Рис. 2.5.2

Аналогичные результаты, с точки зрения совпадения значений корней, можно получить и для второго уравнения 3 sin (x /2) = 2 x 2 – 4, рис. 2.5.3.

Рис. 2.5.3

С той только разницей, что совпадение значений корней до десятого разряда после десятичной точки произошло при точности e = 0, 0000000001 и число итераций, обеспечивших это совпадение, при методе дихотомии – 30, при методе Ньютона – 10, а при методе хорд – 3.


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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.031 с.