Лабораторная работа № 2.1 РЕШЕНИЕ АЛГЕБРАИЧЕСКИХ И ТРАНСЦЕНДЕТНЫХ УРАВНЕНИЙ. ГРАФИКИ ФУНКЦИЙ Решение уравнений. Дано уравнение f ( x) 0 . (1) Требуется определить с точностью до все корни уравнения на отрезке a, b. Функция f ( x ) на отрезке a, b непрерывна. Для дальнейших рассмотрений полезно напомнить следствие из теоремы о непрерывной функции: Если функция f ( x ) непрерывна на отрезке a, b и на концах отрезка принимает значения разных знаков f (a) f (b) 0, то в отрезке a, b содержится по меньшей мере один корень уравнения f ( x ) 0 . Простейший алгоритм решения поставленной задачи заключается в следующем: - для x a, a , a 2, , b вычисляет значения функции f (x) ; - определяет отрезки , , на концах которых значения функции f ( x ) меняют знак f () f ( ) 0 ; - в качестве корня выбираем любую точку отрезка , , например - середину отрезка. Погрешность не превысит величины . Однако такой алгоритм крайне неэффективен - нам потребуется вычисление (b a ) значений функции. Более приемлемым представляется разбиение задачи на две части: - отделение корней - определение отрезков, на которых содержится в точности один корень уравнения (1); - уточнение корней - вычисление отделенных на предыдущем этапе корней с заданной точностью. Для отделения корней используем следующим метод: - с некоторым шагом h (b a) n вычисляем на отрезке a, b значения функции f ( x ) ; определяем k - число отрезков , h , на концах которых значения функции меняют знак; - полагаем k пред : k, hпред : h, h : h 2 , вычисляем значение k для нового шага; - если k пред k , снова делим на шаг h пополам и повторяем вычисление k ; процесс продолжаем до тех пор, пока не получим k пред k ; - если k пред k , то считаем, что шаг h для отделения корней нами получен. Повторяем расчет с шагом h и для каждого отрезка , h , на концах которого значения функции меняют знак, применяем метод уточнения корня. Как легко видеть, предложенный алгоритм не гарантирует нам отделение всех корней. Например, точки касания функции f ( x ) с осью X (кратные корни) алгоритм пропустит. Для повышения надежности алгоритма можно рассмотреть задачу поиска минимумов функции f 2 ( x ) , т.е. решения уравнения f ( x ) f ( x ) 0 . Или, - что то же самое, - совместно с корнями функции f ( x ) исследовать корни ее производной f ( x ) . Уточнение корней. На этапе уточнения корней задача формулируется следующим образом: на отрезке a, b имеется в точности один корень уравнения (1). Функция f ( x ) непрерывна на отрезке a, b. Требуется определить значение корня с точностью до . Рассмотрим наиболее простые методы уточнения корней. Метод бисекций (метод деления отрезка пополам): - полагаем x лев a (левая граница корня), x прав b (правая граница ); - вычисляем y лев f (a) ; если у лев 0 , то корень равен а , процесс прекращаем; - вычисляем х сред ( х лев х прав ) 2 (рис. 1); - вычисляем у f ( х сред ) ; - если y 0 , то корень равен x сред , процесс прекращаем; - если у у лев 0 (рис. 1), то корень, правее x сред , полагаем 3 x лев х сред ; в противном случае полагаем х прав х сред ; - повторяем деление отрезка пополам. Процесс продолжаем до тех пор, пока длина отрезка, на котором находится корень, не станет меньше ( хправ х лев ) ; - если х прав х лев , то в качестве корня можно взять любую точку отрезка х лев , х прав , например, - середину. Полагаем корень равным ( х прав х лев ) 2 . Y хлев хсред Х хправ Рис. 1 Отметим высокую скорость сходимости метода: за m итераций длина отрезка, содержащего корень, сокращается в 2 m раз. Метод Ньютона (метод касательных): - выбираем начальное приближение x 0 ; - вычисляем y 0 f ( x 0 ) ; - в точке ( x 0 , y 0 ) проводим касательную к кривой y f ( x ) - прямая y y 0 f ( x 0 ) ( x x 0 ) (рис. 2); Y x2 x1 x0 X Рис. 2 - вычисляем точку пересечения касательной с осью X : 4 x1 x 0 f ( x 0 ) f ( x 0 ) ; - точку x 1 определяем как следующее приближение к корню; в точке x1, f ( x1 ) проводим касательную, вычисляем точку пересечения касательной с осью X и т.д.; получение последующего приближения из предыдущего дается выражением x n 1 x n f ( x n ) f ( x n ) ; - процесс продолжаем до тех пор, пока разность между последующим и предыдущим приближениями не станет меньше , x n 1 x n . В качестве корня указываем последнее приближение. Скорость сходимости метода характеризуется выражением ( x n a)2 f () , x n 1 a 2! f ( x n ) где a - точное значение корня; - некоторое промежуточное значение между корнем a и приближением x n . Т.е. в окрестности коня метод имеет квадратичную сходимость: погрешность последующего приближения оценивается как квадрат погрешности предыдущего приближения. Метод простой итерации: - уравнение (1) преобразуем к виду x (x); (2) - выбираем начальное приближение x 0 ; - последующие приближения вычисляем по формуле: x n 1 ( x n ) ; - процесс прекращаем, когда разность между последующим и предыдущим приближениями становится меньше x n 1 x n . Сходимость метода характеризуется выражением x n 1 a ( x n a) () , где a - точное значение корня; - промежуточное значение между a и x n . Таким образом, метод сходится, если в достаточно большой окрестности корня ( x ) 1. Это обстоятельство следует учитывать при преобразовании уравнения (1) к виду (2). 5 Графики функций. Графический режим работы экрана в языке Turbo Pascal обеспечивает модуль GRAPH. Для подсоединения модуля к программе необходимо в операторе Uses указать его имя. Инициализацию графического режима выполняют операторы graphdriver:=Detect; Initgraph(graphdriver,graphmode,"<путь">); где - graphdriver, graphmode - переменные типа integer; - graphdriver=Detect определяет выбор драйвера, ориентированного на монитор нашего компьютера; - <путь> определяет полное имя директории, где хранится файл egavga.bgi, если файл egavga.bgi хранится в текущей директории '<путь>':=' '. Закрытие графического режима осуществляет оператор Glosegraph. Изображение на экране строится с помощью пикселей. Выдачу пикселя на экран осуществляет оператор Putpixel(ix,iy,цвет); где - ix, iy - координаты пикселя, выражение целого типа; - цвет - код цвета пикселя, выражение целого типа. В качестве кода цвета допускается указание английских слов, определяющих (допустимый) цвет: red, green и др. Нумерация пикселей: - по горизонтали (ось X , координата ix ) - слева направо, начиная с нуля, максимальный номер - getmaxx; - по вертикали (ось Y , координата iy ) - сверху вениз, начиная с нуля, максимальный номер - getmaxy. Процедура Line строит на экране отрезок прямой линии. Обращение к процедуре имеет вид Line(x1,y1,x2,y2), где (x1,y1), (x2,y2) - координаты концов отрезка. Величины x1, y1, x2, y2 - выражения целого типа. Перейдем к построению графика функции. Формулируем задачу: 6 для a x b построить график функции y f ( x ) . Для построения использовать все пространство экрана. Процесс построения графика на экране сходен с процессом построения на бумаге: - для x a, a h, a 2h, , b вычисляем значения функции y f ( x) ; - координаты точек ( x, y ) преобразуем в координаты пикселей (ix, iy ) , проставляем пиксели на экране; - проставленные точки соединяем линией. Определим формулы преобразования. Пусть на отрезке a, b функция f ( x ) принимает значения из интервала c, d. На м требуется отобразить прямоугольник (a b, c d) на прямоугольник (0- getmaxx, 0-getmaxy). Запишем формулы преобразования с неопределенными коэффициентами ix x , iy y . (3) Коэффициенты , определяем из условий: - если x a , то ix 0 : a 0 ; - если x b , то ix get max x : b getmax x ; откуда получаем getmaxx ; ba getmaxx a. ba (4) Аналогично, с учетом того, что нумерация по оси Y выполняется сверху вниз, вычисляем коэффициенты и : - если y c , то iy get max y : - если y d , то iy 0 : c get max y; d 0; getmaxy ; dc getmaxy d. dc (5) Итак, формулы преобразования даются выражениями (3), их коэффициенты - выражениями (4) и (5). Отметим, что коэффициенты и определяют масштабные множители, коэффициенты и - сдвиг. 7 Для соединения пространственных точек (пикселей) можно воспользоваться процедурой Line или Limeto. Но можно воспользоваться и тем обстоятельством, что в отличие от математической точки пиксель имеет свои пространственные размеры. Если пиксели проставлять достаточно плотно, можно надеяться, что они сольются в единую кривую. Используем это обстоятельство. Положим h (b a) get max x . При увеличении x на шаг h величина ix будет увеличиваться на 1 - наибольшая плотность для целых чисел. Расположение пикселей по оси Y определяется значениями функции y f ( x ) и формулами преобразования. Схема алгоритма построения графика функции имеет вид: вычислить коэффициенты , , , ; вычислить h (b a) get max x ; для x a, a h, a 2h, , b : вычислить y f ( x ) ; преобразовать координаты точки ( x, y ) в координаты пикселя (ix, iy ) , округлить ix, iy до целого; выдать пиксель с координатами (ix, iy ) . Аналогичную, но несколько проще реализуемую схему мы получаем, изменяя координату ix от 0 до getmaxx и преобразуя ix в x . Оси координат строятся в соответствии с их уравнениями: ось X (прямая y 0, a x b ) вычеркивается операторами iy:=round(delta); Line(0,iy,getmaxx,iy); ось Y (прямая x 0, c y d ) вычеркивается операторами ix:=round(beta); Line(ix,0,ix,getmaxy). Оси координат рекомендуется вычерчивать до начала построения графика функции. Оси координат могут быть представлены на экране только если концы отрезков a, b и c, d имеют разные знаки. Если, например, a0 8 (b a) , то для оси Y мы получаем ix getmaxx a 0, ba т.е. ось Y не может быть представлена на экране. В общем случае вместо осей координат на экране удобнее чертить координатную сетку рис.3 d C+3g C+2g C+g c a a+h a+2h a+3h a+4h a+5h b Рис. 3 Здесь на экране проставлены три горизонтальных и пять вертикальных линий сетки. Фрагмент программы, реализующей сетку, имеет вид {горизонтальные линии} g:=(d-c)/4; for i:=1 t0 3 do begin y:=c+i*g; iy:=round(gamma*y+delta); line(0,iy,getmaxx,iy); str (y:1:2,S); outtextxy (3,iy-5,S); end; {вертикальные линии} h:=(b-a)/6; for i:=1 t0 5 do begin x:=a+i*h; ix:=round (alpha*x+beta); line (ix,0,ix,getmaxy); str (x:1:2,S); outtextxy (ix+3/,getmaxx-10,S); end; Обращения к процедурам Str и Outtextxy обеспечивают надписи на линиях сетки. Согласование масштабов: в проведенных рассмотрениях мы не 9 касались вопросов согласования масштабных множителей (коэффициенты и ). Рассогласованность масштабов приводит к искажению изображения на экране. Если, например, используя предыдущие рассмотрения попытаться начертить на экране круг y 1 x2 ; 1 x 1, 1 y 1, то вместо круга мы получим на экране овал (эллипс). Вопросы согласования масштабов мы оставляем на рассмотрение читателю. При согласовании следует также учитывать, что величины шага между пикселями по осям X и Y могут не совпадать. Для построения графика мы использовали все пространство экрана. Простые изменения в рассмотренных алгоритмах позволяют построить график не на всем пространстве, а только в некотором участке (окне) экрана. Построение графиков в таком окне мы оставляем на рассмотрение читателю. ЗАДАНИЯ В задачах 1 - 7 требуется вычислить все корни уравнения на заданном отрезке с заданной точностью. На экран выдать значения корней и значения функции в точке корня, представить графики левой и правой частей уравнения, отметить на графике положение корней. 1. на [0,10] tgx=x с точностью 10-4. 2. ctgx=1/x-x/2 на отрезке [0.5, 20] с точностью 10-5. 3. cosx=1/x на отрезке [0.1, 20] с точностью 10-6. 4. x5-3x4+3x3+6x2-1=0 на отрезке [-10, +10] на отрезке [0.0, 8.0] 5. e-x=sin2x с точностью 10-5. с точностью 10-6. ( x )2 i 0 на отрезке [-2.4, 2.4] 6. ( 1) (2 i 1)! i0 10 i x 2 i 1 0 7. ( 1) ( 2 i )! i0 10 i на отрезке [-5, 5] с точностью 10-6. с точностью 10-6. В задачах 8 - 12 составить подпрограммы решения уравнения методом бисекций и методом Ньютона на отрезке a, b . Сопоставить 10 решение уравнений двумя методами: значение корня, значения функции, число итераций. Представить графики левой и правой частей уравнения. Отметить на графике положение корня. 8. х+е-х =0 на отрезке [-1, 0] 9. x*thx=1 на отрезке [0.5, 2.0] на отрезке [2.0, 3.0] 10. x-0.1*sinx=2 11. x+arctgx=1 на отрезке [0.0, 1.0] 12. x6+3x5+4x4+2x2-3x-5=0 на отрезке [0.0, 1.0] В задачах 13 - 17 составить подпрограммы для решения уравнений методом бисекций и методом простых итераций на отрезке a, b. Сопоставить решение уравнений двумя методами: значения корня, значения функции, число итераций. Представить графики левой и правой частей уравнения. Отметить на графике положение корня. 13. x4+3x3-2x2+5х-10000=0 на отрезке [8, 10] с точностью 10-4 на отрезке [0, 1] 14. x4+5x3-2x2-1=0 с точностью 10-5 15. х-е-х=1 на отрезке [1, 2] с точностью 10- 16. x-lnх=2 на отрезке [2, 4] с точностью 10- 7 6 на отрезке [2, 5] 17. x-arctgx=3 с точностью 10-5 18. Заданы функция y f ( x ) и ее производная y f ( x ) . В заданном интервале a, b найти все критические точки (то есть точки x j , где f ( x j ) 0 , используя метод деления отрезка сначала на 100 равных частей, а затем в тех интервалах, где знаки f ( x ) на концах различны метод деления отрезка пополам. Вывести на экран дисплея таблицу. X < x1 x1 ] x1, x2 [ x2 ] x2, x3 [ x3 f ( x ) + 0 - 0 + 0 - f (x) Max 1.74 min -2.15 max 2.86 11 Представить графики функции и ее производной, отметить на графике положение критических точек. 19. Составить программу вывода на экран дисплея графика функции y f ( x ) в заданном интервале a, b с указанием всех точек экстремума. 20. Составить программу нахождения коэффициентов а и b наклонной асимптоты y ax b для заданной функции f ( x ) a lim f ( x) x; b lim f ( x) ax. x x Указание: для x x 0 , x1, , x k 1, x k , коэффициенты а и b асимптоты вычисляются как предел соответствующих коэффициентов прямой, проходящей через две соседние точки последовательности x k a lim k f ( x k ) f ( x k 1 ) ; x k x k 1 f ( x k ) f ( x k 1 ) b lim f ( y k ) x k . k x k x k 1 Представить графики функции f ( x ) и асимптоты. 21. Составить программу, которая для данной функции f ( x ) составляет участки монотонного возрастания, участки монотонного убывания, максимумы и минимумы на данном интервале a, b. Для этого с равным шагом вычислить значения функции на интервале a, b в 1000 точках и проанализировать вычисленные результаты . Представить график функции, отметить на графике точки экстремума. 22. Составить программу, которая для данной функции f ( x ) по ее второй производной f ( x ) находит участки выпуклости и вогнутости кривой и точки перегиба на заданном отрезке a, b. Для этого с равным шагом вычислить значения f ( x ) в 1000 точках и проанализировать вычисленные значения. Представить график функций f ( x ) и f ( x ) , отметить на графике точки перегиба. 23. Луч света выходит из точки D с координатами (d,0) под углом к оси абсцисс, а затем многократно зеркально отражается от поверхности эллипса, уравнение которого x2 y2 1. a2 b2 (величины а и b даны; a d a ). Найти длину пути луча, который он 12 пройдет после N отражений. (Под зеркальным отражением понимается такое отражение, когда углы, образованные падающим и отраженным лучами с нормалью к поверхности равны. Нормаль - перпендикуляр к касательной в точке касания). Указать путь луча на графике. 24. Для данной непрерывной на отрезке a, b функции f ( x ) найти точку c a, b , удовлетворяющую условию теоремы Лагранжа о непрерывных функциях f (b) f (a) (b a) f (c ) . Использовать для этого метод деления отрезка пополам при решении уравнения f (b) f (a) (b a) f (c ) . Представить график левой и правой частей уравнения, отметить на графике точку корня. 25. Для данных непрерывных на отрезке a, b функций f ( x ) и g( x ) найти точку c a, b , удовлетворяющую условию теоремы Коши о непрерывных функциях f (b) f (a) f (c ) . g(b) g(a) g(c ) Использовать для этого метод деления отрезка пополам при решении уравнения f (b) f (a) f (c ) . g(b) g(a) g(c ) Представить график левой и правой частей уравнения, отметить на графике точку корня. 26. Используя метод бисекций для решения уравнения f ( x ) 0 , найти все экстремумы функции f ( x ) x sin 5x с точностью 0.0001 в интервале x 0, 4 . Представить график функций f ( x ) и f ( x ) , отметить на графике точки экстремума. 27. Используя метод бисекций для решения уравнения f ( x ) 0 , найти все точки перегиба функции f ( x ) x sin 5x с точностью 0.00001 в 13 интервале x0, 4 . Представить график функций f ( x ) и f ( x ) , отметить на графике точки перегиба. 1 y 28. Используя формулу для радиуса кривизны R 2 32 y для параболы y 2 4x в интервале x 0, 4 с шагом h вычислить радиус кривизны и построить график зависимости R от х. 29. Для кривой y 2 4x в интервале x 0, 4 с шагом h вычислить координаты ( , ) эволюты и построить ее график. Эволютой называется геометрическое место точек центров кривизны ( , ) , координаты которых вычисляются по формулам y 1 y2 x ; y 1 y2 y . y ЛИТЕРАТУРА 1. Крячков А.В., Сухинина И.В., Томшин В.К. Программирование на С и С++, практикум. М.: Изд-во Радио и связь, 1997. 2. Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ. М.: Наука, 1986. 3. Демидович Б.П., Марон И.А. Основы вычислительной математики, гл 4. М.: ФМЛ, 1970. 4. Калиткин . Численные методы. М., 1978. 14