Работа посвящена исследованию методов приближенного решения уравнений. Рассмотрены следующие методы приближенногорешения уравнений: метод половинного деления, метод хорд, метод касательных, комбинированный метод, построены компьютерные модели всех изученных методов на языке программирования Free Pascal. Модели позволили провести сравнительный анализ изученных методов и выбрать среди них оптимальный.
Вложение | Размер |
---|---|
start_v_nauku.docx | 161.16 КБ |
Городская научно – практическая конференция
«Старт в науку»
Исследование методов приближенного решения уравнений
Секция: современное программирование
Автор: Сергеева Мария Сергеевна,
11 «Б» класс, МБОУ «Средняя общеобразовательная школа № 27»
Руководитель: Сергеева Светлана Александровна
Учитель информатики 1 категории,
МБОУ «Средняя общеобразовательная школа № 27»
г.Дзержинск
2012г.
Оглавление
Введение 3
Заключение 19
Литература 20
Введение
С термином "уравнение" мы знакомимся еще в начальной школе, а задача «решить уравнение», вероятно, является наиболее часто встречающейся задачей не только на уроках математики.
На уроке алгебры при решении уравнений возникают ситуации, когда путем алгебраических преобразований уравнение решить невозможно. Для решения данной проблемы, существуют методы приближенного решения уравнений.
Актуальность темы обоснована тем, что с развитием компьютерной техники методы решения уравнений, основанные на большом количестве повторов, получают возможность широкого применения.
Цель: нахождение оптимального метода приближенного решения уравнения.
Задачи:
Нелинейные уравнения можно разделить на 2 класса - алгебраические и трансцендентные. Алгебраическими уравнениями называют уравнения, содержащие только алгебраические функции (целые, рациональные, иррациональные). В частности, многочлен является целой алгебраической функцией. Уравнения, содержащие другие функции (тригонометрические, показательные, логарифмические и др.) называются трансцендентными.
Методы решения нелинейных уравнений делятся на две группы:
Точные методы решения уравнений основываются на поиске равносильных преобразований алгебраических выражений, например, перенос слагаемых из одной части уравнения в другую с противоположным знаком, деление обеих частей уравнения на одинаковое число не равное 0, а также точные способы решений позволяют записать корни уравнения в виде некоторого конечного соотношения (формулы). Точные решения существуют только для некоторых уравнений определенного вида (линейные, квадратные, тригонометрические и др.), поэтому для большинства уравнений приходится использовать методы приближенного решения с заданной точностью (графические или численные). В первую очередь это относится к большинству трансцендентных уравнений. Доказано также, что нельзя построить формулу, по которой можно было бы решить произвольное алгебраическое уравнение выше четвертой степени.
Точные методы решения Приближенные методы решения
Например, уравнение x3+cos x=0 нельзя решить путем равносильных алгебраических преобразований. Но это уравнение можно решать приближенно графическими и численными методами.
Решение уравнения проводят численно в два этапа. На первом этапе производится отделение корней - поиск интервалов, на которых содержится только по одному корню. Второй этап решения связан с уточнением корня на выбранном интервале (определением значения корня с заданной точностью). Далее будут рассмотрены несколько численных методов и приведены алгоритмы нахождения корней уравнений.
Отделение корней уравнения может проводиться графически, т.е. путем построения графика функции y=f(x). Для уравнения вида f (x) = 0, где f(x) – некоторая непрерывная функция, корень (или корни) этого уравнения являются точкой (или точками) пересечения графика функции с осью абсцисс.
Приближенные методы
Решение уравнений с заданной точностью
Отделение корней
Численные методы
Метод половинного деления
Метод хорд
Метод касательных
Комбинированный метод
Графический метод
f(x)=0,
где f(x) - непрерывная функция
Y
y=f(x)
x3
x2
x1
X
Отделение корней уравнения можно осуществить путем построения компьютерных моделей:
При построении графика функции корни уравнения можно получить лишь с небольшой степенью точности. Поэтому, чтобы эти значения получить с любой заданной степенью точности, необходимо применять методы, которые позволяют «уточнять» найденные значения.
Рассмотрим методы уточнения корней и их основные идеи. Отметим следующий момент: при прочих равных условиях, тот метод уточнения корней будет более эффективен, в котором результат с той же погрешностью найден за меньшее число раз вычисления функции f(x).
1.1. Метод половинного деления
Самый простой из них – метод половинного деления, или иначе метод дихотомии. Метод дихотомии получил свое название от древнегреческого слова διχοτομία, что в переводе означает деление надвое. Его мы используем довольно часто. Допустим, играя в игру "Угадай число", где один игрок загадывает число от 1 до 100, а другой пытается его отгадать, руководствуясь подсказками "больше" или "меньше". Логично предположить, что первым числом будет названо 50, а вторым, в случае если оно меньше - 25, если больше - 75. Таким образом, на каждом этапе неопределенность неизвестного уменьшается в 2 раза. Т.е. даже самый невезучий в мире человек отгадает загаданное число в данном диапазоне за 7 предположений вместо 100 случайных утверждений.
Алгоритм метода половинного деления основан на теореме Больцано - Коши о промежуточных значениях непрерывной функции и следствии из неё.
Теорема Больцано - Коши: если непрерывная функция принимает два значения, то она принимает любое значение между ними.
Следствие (теорема о нуле непрерывной функции): если непрерывная функция принимает на концах отрезка положительное и отрицательное значения, то существует точка, в которой она равна 0.
Алгоритм:
f(a)*f(c)<0 (да) | f(a)*f(c)<0 (нет) |
Блок-схема метода половинного деления
конец
начало
нет
(B-A)/2<=E
X
X:=(А-В)/2
да
С:=(А+В)/2
А, В, Е
нет
да
F(A)*F(C)<0
A:=C
B:=C
1.2. Метод хорд
При решении уравнения методом хорд нелинейная функция f(x) на отделенном интервале [a, b] заменяется линейной, в качестве которой берется хорда – прямая, стягивающая концы нелинейной функции. Вычисляются значения функции на концах отрезка, и строится "хорда", соединяющая точки (a, f(a)) и (b, f(b)).
При решении нелинейного уравнения методом хорд задаются интервал [a,b] на котором существует только одно решение, и точность ε. Затем через две точки с координатами (a, f(a)) и (b, f(b)) проводим отрезок прямой линии (хорду) и определяем точку пересечения этой линии с осью абсцисс, точка c. Если при этом f(a)∙f(c)<0, то правую границу интервала переносим в точку с (b=c). Если указанное условие не выполняется, то в точку c переносится левая граница интервала (а=с). Поиск решения прекращается при достижении заданной точности |f(c)|< ε.
f(a)∙f(c)<0 (да) | f(a)∙f(c)<0 (нет) |
Запишем уравнение прямой, проходящей через точки с координатами (a, f(a)) и
(b, f(b)):
Прямая заданная полученным уравнением пересекает ось абсцисс при условии у=0. Найдем точку пересечения хорды с осью Х.
Итак,
Далее необходимо вычислить значение функции в точке с. Если | f(c) | < 0, то полученное число и есть корень уравнения с выбранной точностью, иначе необходимо построить следующую хорду и выполнить все рассмотренные ранее действия.
Блок-схема метода хорд
конец
C
начало
А, В, Е
C=A-FAFB-FA(B-A)
нет
да
нет
да
F(A)*F(C)>0
В:=С
А:=С
| F(C) | < E
1.3. Метод касательных
Метод касательных, иначе метод Ньютона впервые был предложен английским физиком, математиком и астрономом Исааком Ньютоном, под именем которого и обрел свою известность.
Идея, на которой основан метод касательных, аналогична той, которая реализована в методе хорд, только в качестве прямой берется касательная, проводимая в текущей точке данной функции f(x).
В одной из точек промежутка [a;b], в котором находится корень уравнения, например с, проведем касательную.
y = f(x)
Уравнение этой прямой y=kx + m.
Так как данная прямая является касательной и проходит через точку (c, f(c)), то
k=f '(c).
Отсюда следует:
y=f 'cx+m; fc=f 'cc+m; m=fc-f '(c)c
y=f 'cx+fc-f 'cc; y=f 'cx-c+f(c)
Найдем точку пересечения касательной с осью Х:
f 'cx-c+fc=0
x=c-f(c)f'(c)
Если f(x)<ε, то требуемая точность достигнута и x – корень уравнения; иначе, переменной с необходимо присвоить x, провести касательную через новую точку с и так продолжать до тех пор, пока f(x)<ε.
Осталось решить, что выбрать в качестве начального приближения с.
В этой точке должны совпадать знаки функции и её второй производной. А так как нами сделано допущение, что вторая и первая производные не меняют знак, то можно проверить условие f'x*f''x>0 на обоих концах интервала и в качестве начального приближения взять ту точку, где оно выполняется.
Блок-схема метода касательных
конец
начало
C
А, В, Е
нет
да
F (A)*F ’’(A) > 0
C:=B
C:=A
C≔C-F(C)F'(C)
нет
| F (C) | < E
да
1.4. Комбинированный метод хорд и касательных
Если выполняются условия:
то приближения корня x∈[a,b] уравнения fx=0 по методу хорд и по методу касательных подходят к значению этого корня с противоположных сторон. Поэтому для быстроты нахождения корня удобно применять оба метода одновременно. Т.к. один метод даёт значение корня с недостатком, а другой – с избытком, то достаточно легко получить заданную степень точности корня.
Алгоритм решения уравнения комбинированным методом:
а) по методу касательных: x1=x0-f(x0)f'(x0),
б) по методу хорд: x2=a-b-af(a)fb-f(a).
Если условие не выполняется, то нужно продолжить применение метода по предыдущей схеме.
В этом случае отрезок, на котором расположен корень, сужается и имеет вид [x1, x2].
Вычисления продолжаются до тех пор, пока не будет найдено такое значение ε, при котором x1 и x2 совпадут с точность ε.
Рассмотрим решение уравнения x3-sinx=0.
Компьютерная модель приближенного решения уравнений вида f(x)=0 состоит из двух частей:
//Установка графического режима экрана, описание переменных, необходимых при //работе программы, задание функции
Uses Graph,Crt;
label 1;
var gr,gm,n,i:integer;
x,y,A,B,E,C:real;
function f(x:real): real;
begin
f:=x*x*x-sin(x);
end;
begin
gr:=0;
InitGraph (gr,gm, '');
if GraphResult < > grOk then Halt (1);
SetColor (3); //задание цвета
//построение системы координат
Line (200,100,200,400);
Line (450,270,100,270);
Line (200,100,195,105);
Line (200,100,205,105);
Line (450,270,445,265);
Line (450,270,445,275);
OutTextXY (455,270, 'x');
OutTextXY (185,100, 'y');
OutTextXY (230,280, '1');
OutTextXY (150,280, '-1');
OutTextXY (210,240, '1');
OutTextXY (210,300, '-1');
//шкала по оси Х
x:=110;
while x<450 do
begin
line (trunc(x),265,trunc(x),275);
x:=x+30
end;
//шкала по оси Y
y:=120;
while y<400 do
begin
line (195,trunc(y),205,trunc(y));
y:=y+30
end;
//построение графика
x:=-3;
while x<3 do
begin
x:=x+0.001;
y:=f(x);
PutPixel (trunc(x*30)+200,-trunc(y*30)+270,5)
end;
Для построения графика используется алгоритмическая конструкция «цикл». График строится путем построения точек с координатами (х; у) значения аргумента меняются от
-3 до 3 с шагом 0,001, а значения функции вычисляются по формуле y=x3-sinx. Полученные точки строим с помощью оператора PutPixel, в скобках указываем координаты точек, которые надо построить и номер цвета, которым будет построен график.
Координаты точек, которые строятся, должны быть целыми числами, поэтому используется функция trunc, чтобы отбросить дробную часть.
Пиксель – это очень маленькая точка экрана, поэтому для построения графика функции координаты х и y необходимо умножить на величину единичного отрезка который я взяла (т.е. на 30, тогда увеличивается масштаб). Начало компьютерной системы координат расположено в левом верхнем углу, а наша система координат смещена на 200 пикселей по оси Х и на 270 пикселей по оси Y, поэтому прибавляем 200 и 270. Ось Y на компьютере направлена сверху вниз, наша ось Y снизу вверх, поэтому еще необходим знак «минус» перед значением функции y.
График функции y=x3-sinx.
По графику функции можно сделать вывод, что рассмотренное уравнение имеет три корня, расположенные на отрезках [-1; -0,7], [-0,3, 0,3], [0,7; 1].
Далее в пунктах 2.2 – 2.5 будут рассмотрены компьютерные модели второй части программы приближенного решения уравнения.
CloseGraph; // закрытие графического режима и возврат в текстовый режим
write ('vvedi kolichestvo korney ');
readln (n);
for i:=1 to n do
begin
write ('vvedite levuy granicu otrezka ');
readln (A);
write ('vvedite pravuy granicu otrezka ');
readln (B);
write ('vvedite tochnost ');
readln (E);
Repeat
C:=(A+B)/2;
writeln(c:10:8);
if abs (f(C))<=0.0001 then goto 1;
if f(A)*f(C)<0
then B:=C
else A:=C
until (B-A)/2<=E;
1: writeln ('koren uravneniya ', c:10:8);
end;
Результаты компьютерного эксперимента
vvedi kolichestvo korney 3
vvedite levuy granicu otrezka -1
vvedite pravuy granicu otrezka -0.7
vvedite tochnost 0.001
-0.85000000
-0.92500000
-0.96250000
-0.94375000
-0.93437500
-0.92968750
-0.92734375
-0.92851563
koren uravneniya -0.92851563
vvedite levuy granicu otrezka -0.3
vvedite pravuy granicu otrezka 0.3
vvedite tochnost 0.001
0.00000000
koren uravneniya 0.00000000
vvedite levuy granicu otrezka 0.7
vvedite pravuy granicu otrezka 1
vvedite tochnost 0.001
0.85000000
0.92500000
0.96250000
0.94375000
0.93437500
0.92968750
0.92734375
0.92851563
koren uravneniya 0.92851563
Таким образом, решения уравнения x1≈-0,92851563
x2≈0,00000000
x3≈0,92851563
begin
clrscr;
write ('vvedi kolichestvo korney ');
readln (n);
for i:=1 to n do
begin
write ('vvedite levuy granicu otrezka ');
readln (A);
write ('vvedite pravuy granicu otrezka ');
readln (B);
write ('vvedite tochnost ');
readln (E);
repeat
c:=a-(f(a)/(f(b)-f(a)))*(b-a);
writeln (c:10:8);
if f(c)*f(a)>0 then a:=c else b:=c;
until abs(f(c))
writeln ('koren uravneniya ',c:10:8);
end;
readln
end.
Результаты компьютерного эксперимента
vvedi kolichestvo korney 3
vvedite levuy granicu otrezka -1
vvedite pravuy granicu otrezka -.7
vvedite tochnost 0.001
-0.89655455
-0.92513533
-0.92825863
koren uravneniya -0.92825863
vvedite levuy granicu otrezka -0.3
vvedite pravuy granicu otrezka 0.3
vvedite tochnost 0.001
0.00000000
koren uravneniya 0.00000000
vvedite levuy granicu otrezka 0.7
vvedite pravuy granicu otrezka 1
vvedite tochnost 0.001
0.89655455
0.92513533
0.92825863
koren uravneniya 0.92825863
Таким образом, решения уравнения x1≈-0,92825863
x2≈0,00000000
x3≈0,92825863
function f1(x:real):real;// первая производная
begin
f1:=3*x*x-cos(x);
end;
function f2(x:real):real;//вторая производная
begin
f2:=6*x+sin(x);
end;
begin
clrscr;
write ('vvedi kolichestvo korney ');
readln (n);
for i:=1 to n do
begin
write ('vvedite levuy granicu otrezka ');
readln (A);
write ('vvedite pravuy granicu otrezka ');
readln (B);
write ('vvedite tochnost ');
readln (E);
if f(a)-f2(a)>0 then c:=a else c:=b;
repeat
writeln(c:10:8);
c:=c-f(c)/f1(c);
until abs(f(c))
writeln ('koren uravneniya ', c:10:8);
end;
readln
end.
Результаты компьютерного эксперимента
vvedi kolichestvo korney 3
vvedite levuy granicu otrezka -1
vvedite pravuy granicu otrezka -0.7
vvedite tochnost 0.001
-1.00000000
-0.93554939
koren uravneniya -0.92870181
vvedite levuy granicu otrezka -0.3
vvedite pravuy granicu otrezka 0.3
vvedite tochnost 0.001
-0.30000000
0.09180784
-0.00186023
koren uravneniya 0.00000002
vvedite levuy granicu otrezka 0.7
vvedite pravuy granicu otrezka 1
vvedite tochnost 0.001
1.00000000
0.93554939
koren uravneniya 0.92870181
Таким образом, решения уравнения x1≈-0,92870181
x2≈0,00000002
x3≈0,92870181
var a,b:real;
e,e1:real;
x0,x1,x2:real;//дополнительные преременные для данного метода
i,n:integer;
function f(var x:real):real;
begin
f:= X*X*X-sin(x);
end;
function f1(var x:real):real; //первая производная
begin
f1:= 3*X*X-cos(x);
end;
function f2(var x:real):real; //вторая производная
begin
f2:= 6*X+sin(x);
end;
begin
clrscr;
write('vvedi kolicestvo korney '); readln(n);
for i:=1 to n do
begin
write('vvedi levu granicu '); readln(a);
write('vvedi pravu granicu '); readln(b);
write('vvedi tochnost '); readln(e);
if f(a)*f2(a)>0
then
begin
x0:=a;
x1:=x0-f(x0)/f1(x0);
x2:=a-((b-a)*f(a)/(f(b)-f(a)));
e1:=(x1+x2)/2
end
else
begin
x0:=b;
x1:=x0-f(x0)/f1(x0);
x2:=a-((b-a)*f(a)/(f(b)-f(a)));
e1:=(x1+x2)/2
end;
while abs(e1-x1)>e do
begin
a:=x1;
b:=x2;
x1:= a-f(a)/f1(a);
x2:= a-((b-a)*f(a)/(f(b)-f(a)));
e1:=(x1+x2)/2;
writeln(x1:10:8);
end;
writeln ('koren uravneniya ',x1:10:8);
end;
readln
end.
Результаты компьютерного эксперимента
vvedi kolicestvo korney 3
vvedi levu granicu -1
vvedi pravu granicu -.7
vvedi tochnost 0.001
-0.92870181
koren uravneniya -0.92870181
vvedi levu granicu -0.3
vvedi pravu granicu 0.3
vvedi tochnost 0.001
0.00186023
koren uravneniya 0.00186023
vvedi levu granicu 0.7
vvedi pravu granicu 1
vvedi tochnost 0.001
0.92870181
koren uravneniya 0.92870181
Таким образом, решения уравнения x1≈-0,92870181
x2≈0,00186023
x3≈0,92870181
Все рассмотренные методы, дают одинаковый результат с выбранной точностью.
Для выявления наиболее оптимального метода решения нелинейных уравнений были решены 5 различных уравнений предложенными методами:
Урав-нения | f(x) – функция | f1(x) – первая производная | f2(x) – вторая производная |
№ 2 | f(x) =x*x*x +cos(x) | f1(x) =3*x*x-sin(x) | f2(x) = 6*x-cos(x) |
№ 3 | f(x) = exp(x*ln(5))-6*x-3 | f1(x) = exp(x*ln(5))*ln(5)-6 | f2(x)=sqr(ln(5))*exp(x*ln(5)) |
№ 4 | f(x) = 3*x*x*x*x*x+x*x*x-2 | f1(x) = 15*x*x*x*x+3*x*x | f2(x) =60*x*x*x+6*x |
№ 5 | f(x)=x*x*x-14*x*x+x+exp(x) | f1(x) = 3*x*x-28*x+1+exp(x) | f2(x) =6*x-28+exp(x) |
В следующую таблицу выписано количество шагов, после которых был получен корень уравнения для каждого метода:
Уравнения | № 1 | № 2 | № 3 | № 4 | № 5 | ||||
Количество корней | 3 | 1 | 2 | 1 | 2 | ||||
[-1; | [-0,3; 0,3] | [0,7;1] | [-1; | [-1; | [1; | [0; | [-1; | [0; | |
Метод половинного деления | 9 | 1 | 9 | 10 | 10 | 10 | 10 | 10 | 10 |
Метод хорд | 4 | 2 | 4 | 6 | 4 | 12 | 9 | 17 | 14 |
Метод касательных | 3 | 4 | 3 | 3 | 3 | 5 | 4 | 6 | 7 |
Комбинированный метод | 2 | 2 | 2 | 3 | 2 | 3 | 3 | 4 | 4 |
Для наиболее четкого результата были подсчитаны и сравнены средние значения:
Методы | Среднее |
Половинного деления | 8,9 |
Хорд | 8 |
Касательных | 4,2 |
Комбинированный | 2,8 |
На круговой диаграмме хорошо видно, что наиболее оптимальным для нахождения приближенного корня уравнения является комбинированный метод, т.к. имеет наименьшее количество шагов для нахождения корня уравнения. Второе место занимает метод касательных, далее идут методы хорд и половинного деления.
Данная компьютерная модель позволяет решать уравнения, для которых нет точных методов решения. Кроме того, эту компьютерную модель можно использовать на уроках математики для проверки решений уравнений данного вида.
Заключение
Были изучены методы приближенного решения уравнений:
Составлены компьютерные модели всех методов на языке программирования Free Pascal.
Среди рассмотренных методов выбран оптимальный.
Таким образом, все задачи решены и цель достигнута.
Литература:
Интернет-ресурсы
Владимир Высоцкий. "Песня о друге" из кинофильма "Вертикаль"
Акварельные гвоздики
Снежная зима. Рисуем акварелью и гуашью
Загадка Бабы-Яги
Тупое - острое