1 Решение нелинейных уравнений хорд
Метод хорд применяют для решения нелинейных уравнений
F(x)=0 обычно в тех случаях , когда получить выражение для
производной dF(x)/dx либо трудно, либо оно имеет громоздкий вид . В
этом случае выражение для производной в формуле (4.3)
заменяют его разностным аналогом, после чего формула (4.3)
принимает вид
Можно дать и геометрическую интерпретацию метода хорд (рис. 4.5).
Рис 4.5 Геометрическая интерпретация метода хорд для решения
нелинейного уравнения F(x)=0
Для начала решения выбираются две произвольные точки на оси x.
На нашем рисунке это точки x0 и x1. Затем через две точки (x0,F(x0))
и (x1,F(x1)) проводится хорда. Эта хорда пересекает линию y=0
в точке x2. Эта точка считается первым приближением к корню.
Далее , если |F(x2)|>eps или |(x0-x1)|>eps (eps - требуемая погрешность в
вычислении корня) , тогда точки x1 и x2 выбирают в качестве новых
стартовых точек , т.е. x0=x1, x1=x2 и вновь проводят хорду и т.д.
Критерием окончания итерационного процесса считается достаточная
близость модуля значения функции |F(x2)| к нулю , а также достаточно
близкие значения двух последовательных приближений к корню x0 и x1.
Чтобы найти, в какой точке хорда, проведенная через точки (x0,F(x0))
и (x1,F(x1)), пересекает ось x, напишем уравнение этой хорды:
y(x)=F(x1) + (F(x1)-F(x0))*(x-x1)/(x1-x0).
Решая уравнение y(x2)=0, получаем формулу (4.4).
Блок-схема программы для решения уравнения F(x)=0 методом хорд
имеет следующий вид (рис 4.6).
Figure 6. Блок-схема программы для решения нелинейного уравнения F(x)=0 методом хорд
Рис 4.6 Блок-схема программы для решения нелинейного уравнения F(x)=0 методом хорд
2 Разработка меню
Я разрабатывал меню следующим образом : щелкнул правой кнопкой мыши на форму и выбрал Menu Editor . Заполнял Menu Editor так:
После закрытия Menu Editor появляется меню (выделено)
Когда кликнем левой кнопкой мыши на «Файл» появляется выход.
Когда кликнем левой кнопкой мыши на «Решение лин. ур-я» появляются 3-и команды «Вычисление корня», «График ур-я с касательными», «График точности» .Первая команда открывает форму ,где выполняются вычисления(П.3) . Вторая команда открывает форму, где выполняется графическая визуализация данного метода(П.4). Третья команда открывает форму ,где показана зависимость точности от числа касательных(П.5).
3 Приложение
П.1.Титульный лист .При нажатии кнопки «Далее» титульный лист закрывается и открывается Форма меню.
П.2. Форма меню. При нажатии кнопки «Вычислить корни» открывается форма ,где выполняются вычисления .В случае если необходимо выйти жмем на кнопку «Выход» или кликнем на «Файл» ® «Выход».
П.3.Форма ,где выполняются вычисления . При нажатии кнопки «Вычислить» выполняются вычисления . При нажатии кнопки «График» открывается форма графической визуализации данного метода(П.4.).
П.4.График функции с хордами .
4 Коды
На форме 1
Private Sub Command1_Click()
Form2.Show
Form1.Hide
End Sub
На форме 2
Private Sub Command1_Click()
Load Form3
Form3.Show 1, Form2
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub mnuDiff_c_Click()
Load Form3
Form3.Show 1
End Sub
Private Sub mnuDiff_g_Click()
Load Form4
Form4.Show 1
End Sub
Private Sub mnuExit_Click()
End
End Sub
Private Sub mnuFileSave_Click()
Form6.Show 1
End Sub
Private Sub mnuInt_b_Click()
Load Form4
Form4.Show 1
End Sub
Private Sub mnuInt_g_Click()
Load Form5
Form5.Show 1
End Sub
На форме 3
Private Sub Command1_Click()
X0 = Val(Text1)
X1 = Val(Text2)
c = Val(Text3)
Do While Abs(X0 - X1) > c
X2 = X1 - (3 * X1 - 14 + Exp(X1) - Exp(-X1)) * (X1 - X0) / (3 * X1 - 14 + Exp(X1) - Exp(-X1) - 3 * X0 + 14 - Exp(X0) + Exp(-X0))
X0 = X1
X1 = X2
Loop
Text4.Text = X2
End Sub
Private Sub Command2_Click()
Load Form4
Form4.Show 1
End Sub
Private Sub Command4_Click()
Load Form5
Form5.Show 1
End Sub
На форме 4
Private Sub Form_Load()
Dim x As Byte
Picture1.Scale (-11, 1.1)-(11, -1.1)
MsgBox "Установите значения параметров и" _
& " щелкните в графическом окне", vbInformation, "Начало работы"
End Sub
Private Sub Picture1_Click()
For x = 0 To 10 Step 0.001
Picture1.PSet (x, 3 * x - 14 + Exp(x) - Exp(-x)), BackColor
Picture1.PSet (x, 3 - 14 + Exp(1) - Exp(-1) + (3 - 14 + Exp(1) - Exp(-1) + 14) * (x - 1)), BackColor
Picture1.PSet (x, 6 - 14 + Exp(2) - Exp(-2) + (6 - 14 + Exp(2) - Exp(-2) - 3 + 14 - Exp(1) + Exp(-1)) * (x - 2)), BackColor
Next x
Picture1.DrawWidth = 2
Picture1.Line (-21, 0)-(21, 0)
Picture1.Line (0, 11.1)-(0, -11.1)
Picture1.DrawWidth = 1
Picture1.DrawStyle = 2 'Пунктир
For x = -20 To 20 Step 0.5 'Вертикальные оси
Picture1.Line (x, -20)-(x, 20)
Next x
For x = 1 To -1.1 Step -0.05 'Горизонтальные оси
Picture1.Line (-20, x)-(20, x)
Next x
Picture1.DrawWidth = 3
For x = 0.001 To 10 Step 0.001
Picture1.PSet (x, (3 * x - 14 + Exp(x) - Exp(-x)) / 20), vbBlack
Picture1.PSet (x, (9 - 14 + Exp(3) - Exp(-3) + (9 - 14 + Exp(3) - Exp(-3) - 6 + 14 - Exp(2) + Exp(-2)) * (x - 3)) / 20), vbBlue
Picture1.PSet (x, (6 - 14 + Exp(2) - Exp(-2) + (6 - 14 + Exp(2) - Exp(-2) - 3 + 14 - Exp(1) + Exp(-1)) * (x - 2)) / 20), vbYellow
Next x
End Sub
На форме 5
Private Sub Form_Load()
Dim x As Byte
Picture1.Scale (-11, 1.1)-(11, -1.1)
MsgBox "Установите значения параметров и" _
& " щелкните в графическом окне", vbInformation, "Начало работы"
End Sub
Private Sub Picture1_Click()
For x = 1 To 2 Step 0.001
Picture1.PSet (x, 1), BackColor
Next x
Picture1.DrawWidth = 2
Picture1.Line (-11, 0)-(11, 0)
Picture1.Line (0, 1.1)-(0, -1.1)
Picture1.DrawWidth = 1
Picture1.DrawStyle = 1 'Пунктир
For x = -10 To 10 Step 1 'Вертикальные оси
Picture1.Line (x, -1)-(x, 1)
Next x
For x = 1 To -1.1 Step -0.1 'Горизонтальные оси
Picture1.Line (-10, x)-(10, x)
Next x
Picture1.DrawWidth = 4
For x = 1 To 2.6 Step 0.001
Picture1.PSet (x, 3 / 10), vbBlue
Next x
For y = 2.6 To 6 Step 0.001
Picture1.PSet (y, 1), BackColor
Next y
Picture1.DrawWidth = 1
Picture1.Line (-11, 0)-(11, 0)
Picture1.Line (0, 1.1)-(0, -1.1)
Picture1.DrawWidth = 1
Picture1.DrawStyle = 1 'Пунктир
For y = -10 To 10 Step 1 'Вертикальные оси
Picture1.Line (y, -1)-(y, 1)
Next y
For y = 1 To -1.1 Step -0.1 'Горизонтальные оси
Picture1.Line (-10, y)-(10, y)
Next y
Picture1.DrawWidth = 4
For y = 2.6 To 6 Step 0.001
Picture1.PSet (y, 4 / 10), vbBlue
Next y
For z = 6 To 10 Step 0.001
Picture1.PSet (x, 1), BackColor
Next z
Picture1.DrawWidth = 2
Picture1.Line (-11, 0)-(11, 0)
Picture1.Line (0, 1.1)-(0, -1.1)
Picture1.DrawWidth = 1
Picture1.DrawStyle = 1 'Пунктир
For z = -10 To 10 Step 1 'Вертикальные оси
Picture1.Line (x, -1)-(x, 1)
Next z
For z = 1 To -1.1 Step -0.1 'Горизонтальные оси
Picture1.Line (-10, x)-(10, x)
Next z
Picture1.DrawWidth = 4
For z = 6 To 10 Step 0.001
Picture1.PSet (z, 5 / 10), vbBlue
Next z
For q = 2.6 To 2.6 Step 0.001
Picture1.PSet (q, 1), BackColor
Next q
Picture1.DrawWidth = 2
Picture1.Line (-11, 0)-(11, 0)
Picture1.Line (0, 1.1)-(0, -1.1)
Picture1.DrawWidth = 1
Picture1.DrawStyle = 1 'Пунктир
For q = -10 To 10 Step 1 'Вертикальные оси
Picture1.Line (q, -1)-(q, 1)
Next q
For q = 1 To -1.1 Step -0.1 'Горизонтальные оси
Picture1.Line (-10, q)-(10, q)
Next q
Picture1.DrawWidth = 4
For q = 2.6 To 2.6 Step 0.001
Picture1.PSet (q, 3.3 / 10), vbBlue
Next q