Professional Documents
Culture Documents
КП ЧМ 2
КП ЧМ 2
Комп’ютерний практикум 2
з дисципліни ”Чисельні методи”
Варіант 18
class Program
{
static void Main(string[] args)
{
Console.Write("Enter function (1-f, 2-g): ");
int s = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter initial x:\t ");
double x = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter e:\t ");
double e = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Newton's method:");
Newton(x, e, s);
Перший метод – метод Ньютона (Newton`s method). Метод, який дозволяє знайти
наближений корінь рівняння. Для використання цього методу функція має бути
диференційовною
Наближення кореня за формулою:
f ( xn )
x n+1=x n −
f ' (xn )
Другий метод – спрощений метод Ньютона(Simplified Newton`s method). Аналогічно
методу Ньютона, функція має бути диференційовною. Даний метод дозволяє не
обчислювати похідну на кожній ітерації, а, отже, і позбутися можливого ділення на
нуль. Однак цей алгоритм має тільки лінійну збіжність.
Наближення кореня виконую за формулою:
f ( xn )
x n+1=x n −
f ' ( x0 )
2)Точність 10^-5
3)Точність 10^-6
Результат для функції g(x)
1) Точність 10^-4
Точність 10^-5
2) Точність 10^-6
Похибки:
Ми можемо обчислити абсолютну похибку функції для кожної точності,
використовуючи формулу:
похибка = |виміряний корінь - точний корінь|
Виміряний корінь :
Root p(x) :
Для точності 10^-4: x = 0.7391
Для точності 10^-5: x = 0.739085
Для точності 10^-6: x = 0.739085
Root q(x) = 0.8654
1)ε 1= | 0.7391 - 0,167449951171875| = 0,203250048828125
ε 2=|0.739085 - 0,16744613647460938 | = 0,2033138634746094
ε 3= | 0.739085 - 0,1674485206604004 | = 0,2033194796604004
Обчислити відносну похибку можна за формулою:
δ 0=
||ε1
ε
δ 1=|0.167449951171875 / -0.3707| = 0.451848884058167
δ 2 = |0.16744613647460938 / -0.37076| = 0.45178701476875126
δ 3= |0.1674485206604004 / -0.370768| = 0.45178900549972214
2)
ε 21 = |-0.3707 - (-6.1157372)| = 5.7450372
ε 22 = |-0.37076 - (-6.1157372)| = 5.7449772
ε 23 = |-0.370768 - (-6.1157372)| = 5.7449682
Завдання 3:
1) Побудувати графіки функцій p (x) і q(x), попередньо дослідивши
аналітично їх характерні точки і особливості поведінки (інтервали зростання та
спадання). Визначити інтервали невизначеності всіх коренів.
Завдання 4. Складіть програму, що реалізує алгоритм пошуку коренів рівнянь p (x) = 0
і q(x) = 0 методом простої ітерації з точністю
10^-4,10^-5,10^-6. Порівняйте їх значення з результатами аналітичного дослідження
функцій f (x) і g(x). Дайте визначення умов збіжності методу.
Корінь :0,0286263100802898
(-∞ ;+∞ )
• Функція зростає на інтервалах (-∞, -√(cos x / 3)] та [√(cos x / 3), +∞);
• Функція спадає на інтервалах [-√(cos x / 3), 0] та [0, √(cos x / 3)].
2)
Корінь : 0,9098757319152355
(-∞ ;+∞ )
Тому функція зростає на інтервалах (-∞, -0,298) та (0,499, +∞), та спадає на інтервалі (-
0,298, 0,499).
using System;
namespace SimpleIterationMethod
{
class Program
{
static void Main(string[] args)
{
const double e1 = 1e-4; // accuracy of 10^-4
const double e2 = 1e-5; // accuracy of 10^-5
const double e3 = 1e-6; // accuracy of 10^-6
Console.WriteLine("Finding the roots of p(x) = x^3 - sin(x) using simple iteration method...");
double p1 = SimpleIterationMethod(x => Math.Pow(Math.Sin(x), 1.0 / 3.0), 0.5, e1);
double p2 = SimpleIterationMethod(x => Math.Pow(Math.Sin(x), 1.0 / 3.0), 0.5, e2);
double p3 = SimpleIterationMethod(x => Math.Pow(Math.Sin(x), 1.0 / 3.0), 0.5, e3);
Console.WriteLine($"Root of p(x) with accuracy of {e1}: {p1}");
Console.WriteLine($"Root of p(x) with accuracy of {e2}: {p2}");
Console.WriteLine($"Root of p(x) with accuracy of {e3}: {p3}");
Console.WriteLine();
Console.WriteLine("Finding the roots of q(x) = x^3 + 0.1(x^2) + 0.4x - 1.2 using simple iteration method...");
double q1 = SimpleIterationMethod(x => Math.Pow(1.2 - 0.4 * x - 0.1 * x * x, 1.0 / 3.0), 0.5, e1);
double q2 = SimpleIterationMethod(x => Math.Pow(1.2 - 0.4 * x - 0.1 * x * x, 1.0 / 3.0), 0.5, e2);
double q3 = SimpleIterationMethod(x => Math.Pow(1.2 - 0.4 * x - 0.1 * x * x, 1.0 / 3.0), 0.5, e3);
Console.WriteLine($"Root of q(x) with accuracy of {e1}: {q1}");
Console.WriteLine($"Root of q(x) with accuracy of {e2}: {q2}");
Console.WriteLine($"Root of q(x) with accuracy of {e3}: {q3}");
Console.ReadKey();
}
Даний код використовує метод простої ітерації для знаходження коренів двох різних
функцій: p(x) = x^3 - sin(x) та q(x) = x^3 + 0.1x^2 + 0.4x - 1.2.
Контрольні запитання:
1.Основна ідея методу Ньютона полягає у знаходженні нуля нелінійної функції шляхом
апроксимації її лінійною функцією та знаходженням точки перетину цієї лінії з віссю
абсцис.
Метод простих ітерацій - це ітераційний чисельний метод для розв'язування рівнянь, який базується
на перетворенні вихідного рівняння у вигляд, який дозволяє легко знаходити корені. Метод простих
ітерацій використовується для розв'язування рівнянь у вигляді f(x) = 0, де f(x) - це функція, яка задає
рівняння.
Для методу простих ітерацій різні варіанти збіжності можуть відрізнятися за вибором функції г, яка
використовується для ітерацій. Одним з варіантів є використання функції г(x) = x - λf(x), де λ - додатня
константа. У цьому випадку, збіжність методу залежить від значення λ та властивостей функції f(x).
Якщо λ вибрано надто великим, метод може не збігатися, а якщо занадто малим, то метод може
збігатися дуже повільно.
Геометрично ілюструючи метод простих ітерацій для функції г(x) = x - λf(x), можна представити
процес ітерації як рух точки x по прямій y = x, під кутом, що дорівнює нахилу функції г(x) в точці x.
Якщо нахил функції г(x) в точці x менший за одиницю, то точка x збігається до кореня рівняння. Якщо
нахил дорівнює одиниці, то точка x стає нерухомою, що свідчить про незбіжність методу. Якщо нахил
більший за одиницю, то точка x віддаляється від кореня рівняння, що свідчить про нестабільність
методу.