
_01_04_Алгоритмы.ppt
- Количество слайдов: 71
1 АЛГОРИТМЫ Запись базовых алгоритмических конструкций на языке высокого уровня (Бейсик, Паскаль, Си - на выбор). Понятие переменной, оператора цикла и условия (примеры использования).
АЛГОРИТМ (Д. Кнут) Алгоритм- это свод конечного числа правил, задающих последовательность выполнения операций при решении той или иной конкретной задачи. Для алгоритма характерны следующие пять особенностей: конечность - завершаемость после выполнения конечного числа шагов; определенность - однозначность; ввод - исходные данные; вывод - результат; эффективность - выполнимость любой операции за конечное время. В вырожденных случаях ввод и (или) вывод могут отсутствовать.
(ВИКИПЕДИЯ) Алгори тм, от имени учёного аль-Хорезми (перс. [ ﺧﻮﺍﺭﺯﻣی al-Khwārazmī]) — точный набор инструкций, описывающих порядок действий исполнителя достижения результата решения задачи за конечное время. В старой трактовке вместо слова «порядок» использовалось слово «последовательность» , но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок» .
Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы. Таким образом, некоторые инструкции должны выполняться строго после завершения работы инструкции, от которых они зависят. Независимые инструкции или инструкции ставшими независимыми из-за завершения работы инструкций, от которых они зависят, могут выполняться в произвольном порядке, параллельно или одновременно, если это позволяет используемые процессор и операционная система.
Ранее часто писали «алгорифм» , сейчас такое написание используется редко, но, тем не менее, имеет место (например, Нормальный алгорифм Маркова). Часто в качестве исполнителя выступает некоторый механизм (компьютер, токарный станок, швейная машина), но понятие алгоритма необязательно относится к компьютерным программам, так, например, чётко описанный рецепт приготовления блюда также является алгоритмом, в таком случае исполнителем является человек.
Определения алгоритма Единого «истинного» определения понятия «алгоритм» нет. «Алгоритм — это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами: конечность, определённость, ввод, вывод, эффективность» . (Д. Э. Кнут) «Алгоритм — это всякая система вычислений, выполняемых по строго определённым правилам, которая после какоголибо числа шагов заведомо приводит к решению поставленной задачи» . (А. Колмогоров) «Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату» . (А. Марков)
«Алгоритм — точное предписание о выполнении в определённом порядке некоторой системы операций, ведущих к решению всех задач данного типа» . (Философский словарь / Под ред. М. М. Розенталя) «Алгоритм — строго детерминированная последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное, записанная с помощью понятных исполнителю команд» . (Н. Д. Угринович, учебник «Информатика и информ. технологии» ) «Алгоритм — это последовательность действий, направленных на получение определённого результата за конечное число шагов» .
Формальные признаки алгоритмов Дискретность — алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов. При этом для выполнения каждого шага алгоритма требуется конечный отрезок времени, то есть преобразование исходных данных в результат осуществляется во времени дискретно.
Детерминированность — определённость. В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных. В современной трактовке у разных реализаций одного и того же алгоритма должен быть изоморфный граф. С другой стороны, существуют вероятностные алгоритмы, в которых следующий шаг работы зависит от текущего состояния системы и генерируемого случайного числа. Однако при включении метода генерации случайных чисел в список «исходных данных» , вероятностный алгоритм становится подвидом обычного.
Понятность — алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд. Завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0.
Массовость — алгоритм должен быть применим к разным наборам исходных данных. Результативность — завершение алгоритма определёнными результатами. Алгоритм содержит ошибки, если приводит к получению неправильных результатов либо не даёт результатов вовсе. Алгоритм не содержит ошибок, если он даёт правильные результаты для любых допустимых исходных данных
АЛГОРИТМ (Ю. Шафрин) Алгоритм – это конечная последовательность предписаний, исполнение которых позволяет с помощью конечного числа шагов получить решение задачи, однозначно определяемое исходными данными
Слово «алгоритм» происходит от имени учёного Абу Абдуллах Мухаммеда ибн Муса аль-Хорезми. Около 825 года он написал сочинение, в котором впервые дал описание придуманной в Индии позиционной десятичной системы счисления. В первой половине XII века книга аль-Хорезми в латинском переводе проникла в Европу. Переводчик, имя которого до нас не дошло, дал ей название Algoritmi de numero Indorum ( «Алгоритми о счёте индийском» ). По-арабски же книга именовалась Китаб аль-джебр вальмукабала ( «Книга о сложении и вычитании» ). Из оригинального названия книги происходит слово Алгебра.
Эффективность алгоритмов Хотя в определении алгоритма требуется лишь конечность числа шагов, требуемых для достижения результата, на практике выполнение даже хотя бы миллиарда шагов является слишком медленным. Также обычно есть другие ограничения (на размер программы, на допустимые действия). В связи с этим вводят такие понятия как сложность алгоритма (временна я, по размеру программы, вычислительная и др. ).
Форма алгоритмов Алгоритм может быть записан словами и изображён схематически. Обычно сначала (на уровне идеи) алгоритм описывается словами, но по мере приближения к реализации он обретает всё более формальные очертания и формулировку на языке, понятном исполнителю (например, машинный код). Например, для описания алгоритма применяются блок-схемы. Другим вариантом описания, не зависимым от языка программирования, является псевдокод.
Запись алгоритма 1. Словесная (… «Кулинарная книга» ) 2. В виде блок-схемы 3. На языке высокого уровня
Обозначения блок-схем Начало / Конец Документ (вывод) Данные (Ввод) Процесс Диск Процедура Решение (условие) Подготовка (заголовок цикла) Узел (метка) Передача информации
Базовые конструкции (6!) 1. Следования 2. Перехода (goto) Затрудняет чтение алгоритма 3. Ветвления (if) 4. Цикл с параметром 5. Цикл с предусловием ( «ПОКА» ) 6. Цикл с постусловием ( «ДО» )
Пример конструкции следования Площадь треугольника по трём сторонам Начало Ввести a, b, c – стороны Вычислить полупериметр p Вычислить выражение S = p(p-a)(p-b)(p-c) Начало a, b, c p=(a+b+c)/2 S=p(p-a)(p-b)(p-c) Вычислить кв. корень из S Вывести результат Конец Пл. тр-ка= S Конец
Программа конструкции следования Program S_trg; (* Площадь треугольника по 3 -м сторонам *) var a, b, c : real; p, S: real; Begin Write(‘Ввести a, b, c ’); Read(a, b, c); p : = (a + b + c)/2; S : = p*(p - a)*(p - b)*(p - c); S : = SQRT (S); Writeln(‘Пл. тр-ка =’, S); End.
Пример конструкции ветвления Вычисление действительных корней квадратного уравнения Начало Ввести a, b, c – коэффициенты Вычислить дискриминант d Если d <0, то «корней нет» ИНАЧЕ Начало a, b, c d=b 2 – 4 ac d<0 Вычислить кв. корень из d Вычислить корни Вывести результат Конец X 1, 2=(-b ± d)/2 a Корни x 1, x 2 Конец корней нет
Программа конструкции ветвления Program Roots; (* Действительные корни кв. уравнения *) var a, b, c : real; d, X 1, X 2: real; Begin Write(‘Ввести a, b, c ’); Read(a, b, c); d : = b*b – 4*a*c; if d<0 then Writeln(‘Корней нет’) else begin d: =SQRT(d); X 1: =(-b + d)/2/a; X 2: =(-b - d)/2/a; Writeln(‘Корень X 1 =’, X 1) ; Writeln(‘Корень X 2 =’, X 2) ; end; End.
Пример конструкции цикла с параметром Вычисление суммы N элементов массива Начало Ввести массив a Подготовить суммирование S = 0 Организовать цикл суммирования I =1, N Тело цикла: S = S + a(i) Вывести результат Конец Начало Массив а S = 0 I =1, N S = S + a(i) S Конец
Программа конструкции цикла с параметром Program Loop_1; (* Сумма элементов массива *) Const NN = 200; Type TMas = array[1. . NN] of real; var Mas : TMas; S : real; I, N : integer Begin Write(‘Ввести N и массив из N эл-тов’); Readln(N); For i: =1 to N do Readln(Mas[i]); (* For i: =1 to N do Mas[i]: = 100*Random; *) (* For i: =1 to N do Mas[i]: = i; *) (* … *) S: = 0; For i: =1 to N do S : = S + Mas[i]; Writeln(‘Сумма =’, S) ; End. downto
Цикл с постусловием ( «до» ) «Делай, пока не выполнится условие» ПРИМЕР: «Цикл задачи» … Repeat …(* АЛГОРИТМ ЗАДАЧИ *) Until readrey = #27; (* Выход из цикла по нажатию <ESC> *) END. Пауза до нажатия любой клавиши Repeat until Keypressed;
Цикл с предусловием ( «пока» ) «Пока выполняется условие делай …» ПРИМЕР: деление отрезка до заданной точности … While L>eps do begin L: =L/2; INC(k); (* Счётчик делений *) End; …
Понятие переменной Объекты действий алгоритмов «Контейнеры» для сохранения значений определённого типа ТРИ характеристики переменной: АДРЕС, где расположена в памяти ТИП хранимого значения (допустимые операции) ЗНАЧЕНИЕ самой переменной
2 ПРОЦЕДУРЫ И ФУНКЦИИ Встроенные алгоритмы (процедуры и функции) и их оформление на языке Бейсик (Паскаль, Си - на выбор). Примеры записи алгоритмов.
При решении сложных объемных задач часто целесообразно разбивать их на более простые. Метод последовательной детализации позволяет составить алгоритм из действий, которые, не являясь простыми, сами представляют собой достаточно самостоятельные алгоритмы. В этом случае говорят о вспомогательных алгоритмах или подпрограммах. Использование подпрограмм позволяет сделать основную программу более наглядной, понятной, а в случае, когда одна и та же последовательность команд встречается в программе несколько раз, даже более короткой и эффективной.
Существует два вида подпрограмм: процедуры и функции, определяемые программистом. Процедурой называется именованная последовательность инструкций, реализующая некоторое действие. Функция отличается от процедуры тем, что она должна обязательно выработать значение определенного типа. Процедуры и функции, используемые в программе, должны быть соответствующим образом описаны до первого их упоминания. Вызов процедуры или функции производится по их имени.
Подпрограммы могут иметь параметры (значения, передаваемые в процедуру или функцию в качестве аргументов). При описании указываются так называемые формальные параметры (имена, под которыми будут фигурировать передаваемые данные внутри подпрограммы) и их типы. При вызове подпрограммы вместе с ее именем должны быть заданы все необходимые параметры в том порядке, в котором они находятся в описании. Значения, указываемые при вызове подпрограммы, называются фактическими параметрами.
Существует два способа передачи фактических параметров в подпрограмму: по значению и по ссылке. В первом случае значение переменной-фактического параметра при вызове подпрограммы присваивается локальной переменной, являющейся формальным параметром подпрограммы. Что бы потом ни происходило с локальной переменной, это никак не отразится на соответствующей глобальной. Для одних задач это благо, но иногда требуется произвести в подпрограмме действия над самими переменными, указанными в качестве фактических параметров. На помощь приходит второй способ. Происходит следующее: при обращении к подпрограмме не происходит формирования локальной переменной - формального параметра. Просто на время выполнения подпрограммы имя этой локальной переменной будет указывать на ту же область памяти, что и имя соответствующей глобальной переменной. Если в этом случае изменить локальную переменную, изменятся данные и в глобальной.
Передача параметров по ссылке отличается тем, что при описании подпрограммы перед именем переменнойформального параметра ставится служебное слово Var. Теперь использование в качестве фактических параметров выражений или непосредственных значений уже не допускается - они должны быть именами переменных.
Формат описания процедуры: Procedure <Имя процедуры> ( <Имя форм. параметра 1>: <Тип>; < Имя форм. параметра 2>: <Тип>); <Раздел описаний> Begin <Тело процедуры> End; Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы (описание процедур и функций - в том числе). Однако все описанные здесь объекты "видимы" лишь в этой процедуре. Они здесь локальны также, как и имена формальных параметров. Объекты, описанные ранее в разделе описаний основной программы и не переопределенные в процедуре, называются глобальными для этой подпрограммы и доступны для использования. Легко заметить схожесть структуры программы целиком и любой из ее процедур. Действительно, ведь и процедура и основная программа реализуют некий алгоритм, просто процедура не дает решения всей задачи. Отличие в заголовке и в знаке после End.
Пример использования процедуры Задача: "Расположить в порядке неубывания три целых числа". Program Pr; Var S 1, S 2, S 3 : Integer; Procedure Swap(Var A, B: Integer); {Процедура Swap с параметрамипеременными} Var C : Integer; {C - независимая локальная переменная} Begin C: =A; A: =B; B: =C {Меняем местами содержимое A и B} End; Begin Writeln('Введите три числа'); Readln(S 1, S 2, S 3); If S 1>S 2 Then Swap(S 1, S 2); If S 2>S 3 Then Swap(S 2, S 3); If S 1>S 2 Then Swap(S 1, S 2); Writeln('Числа в порядке неубывания: V', S 1, S 2, S 3) End.
Формат описания функции: Function <Имя функции> (<Имя форм. параметра 1>: <Тип>; < Имя форм. параметра 2>: <Тип>) : <Тип результата>; <Раздел описаний> Begin <Тело функции> End; В теле функции обязательно должна быть хотя бы команда присвоения такого вида: <Имя функции>: =<Выражение>; Указанное выражение должно приводить к значению того же типа, что и тип результата функции, описанный выше. Вызов процедуры представляет в программе самостоятельную инструкцию: <Имя процедуры>(<Фактический параметр 1>, < Фактический параметр 2>? ); Типы фактических параметров должны быть такими же, что и у соответсвующих им формальных. Вызов функции должен входить в выражение. При вычислении значения такого выражения функция будет вызвана, действия, находящиеся в ее теле, будут выполнены, в выражение будет подставлено значение результата функции.
Пример использования функции Задача: "Найти максимальное из трех введенных чисел". Для решения воспользуемся описанием функции, принимающей значение максимального из двух чисел, которые передаются в нее в виде параметров. Program Fn; Var A, B, C : Real; Function Max(A, B: Real): Real; {Описываем ф-цию Max с формальными} Begin {параметрами A и B, которая принимает } If A>B Then Max: =A {значение максимального из них } Else Max: =B {Здесь A и B - локальные переменные } End; Begin Writeln('Введите три числа'); Readln(A, B, C); Writeln('Максимальным из всех является ', Max(A, B), C)) End.
Обратите внимание на краткость тела основной программы и на прозрачность действий внутри функции. Формальные параметры A и B, используемые в подпрограмме, не имеют никакого отношения переменным A и B, описанным в основной программе.
3 АЛГОРИТМЫ ЧИСЛЕННОГО ИНТЕГРИРОВАНИЯ (КВАДРАТУРЫ) Алгоритм квадратур. Запись алгоритма формулы трапеций (Симпсона - на выбор) в виде блок-схемы и на одном из языков программирования.
(Заварыкин В. М. и др. Численные методы – М. Просвещение. 1990 г. ) ПОСТАНОВКА ЗАДАЧИ ЧИСЛЕННОГО ИНТЕГРИРОВАНИЯ При вычислении определенного интеграла где f(x) непрерывная на отрезке [а; b] функция, иногда удается воспользоваться известной формулой Ньютона — Лейбница: Здесь F(х) — одна из первообразных функций f(х) (т. е. такая функция, что F’(х)=f(х).
Однако даже в тех, практически редких, случаях, когда первообразную удается явно найти в аналитической форме, не всегда удается довести до числового ответа значение определенного интеграла. Если к тому же учесть, что иногда подынтегральная функция вовсе задается таблицей или графиком, то становится понятным, почему интегрирование по формуле не получает широкого применения на практике. В подобных случаях применяют различные методы приближенного (численного) интегрирования. Формулы, используемые для приближенного вычисления однократных интегралов, называют квадратурными формулами.
Простой прием построения квадратурных формул состоит в том, что подынтегральная функция f(х) заменяется на отрезке [а; b] интерполяционным многочленом, например многочленом Лагранжа Ln(х), и получается приближенное равенство Подобный подход удобен тем, что он приводит к алгоритмам, легко реализуемым на ЭВМ и позволяющим получать результат с достаточной точностью. При этом, естественно, предполагается, что отрезок [а; b] разбит на n частей точками а=х0, х1, …, xn = b, наличие которых подразумевается при построении многочлена Ln(х).
Численное интегрирование (1) Метод трапеций – подынтегральная функция заменяется интерполяционным многочленом первой степени на точках a, b (…или на дополнительных точках сетки… ) Формула точна для линейных функций
м. ТРАПЕЦИЙ? Y 0 … a h … b X
Блок-схема и процедура a, b, n h=(b-a)/n y=[f(a)+f(b)]/2 X = a+ h i=1, n-1 y=y+f(x) x=x+h Intgr= y*h Выход: Intgr Procedure TRAPEC(a, b: real; N: integer; var Intgr: real); var i: integer; h: real; begin h: =(b-a)/N; y: =(F(a)+F(b))/2; x: =a+h; i: =1; while i<N do begin y: = y + F(x); x: =x+h; INC(I); end; Intgr: =y*h; end;
Численное интегрирование (2) Метод Симпсона – подынтегральная функция заменяется интерполяционным многочленом второй степени на точках a, (a+b)/2, b Формула точна для функций-полиномов до 3 -ей степени
К технологии м. Симпсона n – чётное!
БЛОК_СХЕМА МЕТОДА СИМПСОНА a, b, N h=(b-a)/N y = 0 x = a I = 2, n, 2 y = y+f(x)+4*f(x+h)+f(x+2 h) X = x+2 h Intgr =y*h/3 Intgr N – чётное!
Процедура м. Симпсона Procedure SIMPS(a, b: real; N: integer; var Intg: real); var i: integer; h: real; begin h: =(b-a)/N; y: =0; x: =a; i: =2; while i<=N do begin y: = y + F(x)+4*F(x+h)+F(x+2*h); x: =X+2*h; INC(I, 2); end; Intgr: =y*h/3; end;
СЧЁТ С ЗАДАННОЙ ТОЧНОСТЬЮ Если требуются вычисления с относительной погрешностью = Rn/In, используют двойной пересчёт с измельчением сетки ( n -> 2 n) Если , то I 4 n, … = 3 для м. трапеций, = 15 для м. Симпсона (правило Рунге)
ПРОЦЕДУРА м. ТРАПЕЦИЙ (точность ) procedure Trapeciy(f: Func; a, b: real; eps: real; var Intg: real; var k: integer); const mu=3; var In 1, I 2 n: real; e, s, h: real; i, n: integer; fl: boolean; begin n: =1; In 1: =(b-a)*(f(a)+f(b))/2; fl: =False; Repeat n: =n*2; h: =(b-a)/n; s: =0; for i: =1 to n div 2 do s: =s+f(a+(2*i-1)*h); I 2 n: =In 1/2+h*s; Type func=function(x: real): real; e: =ABS((I 2 n-In 1)/I 2 n)/mu; function f 1(x: real): real; far; if e<eps then fl: =True begin else In 1: =I 2 n; f 1: =x*x*x*x+x*x+x+1; until fl; end; Intg: =In 1; k: =n end; {Trapeciy}
ПРОЦЕДУРА м. СИМПСОНА (точность ) procedure Simpson(f: Func; a, b: real; eps: real; var Intg: real; var k: integer); const mu=15; var Rn, Qn, In 1, I 2 n: real; e, s, h: real; i, n: integer; fl: boolean; begin n: =2; Rn: =(f(a)+f(b))/6; Qn: =f((a+b)/2); In 1: =(b-a)*(Rn+2*Qn/3); fl: =False; Repeat n: =n*2; h: =(b-a)/n; Rn: =Rn/2+Qn/6; s: =0; for i: =1 to n div 2 do s: =s+f(a+(2*i-1)*h); Qn: =2*s/n; I 2 n: =(b-a)*(Rn+2*Qn/3); e: =ABS((I 2 n-In 1)/I 2 n)/mu; if e<eps then fl: =True else In 1: =I 2 n; until fl; Intg: =In 1; k: =n end;
Оптимальные алгоритмы двойного пересчёта Не вычислять f(x) в «старых» точках! Точки первой сетки Доп. точки второй м. Трапеций Доп. точки третьей
Оптимальный алгоритм м. Симпсона
4 РЕШЕНИЕ F(x) = 0 Алгоритмы численного решения уравнения F(x)=0. Запись алгоритма метода простых итераций (половинного деления, хорд, Ньютона - на выбор) в виде блок-схемы и на одном из языков программирования.
Этапы решения 1. ОТДЕЛЕНИЕ КОРНЯ (интервал, на концах которого функция меняет знак) 2. УТОЧНЕНИЕ КОРНЯ (одним из методов)
БЛОК-СХЕМА ОТДЕЛЕНИЯ КОРНЕЙ a, b, N Печать интервалов, на концах которых функция меняет знак h = (b-a)/N x 1 = a; x 2 = a + h i = 1, N f(x 1)·f(x 2)<0 x 1 = x 2; x 2 = x 2 + h конец x 1, x 2
Пусть задана f(x) и требуется найти корень f(x) = 0. Предположим, найден отрезок [a, b] такой, что f(a)·f(b) < 0. Тогда (т. Больцано. Коши) внутри отрезка существует точка c, в которой значение функции f(c) = 0, c (a, b) М. Бисекций – построение системы вложенных отрезков, на концах которых функция принимает значения разных знаков. Каждый последующий отрезок – деление пополам предыдущего. Можно найти нуль функции с любой заданной точностью. Если точность , то деление до тех пор, пока длина не станет меньше 2. Сходится для любых НЕПРЕРЫВНЫХ функций (в том числе недифференцируемых).
Скорость сходимости невелика. Для точности необходимо N итераций: Для получения каждых трёх верных десятичных знаков необходимо совершить около 10 итераций Если несколько корней, то процесс сходится к одному из них. Метод неприменим для отыскания кратных корней чётного порядка. Для кратных корней нечётного порядка – менее точен.
Блок-схема a, b, , N N = 0 x= (a + b)/2; N = N + 1 |f(x)|< f(x)>0 a=x b=x x, N End да да
ПРОЦЕДУРА м. БИСЕКЦИИ Function bisec(f: Func; a, b: real; var x: real): Boolean; Var fa, w : real; begin writeln('f(a)=', f(a), ' f(b)=', f(b)); bisec: =false; fa: =f(a); if fa*f(b)>0 then exit; x: =(a+b)/2; writeln('сходимость м. половинного деления'); repeat w: =f(x); if w=0 then begin bisec: =true; exit; end; if fa*w>0 then a: =x else b: =x; x: =(a+b)/2; write(x: 16: 7); until (x=a)or(x=b); writeln; bisec: =true; end;
М. ПРОСТЫХ ИТЕРАЦИЙ (послед. приближений) Замена исходного уравнения эквивалентным уравнением x = (x) и построение последовательности , сходящейся при n к точному решению. Теорема. Пусть функция (x) определена и дифференцируема на [a, b], причём все значения (x) [a, b]. Тогда, если существует число q, такое, что | ’(x)| q<1 на отрезке [a, b], то последовательность сходится к единственному на [a, b] решению уравнения x = (x) при любом начальном значении x 0 [a, b], т. е. При этом, если на отрезке [a, b] производная ’(x) положительна, то Если ’(x) отрицательна, то
СКОРОСТЬ СХОДИМОСТИ Для метода итераций следует подбирать функцию (x) так, чтобы | ’(x)| q<1 Скорость сходимости последовательности xn к корню тем выше, чем меньше число q. F(x) = 0 преобразуем x = x + C·F(x), т. е. (x) = x +C· F(x) Требуется | ’(x)|<1. Т. е. | ’(x)| = | 1 + C·F’(x)| Если F’(x)>0, то C<0, иначе C>0. Оценку F’(x) можно вычислить конечной разностью F’(a) (F(a + ) – F(a))/
a, b, , N Монотонная сходимость ( ’>0) y 1=x y 2= (x) x 1 x 0 x= (a + b)/2; N = 0 y = (x) X*… |y-x|< Колебания значений ( ’<0) x = y; N = N+ 1 y 1=x y, N End Блок-схема м. Простых итераций y 2= (x) x 1 … x* … x 0
ПРОЦЕДУРА м. ПРОСТЫХ ИТЕРАЦИЙ Function iter(p: Func; a, b: real; var x: real): Boolean; Var x 1 : real; Const eps=1 e-5; begin x 1: =x; writeln('Сходимость м. простых итераций'); repeat x: =x 1; x 1: =p(x); write(x: 16: 7); until abs(x-x 1)<eps; writeln; iter: =true; end;
X 0, БЛОК_СХЕМА м. НЬЮТОНА x = x 0; k = 1 y = f’(x) т. к. y = f’(x) = f(x)/ x x 1 = x – f(x)/y |x 1 – x| = R R< x x = x 1; k = k + 1 end X* … x 1 x 0
Прямая через точки (a, A) и (b, B): Y – A =(B - A)·(x-a)/(b-a) Точка пересечения с осью (Y = 0) x 1 = x B x 1 = (a. B - b. A)/(B – A) Если f(x 1)·f(a)<0, то b = x 1, иначе a = x 1 Новая прямая через точки (a, f(a)) и (b, f(b)) … Если |y = f(x 1)|< , то КОНЕЦ a x 1 x 2 … X* b A
Блок-схема м. ХОРД a, b, Ya =f(a); Yb = f(b) x 1 = (a·Yb - b·Ya)/(Yb – Ya) Y = f(x 1) |Y|< Ya·Y<0 a = x 1 да да b = x 1
The End
_01_04_Алгоритмы.ppt