1.1 Решение алгебраических и трансцендентных уравнений

advertisement
Лабораторная работа № 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
;
ba

getmaxx
 a.
ba
(4)
Аналогично, с учетом того, что нумерация по оси Y выполняется
сверху вниз, вычисляем коэффициенты  и  :
- если y  c , то iy  get max y :
- если y  d , то iy  0 :

 c    get max y;
 d    0;
getmaxy
;
dc

getmaxy
 d.
dc
(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 имеют разные знаки. Если, например,
a0
8
(b  a) , то для оси Y мы получаем
ix  
getmaxx
a  0,
ba
т.е. ось 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)!
i0
10
i
x 2 i 1
0
7.  ( 1)
(
2
i
)!
i0
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
интервале x0, 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  y2
x
;
y
1  y2
y
.
y
ЛИТЕРАТУРА
1. Крячков А.В., Сухинина И.В., Томшин В.К. Программирование на
С и С++, практикум. М.: Изд-во Радио и связь, 1997.
2. Касьянов В.Н., Сабельфельд В.К. Сборник заданий по практикуму
на ЭВМ. М.: Наука, 1986.
3. Демидович Б.П., Марон И.А. Основы вычислительной математики,
гл 4. М.: ФМЛ, 1970.
4. Калиткин . Численные методы. М., 1978.
14
Download