КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Метод хорд
Метод хорд [7] заключается в замене кривой y = f (x) отрезком прямой, проходящей через точки (a, f (a)) и (b, f (b)) (см. рис. 2.6). Абсцисса точки пересечения прямой с осью OX принимается за очередное приближение. Чтобы получить расчетную формулу метода хорд, запишем уравнение прямой, проходящей через точки (a, f (a)) и (b, f (b)) и, приравнивая y нулю, найдем x: .
Алгоритм метода хорд: 1) Пусть k = 0; 2) Вычислим следующий номер итерации: k = k + 1; Найдем очередное k -ое приближение по формуле: xk = a – f (a)(b – a)/(f (b) – f (a)); Вычислим f (xk). 3) Если f (xk)= 0 (корень найден), то переходим к 5). Если f (xk) f (b) > 0, то b = xk, иначе a = xk. 4) Если | xk – xk -1| > ε, то переходим к шагу 2); 5) Выводим значение корня xk. 6) Конец.
Замечание. Действия третьего пункта аналогичны действиям метода половинного деления. Однако в методе хорд на каждом шаге может сдвигаться один и тот же конец отрезка (правый или левый), если график функции в окрестности корня выпуклый вверх (рис. 2.6, a)) или вогнутый вниз (рис. 2.6, b)). Поэтому в критерии сходимости используется разность соседних приближений. Пример 2.6. Применим метод хорд к уравнению sin 5 x + x 2 – 1 = 0 и отрезку [0,2; 0,3] для определения корня с точностью до ε = 0,001. Решение. Проведем расчеты в программе Excel: 1) В ячейки A1:H1 запишем заголовки столбцов как в табл. 2.6; 2) В ячейку B3 запишем формулу =ЕСЛИ(C2*E2<0;B2;D2) и затем ячейку B3 протянем маркером заполнения до ячейки B10; 3) В ячейку C2 запишем формулу =SIN(5*B2)+B2^2-1 и затем ячейку C2 протянем маркером заполнения до ячейки C10; 4) В ячейку D2 запишем формулу =B2-C2*(F2-B2)/(G2-C2) и затем ячейку D2 протянем маркером заполнения до ячейки D10; 5) В ячейку E2 запишем формулу =SIN(5*D2)+D2^2-1 и затем ячейку E2 протянем маркером заполнения до ячейки E10; 6) В ячейку F3 запишем формулу =ЕСЛИ(C2*E2<0;D2;F2) и затем ячейку F3 протянем маркером заполнения до ячейки F10; 7) В ячейку G2 запишем формулу =SIN(5*F2)+F2^2-1 и затем ячейку G2 протянем маркером заполнения до ячейки G10; 8) В ячейку H2 запишем формулу =ABS(F2-B2) и затем ячейку H2 протянем маркером заполнения до ячейки H10; В таблице 2.8 приведены результаты. Необходимая точность достигается на шаге k = 4. Таблица 2.8
Решение в программе Mathcad:
Как видим, результаты расчетов согласуются с предыдущими ответами. Приведем программу, которая реализует метод хорд на языке C ++:
#include <iostream.h> #include <math.h> double f(double x); typedef double (*PF)(double); double hord(PF f,double a, double b,double eps, int Kmax); int main(){ double a, b, x, eps;PF pf; int Kmax; cout << "\n a = "; cin >> a; cout << "\n b = "; cin >> b; cout << "\n eps = "; cin >> eps; cout << "\n Kmax = "; cin >> Kmax; pf = f; x = hord(pf,a,b,eps, Kmax); cout << "\n x = " << x; cout << "\n Press any key & Enter "; cin >> a; return 0; } double f(double x){ double r; r = sin(5*x)+x*x-1; return r; } double hord(PF f, double a, double b,double eps,int Kmax){ double xk, xk1, xerr; int k = 0; xk = a; do{ k = k + 1; if(k > Kmax)break; xk1 = a - f(a)*(b - a)/(f(b) - f(a)); if (f(xk1) == 0) break; xerr = fabs(xk1 - xk); xk = xk1; if (f(xk1)*f(b) > 0) b = xk1; else a = xk1; }while (xerr > eps); return xk1; }
Результат расчета для примера 2.6: a = 0.2 b = 0.3 eps = 0.0001 Kmax = 100 x = 0.244633 Press any key & Enter
Как видим, результат совпадает с предыдущими расчетами.
Дата добавления: 2015-04-25; Просмотров: 6933; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |