МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
З В І Т
до лабораторної роботи №1
з курсу: «Комп'ютерні методи дослідження інформаційних
процесів і систем»
на тему: «Методи уточнення коренів нелінійних рівнянь»
Варіант №9
Львів – 2012
ТЕКСТ ПРОГРАМИ
using System;
using System.Collections.Generic;
using System.Text;
namespace kmd_lab1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(" КМД, Лабораторна робота №1 \"Методи уточнення коренiв нелiнiйних рiвнянь\"");
Main p = new Main(); p.input(); p.comb();
Console.Write("Press <Enter> to exit..."); Console.ReadKey();
}
}
class Main
{
// перелік усіх змінних типу double:
public double a, b, e, xnt, xntl, xntlpo, fxntl, fsxntl, fxnt, fxntlpo, xntpo;
public void input() // метод введення і присвоєння змінних
{
Console.WriteLine(" Введiть промiжок [a, b] та абсолютну похибку E:");
try
{
Console.Write(" Введiть 'a'= "); a = Convert.ToDouble(Console.ReadLine());
Console.Write(" Введiть 'b'= "); b = Convert.ToDouble(Console.ReadLine());
Console.Write(" Введiть 'E'= "); e = Convert.ToDouble(Console.ReadLine());
} catch (Exception) { Console.WriteLine(" Виникла помилка!"); input(); }
Console.WriteLine(" Ви ввели промiжок ["+a+","+b+"] та E= "+e+";\n");
xnt = a; xntl = b;
}
public void func() // метод обчислення функцій
{
// x n-те (Ньютона)
fxntl = Math.Cos(xntl)+(1/(xntl-2)); // f (xntl)
fsxntl = (-1)*(Math.Sin(xntl))-(1/Math.Pow((xntl-2), 2)); // f'(xntl)
xntlpo = xntl-(fxntl/fsxntl); // xntlpo
Console.WriteLine(" f(b) = "+fxntl);
Console.WriteLine(" f'(b) = "+fsxntl);
Console.WriteLine(" xntlpo = "+xntlpo);
// x n-те
fxnt = Math.Cos(xnt)+(1/(xnt-2)); // f (xnt)
fxntlpo = Math.Cos(xntlpo)+(1/(xntlpo-2)); // f (xntlpo)
xntpo = xnt-((fxnt*(xntlpo-xnt))/(fxntlpo-fxnt)); // xntpo
Console.WriteLine(" f(a) = "+fxnt);
Console.WriteLine(" f(xntlpo)= "+fxntlpo);
Console.WriteLine(" xntpo = "+xntpo);
}
public void comb()
{
double tf; int iter=1;
do
{
if (iter != 1) { xntl = xntlpo; xnt = xntpo; }
func();
Console.WriteLine(" Iтерацiя "+iter+" - завершено!\n"); iter++;
tf = Math.Abs(xntpo-xntlpo); // |xntpo-xntlpo|
}
while(tf>e);
double xz = 0.5*(xnt+xntl); Console.WriteLine(" Корiнь X* = "+xz+"\n");
}
}
}
БЛОК-СХЕМА
Мета роботи – ознайомлення з методами уточнення коренів нелінійних рівнянь з одним невідомим.
КОРОТКІ ТЕОРИТИЧНІ ВІДОМОСТІ:
Комбінований метод хорд та дотичних:
Метод хорд та дотичних дають наближення кореня з різних сторін (менше і більше від істинного значення). Тому доцільно використати обидва способи одночасно, завдяки чому уточнене значення кореня одержується швидше.
Нехай – початкове наближення кореня за методом хорд, а – за методом дотичних (див.рис.1).
Тоді провівши хорду та дотичну, одержимо відповідні наближення за методом хорд
і за методом дотичних
Або в загальному випадку
(рис. 1)
Якщо припустима абсолютна похибка E заздалегідь задана, то процес наближення припиняється, доки не буде виявлено, що
Після закінчення процесу за значення кореня х* краще взяти середнє арифметичне одержаних останніх значень
Кращий результат дає наступний порядок обчислень:
Знаходиться наближене значення кореня за методом Ньютона. При цьому початкове наближення має бути обране так, щоб виконувалась умова . Отже якщо в точці x=b умова не виконується, на етапі введення початкових даних в поданому нижче прикладі алгоритму необхідно ввести ;
Знаходиться наближене значення кореня за методом хорд, використовуючи замість значення , знайдене за методом Ньютона, і процес повторюється до одержання бажаної похибки обчислень.
; .
ЗАВДАННЯ:
Знайти корінь рівняння з граничною абсолютною похибкою Е = 10–4, відокремлений на відрізку [a, b]. Методи чисельного розв’язування задаються викладачем.
Варіант
Рівняння
Відрізок
9.
cos x + 1/(x – 2) = 0
[0;1]
СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ФУНКЦІЙ, ВИКОРИСТАНИХ У БЛОК-СХЕМІ АЛГОРИТМУ І ПРОГРАМІ, ТА ЇХ ПОЯСНЕННЯ
Console.ReadLine() – зчитування стрічки з консолі;
Covert.ToDouble() – конвертування текстової змінної в число типу Double;
Console.WriteLine – метод виведення на екран;
Math.Cos(x) – математичний метод обчислення синуса x;
Math.Sin(x) – математичний метод обчислення косинуса x;
public void func()– метод обчислення функцій