![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Идентификаторы совпадают для переменных: .Стр 1 из 4Следующая ⇒
А главное, алгоритм, в силу рекурсивности, весьма экономичен. Уменьшение числа операций уменьшает ошибки округления. Получим еще один, важный для будущих преобразований, результат, использовав уравнение (6): Продифференцируем f(Х), получим: Пусть х=хо, тогда, Продифференцируем последовательно (строка за строкой) соотношения (8): где у и y’ берутся с предыдущей строки из соотношений (8) и (9). Полученный результат представим в виде алгоритма на языке Паскаль: procedure POLINR; var I: integer; var Y, Y1: real; begin Y: = A[0]; Y1: = 0; for I: =1 to N do begin Y1: =Y+Y1*X; end; end; Идентификатор Y1 соответствует y’. Остальные обозначения сохранены. Одновременно с помощью процедуры POLINR для заданного Х подсчитываются значения y=f(x) и y’=f’(x). Схема Горнера также сохранена при расчете y=f(x) и y’=f’(x). Перейдем к методу Ньютона (решения характеристического уравнения): Рассмотрим графическую интерпретацию метода:
(производную) до пересечения с осью х-х в точке Х1.
X2 X1 X0 Приближенное значение производной можно записать:
обычно ограничивается и число итераций. Если ввести в предыдущий алгоритм обозначения procedure NEWTONR; Const E=1E-6; var F: real; begin repeat POLINR; F: =Y/Y1; X: =X-F; until abs(F)< E; end;
Аналогичным образом можно решить любое уравнение вида: f(x)=0 (нелинейное, алгебраическое, где f(x)-дифференцируемая функция, имеющие вещественные корни). Для решения алгебраического уравнения (1), таким образом, получим следующий алгоритм (корни вещественные): 1). Задаются коэффициенты уравнения а0, а1, …, аn и его степень n. Задается начальное приближение 2). Записывается обращение к процедуре NEWTONR, которая содержит обращение к процедуре POLIMR. 3). Полученное значение корня выводится на экран (принтер). 4). Исходная степень полинома понижается на единицу в соответствии с процедурой
procedure PONPOR1; var I: integer; type t=array[0..10] of real; var B: t; begin B[0]: = A[0]; for I: =1 to N-1 do B[I]: = A[I]+B[I-1]; for I: =1 to N-1 do A[I]: = B[I]; N: = N-1; end;
5). И далее п. 2-4 повторяется пока порядок уравнения не понизится до квадратного уравнения, либо до уравнения первого порядка, которые необходимо решить. Основной недостаток метода очевиден из алгоритма (10): при наличии кратных корней полинома (1) одновременно стремятся к нулю f(xi) и f’(xi), а деление на нуль невозможно. Ясно также, что выбор начальных приближений сильно влияет на сходность метода. В случае решения алгебраических уравнений (обычный расчет полинома f(x) в заданном интервале Х и представление f(x) в виде графика) помогает установить структуру корней и их приближенные значения. В случае нелинейных уравнений такой прием приемлем лишь для одного уравнения.
Корни комплексные (сопряженные) Обозначим Как и раньше, распишем схему Горнера по строкам следующим образом, поясняя ее рекурсивность. Подставив комплексный корень в уравнение (1), мы получим комплексную функцию f(x1, x2), вещественную часть функции обозначим y1, а меньшую y2, т.е. y=f(x)=y1+jy2.
Как и ранее, очередная строка определяется по значениям, подставленным для предыдущей строки. Представим полученный алгоритм в виде следующей процедуры: procedure POLINC; var Y1, Y2, R1: real; var I: integer; begin Y1: =A[0]; Y2: =0; for I: =1 to N do begin R1: = A[I]+ X1*Y1- X2*Y2; Y2: = X1*Y2+ X2*Y1; Y1: = R1; end; end;
Рассмотрим алгоритм расчета производной
Рекурсивность получена. В предыдущей процедуре получен алгоритм расчета вещественной y1, и мнимой y2 частей y=f(x). Но, прежде чем использовать его в очередной процедуре, запишем алгоритм расчета вещественной и мнимой частей алгоритма Ньютона (10). Если отношение которые позволяют определить вещественную и мнимую части искомого корня В представленной далее процедуре используем полученные алгоритмы
procedure PolinC; var Y1, Y2, F1, F2, R1, R2, R, Q: real; var I: integer; begin Y1: = A[0]; Y2: = 0; F1: = 0; F2: = 0; for I: = 1 to N do Begin R2: = Y1+ X1*F1- X2*F2; F2: = Y2+ X1*F2+ X2*F1; F1: =R2; R1: = A[I]+ X1*Y1- X2*Y2; Y2: = X1*Y2+ X2*Y1; Y1: =R1; end; R: = F1*F1+ F2*F2; Q: = (Y1*F1+ Y2*F2)/R; F2: = (Y2*F1- Y1*F2)/R; F1: =Q; end;
procedure NewtonC; Const E=1E-6; Begin repeat PolinC; X1: = X1-F1; X2: = X2-F2; until sqrt(F1*F1+F2*F2)< E end;
Идентификаторы F1 и F2 использовали дважды. Значения этих параметров процедур передаются в процедуру Ньютона, которая запишется так:
Procedure Newton; Const e = 1e-6; Begin Repeat polinc; X1: =x1-f1; x2: =x2-f2; Until sqrt(f1*f1+f2*f2)< e; End: Поскольку комплексные корни всегда сопряженные, то определенный пары корней требуют понижения порядка исходного уравнения (1) на два. Для сопряженных корней х=х1±jх2 получим некоторое уравнение Х2 + рХ + q = 0, где p = - 2Х, q = Х12+Х22 Поэтому исходное уравнение можно записать в виде: Y(X) = (X2 + pX + q)(bn-2 + bn-3X+…+b1Xn-3 + b0Xn-2), (13) если X=X1 ± jX2 – корни исходного полинома Y(X). Раскрывая скобки и приравнивая коэффициенты при одинаковых степенях Х у левого и правого полиномов получим: b0 = a0, b1 = a1 - pb0 b2 = a2 - pb1 - qb0 ………………. bn-2 = an-2 – pbn-3-qbn-4 Коэффициенты определяются рекурсивно. Запишем полученный алгоритм в виде процедуры: Procedure Ponpor2; Var p, q: real; Var I: integer; Type t=array[0..10]of real; Var B: t; BEGIN B[0]: =A[0]; p: = - 2*X1; q: =X1*X2+X2*X2; B[1]: = A[1] - p*B[0]; For I: =2 to N-2 do B[I]: =A[I] – p*B[I-1] – q + b[I-2]; END; Таким образом, мы имеем в распоряжении алгоритм (процедуры), которые позволяют решить характеристическое уравнение. Сходимость метода достаточно хороша. Зависит она от выбора величины начальных приближений для искомого корня. Точность определения корней может быть задана с точностью e в абсолютных величинах e = 10-6 (см. процедуру NewtonR), а также в относительных величинах. В последнем случаи необходимо F поделить на Х (abs(F/x< e)). Все сказанное применимо не только к алгебраическому уравнению (4), но и к любому нелинейному уравнению f(x) = 0. В задачах динамики при рассмотрении реальных нелинейных математических моделей ОУ и СУ такие задачи встречаются достаточно часто. Особенно это требуется для решения систем нелинейных уравнений: X = f(X), где (14) Чтобы выполнить интегрирование системы нелинейных уравнений (14), необходимо знать нелинейные уравнения т.е. при t = 0, Х = Х0. Если значения Х0 соответствуют установившемуся режиму работы, то X = f(X) = 0. Поэтому и требуется решить систему уравнений f(X) = 0. К решению систем нелинейных алгебраических уравнений мы вернемся позже, а сейчас перепишем ряд наиболее распространенных методов решения нелинейных уравнений: · Метод хорд. · Метод секущих (Kwdriter). · Метод дихотомии (Dihot). · Метод Лагерра. · Метод простых интерполяцией (Iter). Для решения алгебраических уравнений существуют методы: · Мюллера (если при близких к друг к другу и комплексных корнях). · Берстоу (сходимость лучше, чем в методе Ньютона). · Бернулли (дает приближения сразу по всем корням). · Лобачевского (сначала определяет действительные и чисто мнимые корни). · Матричные методы. Существуют оценки сходимости методов и их точности, но в основном применительно к одному уравнению. Например, доказать что, точность определения корней характеристического уравнения будет выше, если корень определяется с участием всех коэффициентов характеристического уравнения, а не для управления по техническим системам. Рассмотрим в заключении метод простых итераций. Он применим, если уравнение f(X) = 0 можно записать в следующем виде: X = f1(X) (15) Алгоритм метода чрезвычайно прост:
Далее процесс итераций продолжается до тех пор пока значения Xi+1 и Xi не сойдутся с заданной точностью e. Очень наглядна графическая иллюстрация алгоритма:
y y=x y
x0 x1 x2 x* X x* x0 x1 X
рис.2 рис.3 х* - искомый корень.
рис.4 рис.5
По этому легко установить критерий сходимости метода: процесс итераций сходится, если производная f1’(x) по модулю меньше 1.
Решение систем линейных алгебраических уравнений. Наиболее компактная форма записи: Ах = В, (16)
x2 где x = •, а А и В – матрицы. • • xn Система уравнений (16): - имеет решение и оно единственное, - не имеет решений, - имеет бесконечное множество решений. Поэтому система уравнений называется вырожденной, если решений нет или их бесконечное множество. Существуют плохо обусловленные системы, когда решение не достоверно. Например, 5х +7у =12 7х+10у=17 решение х=у=1. Возьмем у=0, а х=4, 415, тогда получим совпадение по первым частям с точностью 12, 075 =12 \ 0, 075\ 5 + 7 =12 16, 905 = 17 \0, 095\ 7 + 10=17 Очень наглядна геометрическая иллюстрация решения системы двух уравнений: 2х+у=4,
4 у
3 х-у=-1
1 2х+у=4
0 1 2 3 4 Х
В пространстве трех переменных точка пересечения трех плоскостей и далее – гиперплоскости. На плоскости – иллюстрация отсутствия решений – параллельность прямых; бесконечное множество решений – совпадение прямых. Последнее обстоятельство практически очень полезно, так как указывает на линейную зависимость строк в матрице А точно также на отсутствии решения указывает равенство детерминанта det A =0. Существуют прямые и итерационные методы численного решения системы линейных уравнений. Формально прямые методы содержат лишь ошибки округления, а на итерационные – ошибки ограничения, но при итерационном методе ошибки округления не накапливаются. При практических расчетах не эти обстоятельства будут решающими. Метод Гаусса. Рассмотрим его применительно к системе трех уравнений: a11x1+a12x2+a13x3=b1, a21x1+a22x2+a23x3=b2, (17) a31x1+a32x2+a33x3=b3, где
A = a21 a22 a23 В = b2 , поэтому Ах =В. а31 a32 a33 b3
Введем множитель m2=a21/a11 и умножим на него первое уравнение системы, затем вычтем его из –2-го уравнения: (a21-m2a11)x1+(a22-m2a12)x2+(a28-m2a12)x3=b2-m2b1, a21-m2a11=0 Второе уравнение системы приобретает вид a’22x2+a’23x3=b’2, где новые обозначения очевидны. Введем множитель для третьего уравнения m3=a31/a11, вновь умножаем на него первое уравнение, вычтем его из третьего, получим (a31-m3a11)x1+(a32-m2a12)x2+(a22-m3a13)x3+b3-m3b4 где вновь a31-m3a11=0 и получено 3-е уравнение системы: a11x1+a12x2+a13x3=b1 a’22x2+a’23x3=b’2 (18) a’32x2+a’23x3=b’3 Аналогичным образом введем новый множитель m”3=a’32/a’22 и умножим на него второе уравнение системы (18), и вновь вычтем из третьего: (a’32-m’3a’22)x2+(a’33-m’3a’23)x2=b’3-m’3b’2 Получим систему уравнений в виде: a12x1+a12x2+a12x3=b1 a’22x2+a’23x3=b’2 (15) a”33x3=b”3
Указанным приемом удалось исключить x, из второго и третьего уравнения и х2- из третьего. Такой метод имеет смысл лишь в случае, если Поскольку систему уравнений (17) свели к к треугольному виду (19), то ее легко решить обратной подстановкой:
Равенство а11=0 или a’22=0 указывает на вырожденность системы.Таким образом алгаритм метода Гаусса состоит из двух частей: - приведение системы к треугольному виду - решение системы обратной подстановкой
Указанный алгоритм реализован в следующей процедуре. Различие заключается в том, что оставшиеся значения всегда будут переставляться так, чтобы чтобы наибольший по модулю коэфициент при хк падал на главную диоганаль.Указанный прием существенно уменьшает ошибку округления.
Proceadure GAUSS; Var I, J, K, L, Kl, NI: integer; Var S, R: teal; Begin NI=N+I; for k: =1 to N do begin Kl: =k=1; s: =a [k1k]; j: =k; For I: =kl to N do begin R: = A[I1K]; If abs (R) > abs (S) then begin S: =R; J: = I: end; End; If s: =010 then exit; if J< > K then For I: =K to N1 do Begin R: =A[K1I]; A[K1I]: =A[j1i]; A[j1i]: =R; end For j: = kl to N1 do A[k1j]: =A[k1j]/S; For I: =kl to n do begin R: = A[i1k]; For j: =kl to N1 do A[I1J]: =A[I1J] A[K1J]*R; end; end;
{обратная подстановка}
if S< > 0, 0 then for I: =N downto 1 do begin S: = A[I1N1]; for j: =j+1 to N do S: =S-A[I1jJ*X[J]; X[I]: =S End; end;
Методика А должна быть описана и оформлена по заданным коэффициентам с учетом столбца первых частей. Число уравнений N-заданно. S- описано в основной программе. Там же описан Х- вектор результатов (решение). Решение отсутствует если S=0.
Метод итерации Гаусса-Зейделя. Рассмотрим метод на примере трех линейных уравнений (17) Преобразуем в систему к виду:
X1= 1/a11 (b1-a1x2-a13x3) X2=1/a22 (b2-a21x1-a23x3) X3=1/a33 (b3-a31x1-a32x2)
Если задать начальные приближенные для x01, x02, x03, то получим из первого уравнения системы (17) X’1=1/ a11 (b1-a12x02-a13x03), использовав X’1, получим из 2-го уравнения системы: X’2=1/ a22 (b2-a21x’1-a23x03).И, аналогичным образом, для 3-го уравнения получим: Строго говоря, это не метод простых итераций, поскольку X’2 использует новое значение X’1 , а X’3 – значения X’1 и X’2 . Поэтому, если поставить вместо «0» индекс i, а вместо «1» – «i+1» получим общий алгоритм метода: X1i+1=1/ a11 (b1-a12xi2-a13xi3), X2i+1=1/ a22 (b2-a21xi+11-a23xi+13), X3i+1=1/ a33 (b3-a31xi+11-a31xi+12). Достаточные условия сходимости метода: aii ≥ ai1 +… + ai, i-1 + ai, i+1 + … + ain для всех i или по крайней мере для одного i aii > ai1 +… + ai, i-1 + ai, i+1 + … + ain. Если итерационные методы сходятся, то они предпочтительнее, так как время вычисления у них на одну итерацию пропорционально n2, а у метода исключения n3 . При числе итераций меньше n получается выигрыш по времени. Кроме того, ошибки округления при итерационном методе меньше. Особенно наглядно геометрическое представление итерационного методе для системы уравнений:
a11 > a12
2 x-2y=-2
2x+y=2 рис.7 Переставим уравнения, т.е. начнем со второго уравнения. Очевидно, что процесс итерации в этом случае расходится. Представим алгоритм метода Зейделя в виде процедуры. Procedure SELD; var I, J: integer; var E, S: real; begin E: =1E-7; M: =10; For k: =1 to M do begin L: =k; For I: =1 to N do begin S: =A[I, N+1]; For J: =1 to N do S: =S-A[I, J]*X[J]; S: =S/A[I, I]; X[I]: =X[I]+S; If cls(S)> E then L: =0; end; If L< > 0 then exit; End; end; Матрицы коэффициентов А и В (Ах=В) заданны и описаны в основной программе. Число уравнений N, допустимое число итераций М заданно в основной программе. Полученное число итераций М является выходным параметром программы и его следует описать в основной программе и задать k=0. Итерационные методы особо привлекательны для разряженных матриц. Рассмотрим два важных метода, которые используют алгоритмы решения систем линейных уравнений:
1. Метод Ньютона (обобщенный) для решения систем нелинейных уравнений: f(x)=0, где (*) x и f вектора. Формируем матрицу Якоби: f(x)=f(xi0) +∂ f∆ xi/∂ xi
∂ f2/∂ x1 ∂ f2/∂ x2 … ∂ f2/∂ xn нахождения производных, используем … … … … матрицу Якоби для приближенных ∂ fn/∂ x1 ∂ fn/∂ x2 … ∂ fn/∂ xn (конечно - разностных) соотношений:
∂ fi/∂ xi≡ fi(xi+∆ xi)- fi(xi)/ ∆ xi Замена левой части уравнения f’(xi0) ∆ xi = - f(xi0); Систему линейных уравнений формируем по правилу: f’(xi) (xi+1 - xi)= - f(xi); ∆ xi
Интерполяция. А. Известны значения таблично заданной функции. Необходимо определить значение ф-ции между “узлами таблицы”. Обычно таблицы бывают двух- и трёх- мерными. Перед вычислением стоит четыре вопроса: 1. Какие узлы использовать. 2. Какой класс приближенных функций использовать. 3. Какой критерий согласия будет применён. 4. Какая точность требуется. 1. Чаще всего используются равноудалённые узлы. 2. а. В инженерных расчётах обычно используют прямую, либо квадратичную параболу. Реже многочлены более высокой степени, т.е. используют линейные комбинации б. Гармонические функции: в. Показательные функции - 3. Точное соответствие (совпадение в узлах). 4. Совпадение результатов до 3, 4 знаков. Б. Кроме аналитического “представления” таблиц, мы уже рассмотрели представление графической информации. Т.е. это два главных применения интерполяционных формул. Наряду с задачей определения значений между узлами столь же актуальна задача определения значений функции за одним из граничных узлов (левым или правым), где сетка
При использовании граничных условий (при численном решении уравнений в частных производных) приходится использовать различные формулы (схемы) интерполяции для сохранения точности вычислений (вперёд, назад, центральные). Указанная задача может усложнится, если требуется “прослеживать” в процессе расчётов перемещения границы расположения различных сред в динамике, т.е. во времени. Например, в газовой динамике необходимо определять расположение скачка уплотнения и его перемещение. Сказанное относится к математическим моделям, описанным дифференциальными уравнениями в частных производных. “ Передний фронт” вычислительной математики в настоящее время располагается в сфере таких задач. Если дифференциальные уравнения обыкновенные, не имеют пространственного измерения, у них одна независимая переменная – время, то для выше указанных классов задач характерна двух – трёхмерная постановка задач. Чаще такие математические модели принадлежат объектам управления. Но и среди элементов систем управления есть такие, которые описываются уравнениями в частных производных. Соответственно и интерполяция требуется по двум – трём координатам. Рассмотрим задачу интерполяции в такой постановке, Имеем 1. Пусть известное значение Система имеет решение относительно
отличен от нуля при всех 2. Можно потребовать, чтобы многочлен степени n (f(x)) проходил через фиксированные точки
Метод интерполяции Лагранжа. Рассмотрим функцию: Она принимает значение 1 в точке
Допустим
а. использование “в лоб”.
Полином 3-й степени. б. использование “барицентрической формулы”. Разделим правую часть формулы Лагранжа на
Интерполяционные полиномы Эрмита
- принимают значения
если они найдены, то имеет место Определим Если Аналогичным образом можно получить Взяв производную от (1) По условиям Возможно приближение в точках i по n производным. Оба рассмотренных метода справедливы для произвольного расположения точек. Для равноотстоящих значений аргумента формулы несколько упрощаются. В практических расчётах чаще используется именно этот случай. Интерполяционная формула Ньютона. Удобна тем, что позволяет легко изменить количество используемых узлов. Применима для произвольного расположения узлов. Имеем И, следовательно,
В свою очередь а. б. в. В общем случае Таким образом Особенно наглядно использование формулы Ньютона видно из таблицы. Знаком * обозначены опорные значения, необходимые для вычисления многочлена. Составим таблицу:
Первые разделённые разности – близки к первым производным в интервале между узловыми точками. Вторые разделённые разности близки ко вторым производным и т.д.
Для равноотстоящих значений аргумента формула Ньютона приобретает следующий вид. Пусть (*)
Получим аналог рядя Тейлора. Для полиномов степени n он конечен.
Иногда требуются узлы функции определять, исходя из (требуемой, задачной) точности. Общие соображения здесь таковы, что следует удерживать x близким к какому-нибудь узлу. Можно поставить задачу минимизации произведений Структура разностей группируется относительно опорных значений. Чтобы понять смысл формулы (*) проделаем следующее. Введём разность
Для разделённых разностей имеем:
Граничные значения аргументов обеспечивают использование того или иного способа интерполяции (вперёд - назад).
Итерационно – интерполяционный метод Эйткена. - используется для вычисления многочлена, без его аппроксимации с применением итерации. Пусть
так что в этих точках он совпадает с Можно составить следующею таблицу линейной интерполяции многочленов (от точки к точке): (*) (**) Процесс вычислений заканчивается, если у значений двух интерполяционных многочленов последовательных степеней совпадает требуемое количество знаков. Ясно, что метод применим для таблично заданных функций. Логика построения интерполяционных многочленов такова, что сначала проводится линейная интерполяция между соответствующими точками Что видно по формуле (*). Точно также весь ряд этих формул (строка) даёт линейную интерполяцию между соответствующими точками. Далее следует линейная интерполяция (**) по трём точкам, но с учётом полученных выражений функции, т.е. практически квадратичная интерполяция по трём точкам. И далее процесс повторяется, вовлекая в расчёт большее количество точек и повышая степень интерполяционного полинома. Сплайны Многоинтервальная интерполяция заключается в том, что значение функции Применение полиномов высокой степени на выбранном интервале приводит к большему объёму вычислений и не обеспечивает высокой точности. Наиболее распространенны:
1. простой способ – это применение кусочно – линейной интерполяции при равномерном расположении узлов. Имеем: где Обычно степень полинома росла вместе с числом узлов, здесь – не зависит. Уменьшение 2. Квадратичная интерполяция – требует чётного числа парных интервалов (n – чётное число). Имеем: Если использовать формулу Лагранжа для трёх ординат, то получим где В узлах i значения y(x) и 3. Кубическая интерполяция (также локальная) Где Производные могут вычисляться с помощью формул численного дифференцирования по трём точкам: Матрицы Вещественное число-скаляр. Будем обозначать греческими буквами. Упорядоченный набор скаляров вектор. Вектор столбец
m-размерность по строкам n-размерность по столбцам Вектор-столбец и вектор-строка – частные случаи матрицы. Матрицы равны если совпадают все элементы Если в матрице А столбцы и строки поменять местами, то получим транспонированную матрицу Нулевая матрица. Элементы для которых 1. Умножение матриц на число: 2. Сложение матриц (векторов): C=A+B. A+(B+C)=(A+B)+C- ассоциативность. A+B=B+A- коммутативность. Для двух векторов a и b существует понятие скалярного произведения Его можно рассматривать как
Два ненулевых вещественных числа всегда имеют не нулевое произведение. Векторы же ненулевые могут дать при преумножении скалярное произведение равное 0.
В этом случае векторы ортогональны друг другу. Если В силу дистрибутивности
|