Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Метод Ньютона для системы двух уравнений

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. Н.Э. БАУМАНА

 

 

Отчет по лабораторной работе

по курсу “Численные методы”

 

Решение систем нелинейных алгебраических

уравнений методом Ньютона»

 

Выполнил:

Студент группы РК6-43

Корчагина А.И.

 

Проверил:

Доцент кафедры ФН-1

Храпов П.В.

 

 

Москва, 2011


Теоретическая часть

Метод Ньютона для нелинейного уравнения

 

Для решения нелинейного уравнения f(x)=0 по методу Ньютона используется итерационный процесс:

x(k+1) = x(k) - f(x(k))/f '(x(k)), k = 0, 1, 2,...  

где x(0) - некоторое начальное приближение к корню

При этом предполагается, что f '(x)0 на отрезке [ a,b ].

 

Геометрический вывод формулы.

Геометрически итерационный процесс метода Ньютона означает замену на k -той итерации графика функции y=f(x) на касательную к этой функции в точке (x(k), f(x(k))) (в связи с этим метод также иногда называется методом касательных). Уравнение касательной имеет вид y=f '(x(k))(x-x(k))+f(x(k))

Найдем точку пересечения с осью OX этой касательной (вместо функции y=f(x)), что соответствует нахождению решения линейного уравнения: f '(x(k))(x-x(k))+ f(x(k))=0 вместо нелинейного f(x)=0.

Выражая x, получаем: x = x(k) - f(x(k))/f '(x(k))x(k+1)

Аналитический вывод формулы.

Рассмотрим уравнение f(x)=0, X - его корень, x(k) - k -ое приближение к корню. Тогда по теореме Лагранжа о средних значениях имеем: 0 = f(X) = f(x(k)) + (X - x(k))f '(ck),

где ck(X, x(k)).

Заменяя f '(ck) на значение f '(x(k)) (то есть используя предыдущее приближение к корню) приходим к приближенному равенству 0f(x(k)) + (X - x(k))f '(x(k)).

Откуда получаем Xx(k) - f(x(k))/f '(x(k))x(k+1)

Метод Ньютона для системы двух уравнений

 

Рассмотрим систему двух уравнений

Алгоритм решения системы по методу Ньютона задается формулами:

,

где

 

(x1(0), x2(0)) - некоторое начальное приближение к корню.

Реализация дифференцирования уравнений системы выполнена методом конечных разностей.

где – элементарное приращение аргумента

 

Аналитическое решение

 

 

1)

(a)

2)

(б)

Возведем (а) и (б) в квадрат:

Ответ:

Графическое решение

Текст программы

# include <iostream>

# include <cmath>

 

using std::cout;

using std::endl;

 

const double EPS = 1E-6;

const double dx = 1E-5;

const double dy = 1E-5;

 

inline double f1(double x, double y)

{

return 2.0 * x * x + x * y - y * y - 20.0;

}

 

inline double f2(double x, double y)

{

return x * x - 4.0 * x * y + 7.0 * y * y - 13.0;

}

 

int main(void)

{

double x[2] = { 3.5 * 10, 2.5 * 10 };

double xn[2] = { x[0], x[1] };

 

static unsigned count = 0;

 

cout.precision(12);

cout << "i\tx\t\ty" << endl;

 

do

{

if (count > 0)

{

xn[0] = x[0];

xn[1] = x[1];

}

 

double f[2] = { f1(x[0], x[1]), f2(x[0], x[1]) };

 

double a = f1(x[0] + dx, x[1]) - f1(x[0], x[1]);

a /= dx;

double b = f1(x[0], x[1] + dy) - f1(x[0], x[1]);

b /= dy;

double c = f2(x[0] + dx, x[1]) - f2(x[0], x[1]);

c /= dx;

double d = f2(x[0], x[1] + dy) - f2(x[0], x[1]);

d /= dy;

 

double df[2][2] = { { a, b }, { c, d } };

double det_df = a * d - b * c;

double det_1 = 1.0 / det_df;

 

double df_inv[2][2] = { { d, -b }, { -c, a } };

 

x[0] = xn[0] - det_1 * (df_inv[0][0] * f[0] + df_inv[0][1] * f[1]);

x[1] = xn[1] - det_1 * (df_inv[1][0] * f[0] + df_inv[1][1] * f[1]);

 

cout << ++count << '\t' << x[0] << '\t' << x[1] << endl;

 

getchar();

} while(fabs(x[0] - xn[0]) > EPS || fabs(x[1] - xn[1]) > EPS);

 

cout << "Num of iterations: " << count << endl

<< "Result:" << endl

<< "x = " << x[0] << endl

<< "y = " << x[1] << endl;

 

getchar();

return 0;

}

Результаты

Newton's Method

i x y 1 17.6285270542 12.5803154407 2 9.06942825306 6.44969708813 3 5.03069026267 3.53588509791 4 3.40960716795 2.33471358531 5 3.02450775837 2.0244447255 6 3.00009697619 2.00016037865 7 3.00000000199 2.00000001582 8 3 2 Num of iterations: 8 Result: x = 3 y = 2

<== предыдущая | следующая ==>
Охарактеризуйте суб’єктивні права та юридичні обов’язки суб’єктів права. | Международное распределение труда, сущность, этапы, формы, роль в мировой экономике.

Date: 2016-07-25; view: 2149; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию