![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Главная Рефераты по рекламе Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Рефераты по строительным наукам Психология педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по москвоведению Рефераты по экологии Краткое содержание произведений Рефераты по физкультуре и спорту Топики по английскому языку Рефераты по математике Рефераты по музыке Остальные рефераты |
Курсовая работа: Метод релаксации переменных решения СЛАУКурсовая работа: Метод релаксации переменных решения СЛАУВВЕДЕНИЕ Численное решение СЛАУ – одна из наиболее часто встречающихся задач в научно-технических исследованиях. Такая задача возникает в математической физике (численное решение дифференциальных и интегральных уравнений), экономике, статистике. При этом прикладные задачи часто требуют решения больших и сверхбольших СЛАУ с числом неизвестных более 1000. К таким СЛАУ, например, приводит численное решение двумерных и особенно трехмерных задач математической физики, в которых условия физической и геометрической аппроксимации двумерной и трехмерной области диктуют использование достаточно мелкой расчетной сетки с большим числом расчетных узлов по линейному размеру. Существующие
библиотеки программ на языках высокого уровня, разработаны на основе, так
называемых, прямых методов решения СЛАУ, типа метода Гаусса и его модификаций.
Число арифметических операций умножения для численного решения СЛАУ
размерностью Итерационные
методы решения СЛАУ намного экономнее, как по машинному времени решения, так и
по использованию оперативной памяти. Так, если итерационный метод является
быстро сходящимся с числом итераций В настоящее время отсутствуют библиотеки подпрограмм широкого назначения для численного решения больших и сверхбольших СЛАУ. Таким образом, разработка эффективных итерационных алгоритмов для широкого класса матриц СЛАУ большой размерности и библиотек подпрограмм на их основе является актуальной задачей. Наиболее алгоритмически простыми среди итерационных методов являются стационарные итерационные методы, такие как оптимальный метод простой итерации и метод релаксации. В то же время показано, что можно добиться их эффективной сходимости для достаточно широкого класса вещественных и комплексных матриц СЛАУ. Для нестационарных итерационных методов, таких как метод с чебышевским набором параметров, минимальных невязок, сопряженных градиентов, сходимость доказана в узком классе матриц, например, таких как вещественные симметричные положительно определенные матрицы. И в этом узком классе матриц сходимость оптимальных стационарных методов, опирающихся на известные спектральные матричные свойства, оказывается в некоторых случаях даже лучшей. При этом число арифметических операций стационарного алгоритма минимально. Еще одним преимуществом оптимального метода простой итерации является возможность естественного распараллеливания алгоритма при постановке его на современные параллельные ЭВМ, так как алгоритм по существу сводится к одному умножению матрицы на вектор. Все эти аргументы указывают на выбор стационарных итерационных методов в качестве алгоритмической основы для библиотеки подпрограмм по решению СЛАУ с большими матрицами. В курсовой работе рассмотрен итерационный метод релаксации решения СЛАУ. 1. МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ Рассмотрим систему линейных алгебраических уравнений
где А
-
матрица размерности x=(x1,x2,...,xn)T- вектор решения, f=(f1,f2,...,fn)T - вектор правых частей. Численные методы решения данной системы принято разделять на два класса: прямые методы и итерационные. Прямыми методами называются методы, позволяющие получить решение системы уравнений (1.1) за конечное число арифметических операций. К прямым методам относятся метод Крамера, метод Гаусса, LU- метод, метод прогонки и ряд других методов. Основным недостатком прямых методов является то, что для нахождения решения необходимо выполнить большое число операций. Суть итерационных методов состоит в том, что решение системы (1.1) находится как предел последовательных приближений x(n) при n®¥, где n - номер итерации. Применение итерационных методов требует задания начального значения неизвестных х(0) и точности вычислений e>0. Вычисления проводятся до тех пор, пока не будет выполнена оценка
Основное достоинство итерационных методов состоит в том, что точность искомого решения задается. Число итераций n=n(e), которое необходимо выполнить для получения заданной точности e, является основной оценкой качества метода. По этому числу проводится сравнение различных методов. Главным недостатком этих методов является то, что вопрос сходимости итерационного процесса требует отдельного исследования. Доказанные в настоящее время теоремы о сходимости итерационных методов имеют место для систем, на матрицы которых наложены ограничения. Примером обычных итерационных методов могут служить метод Якоби (метод простых итераций), метод Зейделя, метод верхних релаксаций. К особому классу итерационных методов следует отнести вариационные итерационные методы: метод минимальных невязок, метод скорейшего спуска и т.д. Итерационные методы также делятся на одношаговые, когда для определения решения на j+1 итерации используются значения решения, найденные на j итерации, и многошаговые, когда для определения решения на j+1 итерации используется несколько предыдущих итераций. Заметим, что существуют системы, для которых итерационный процесс сходится, а вектор невязки, получающийся при подстановке найденного решения в исходную систему
получается
большим по величине, т.е. найденное решение не удовлетворяет исходной системе.
В этом случае в качестве критерия достижения точности решения может быть взята
величина невязки, которая оценивается по одной из норм Продемонстрируем применение одношагового итерационного метода Якоби на решении системы трех уравнений. Пусть система (1.1) имеет вид
начальное
приближение
Непосредственная проверка условия (1.2) связана с необходимостью знания точного решения. Поэтому на практике используется несколько упрощенное правило, т.е. проверяют, достигнута заданная точность или нет, сравнивая два итерационных значения x
Если
точность не достигнута, то выполняется следующая итерация. В системе (1.5) Заметим, что в некоторых особых случаях может иметь место сходимость итерационного процесса к некоторым значениям, которые не являются решением задачи. В этом случае, по-видимому, предпочтительнее в качестве критерия сходимости использовать невязку, получаемую при подстановке найденного решения в исходную систему. Запишем выражение i+1- итерации через i:
Если точность решения достигнута, то счет прекращается. Для систем m-го порядка имеем
Запишем метод простых итераций в матричной форме. Представим матрицу А в виде суммы трех матриц
где D = diag[a11, a22, ...,amm] - диагональная матрица, А1=
А2=
Представим систему (1.1) в матричной форме
Метод Якоби в матричной записи выглядит следующим образом
Или
Существуют
итерационные методы, обладающие лучшей скоростью сходимости, чем методы Якоби.
В этих методах при вычислении i+1
итерации
После проверки условия сходимости совершаем вторую итерацию и т.д. Для i+1 итерации запишем
Общая формула имеет вид
Запишем метод Зейделя в матричной форме
или в форме близкой к каноническому виду
Äëÿ îäíîøàãîâûõ èòåðàöèîííûõ ìåòîäîâ, ñóùåñòâóåò êàíîíè÷åñêàÿ ôîðìà çàïèñè
Здесь
Формируя матрицу B различным образом и задавая различные значения итерационного параметра, можно получать одношаговые итерационные методы самого разного вида. В зависимости от выбора этих параметров мы будем получать методы, которые будут обладать различной скоростью сходимости, т.е. заданная точность будет достигаться за разное число итераций. Одним из наиболее распространенных одношаговых итерационных методов является метод верхних релаксаций*, который имеет следующий вид
где w>0 - заданный числовой параметр. Этот параметр выбирается таким образом, чтобы на каждом шаге итерационного процесса уменьшалась величина, характеризующая близость полученного решения к искомому решению системы. Для получения расчетных формул (1.21) перепишем в виде
или в покомпонентной записи получим
Приведем несколько строк покомпонентной записи
Практика применения итерационных методов показала, что эти методы приводят к правильному решению для систем с матрицей А имеющей специальный вид. Приведем ряд теорем о сходимости итерационных методов. Доказательства этих теорем приводятся в книге [1]. Рассмотрим итерационные методы с постоянным итерационным параметром, записанные в виде
Теорема 1. Пусть А - симметричная положительно определенная матрица, t>0 и пусть выполнено неравенство В-0,5tА>0. Тогда итерационный метод (1.27) сходится. Следствие 1. Пусть А - симметричная положительно определенная матрица с диагональным преобладанием, т.е.
Тогда метод Якоби сходится. Следствие 2. Пусть А - симметричная положительно определенная матрица. Тогда метод верхних релаксаций сходится при условии 0<w<2. В частности, метод Зейделя сходится (w=1). Теорема 2. Итерационный
метод (1.27) сходится при любом начальном приближении тогда и только тогда,
когда все собственные значения матрицы Теорема 3. Пусть
А и В - симметричные положительно определенные
матрицы, для которых справедливы неравенства
Где
Следствие 1. Если АТ=А>0, то для метода простой итерации
при
справедлива оценка
где
Следствие 2. Для симметричной матрицы А и
справедливо равенство
где
Оценим число итераций n0(e), которое требуется для достижения заданной точности e в случае малых x, т.е. для получения оценки
Из
условия
и при малых x имеем
Заметим, что в качестве критерия сходимости итерационного метода может использоваться невязка, которая получается при подстановке найденного решения в систему (1.1). 1.1 Метод верхних релаксаций линейный уравнение итерационный релаксация Среди явных одношаговых итерационных методов наибольшее распространение получил метод верхних релаксаций (1.21). Это связано с тем, что метод верхних релаксаций содержит свободный параметр w, изменяя который можно получать различную скорость сходимости итерационного процесса. Наиболее эффективно этот метод применяется при решении множества близких алгебраических систем линейных уравнений. На первом этапе проводится решение одной из систем с различными значениями итерационного параметра w и из анализа скорости сходимости итерационного процесса выбирается оптимальное значение этого параметра. Затем все остальные системы решаются с выбранным значением w. Еще одно достоинство итерационного метода верхних релаксаций состоит в том, что при его реализации на ЭВМ алгоритм вычислений имеет простой вид и позволяет использовать всего один массив для неизвестного вектора. Основная вычислительная формула имеет вид
В
выражение (1.44)
Действительно,
при последовательном нахождении элемента Современная вычислительная техника позволяет проводить исследование устойчивости и сходимости итерационного метода в зависимости от параметров задачи. Например, можно проводить исследование влияния повышения точности решения задачи на число необходимых итераций, исследование влияния начального приближения, изменения коэффициентов матрицы А и правых частей системы. 1.2 Âû÷èñëèòåëüíûå ïîãðåøíîñòè ìåòîäà âåðõíèõ ðåëàêñàöèé Один из основных вопросов применения итерационных методов связан с корректностью выбора точности метода e. Àíàëèçèðóÿ âû÷èñëèòåëüíûå ïîãðåøíîñòè âûðàæåíèÿ (1.45), ïîëó÷èì îöåíêó íàèìåíüøåãî çíà÷åíèÿ òî÷íîñòè ìåòîäà âåðõíèõ ðåëàêñàöèé. Очевидно, что искомая погрешность вычислений будет определяться погрешностью задания коэффициентов исходной системы и погрешностью округления. Çàïèøåì ðàçíîñòü äâóõ èòåðàöèîííûõ ïðèáëèæåíèé ðåøåíèÿ è îöåíèì å¸ ìèíèìàëüíîå çíà÷åíèå
Пусть
коэффициенты
бывает
с ростом номера итерации k,
т.е.
здесь
1.3 Ìåòîä áëî÷íîé ðåëàêñàöèè Èñõîäíàÿ
ìàòðèöà
ãäå
Çàïèøåì
ôîðìóëó äëÿ
áëîêîâ
ìàòðèöû
Îáîçíà÷èì
Òîãäà,
ïîäñòàâëÿÿ (1.54) è
(1.55) â (1.53) è
óìíîæàÿ
ñëåâà íà
Ðåøåíèå
ïîëó÷åííûõ
ñèñòåì (1.56)
ðåêîìåíäóåòñÿ
âûïîëíÿòü ñ
èñïîëüçîâàíèåì
ôàêòîðèçàöèè
ìàòðèöû 2. ÐÀÇÁÎÐ ÌÅÒÎÄÀ ÐÅËÀÊÑÀÖÈÉ Â ÑÈÑÒÅÌÀÕ ËÈÍÅÉÍÛÕ ÓÐÀÂÍÅÍÈÉ ÍÀ ÏÐÈÌÅÐÅ ПРИМЕР: решить методом релаксаций данную систему
Вычисления производить с точностью до двух знаков после запятой. РЕШЕНИЕ: Приводим систему(4) к виду, удобному для решения методом релаксации
Задаем начальные приближения корней нулевыми значениями
Находим значения невязок
Далее, решаем И
так далее. Подставляем результаты вычисленные в таблице. Подсчитав все
приращения Для проверки подставляем найденные значения корней в исходное уравнение; в целом система решена точно. Рисунок 1 – Решение системы с помощью языка Borland C++ Листинг программы решающий систему методом релаксаций переменных приведен в приложении. ЗАКЛЮЧЕНИЕ Можно утверждать, что почти любая задача вычислительной математики сводится в конечном итоге к решению полученной некоторым образом системы линейных или тензорных алгебраических уравнений (СЛАУ). Но такие системы уравнений могут быть, во-первых, очень большого размера, например, NxN=10000х10000, и даже более; во-вторых, система уравнений может оказаться недоопределенной; в-третьих, она может оказаться с линейно зависимыми уравнениями; в-четвертых, она может оказаться переопределённой и несовместной. Кроме того, в-пятых, вычислительная техника может иметь далеко не рекордное быстродействие и объём оперативной памяти, и заведомо конечную разрядность двоичного представления чисел и связанные с этим ненулевые вычислительные погрешности. Поэтому итерационные методы получили большое применение в решении СЛАУ. Современная вычислительная техника позволяет проводить исследование устойчивости и сходимости итерационного метода в зависимости от параметров задачи. Наиболее эффективно метод релаксаций применяется при решении множества близких алгебраических систем линейных уравнений. На первом этапе проводится решение одной из систем с различными значениями итерационного параметра w и из анализа скорости сходимости итерационного процесса выбирается оптимальное значение этого параметра. Затем все остальные системы решаются с выбранным значением w. Еще одно достоинство итерационного метода верхних релаксаций состоит в том, что при его реализации на ЭВМ алгоритм вычислений имеет простой вид и позволяет использовать всего один массив для неизвестного вектора. Я научился решать систем линейных уравнений методом релаксации(ослабления) переменных, и закрепил приобретённые навыки разработкой программы на языке Borland C++ 4.5. СПИСОК ЛИТЕРАТУРЫ 1. Воеводин В.В. «Вычислительные основы линейной алгебры». Москва «Наука», 1977. 2. Фаддеев Д.К., Фаддеева В.Н. «Вычислительные методы линейной алгебры». Москва «Физматгиз», 1963. 3. Самарский А.А., Гулин А.В.» Численные методы». Москва «Наука», 1989. 4. Самарский А.А., Николаев Е.С. «Методы решения сеточных уравнений». Москва «Наука», 1978. 5. Самарский А.А. «Введение в численные методы». Москва «Наука», 1987. 6. Стренг Г. «Линейная алгебра и ее применение». Москва «Мир», 1980. 7. Карманов В.Г. «Математическое программирование». Москва «Наука», 1989. 8. Алексеев Е.Р. «Программирование на С++». Москва «НТ Пресс», 2007. 9. http://www.exponenta.ru/ - сайт посвящен решению математических задач в прикладных программных пакетах. 10. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. - М.: Наука, 1987.- 600 с. ПРИЛОЖЕНИЕ Листинг программы #include<iostream.h> #include<math.h> int maximal(int n,double R0[]); void main(){ int i,j,n,f,k,iter; double S,det; cout<<"Введите размерность матрицы(матрица должна быть квадратной)= ";cin>>n; double *x=new double [n]; double **b=new double *[n]; for(i=0;i<n;i++) b[i]=new double[n+1]; double **a=new double *[n]; for(i=0;i<n;i++) a[i]=new double[n+1]; cout<<"Введите количество итераций:"; cin>>iter; cout<<"Введите расширенную матрицу:\n"; for(i=0;i<n;i++){ for(j=0;j<=n;j++) cin>>b[i][j]; } cout<<"Подготавливаю матрицу к релаксации...\n"; for(i=0;i<n;i++){ for(j=0;j<n;j++) a[i][j]=-b[i][j]/b[i][i]; a[i][n]=b[i][n]/b[i][i]; } for(i=0;i<n;i++) cout<<" "<<a[i][j]<<" double *x0=new double [n]; for(i=0;i<n;i++) x[i]=0.0; double *R0=new double [n]; cout<<"Введите значения начальных приближений:\n"; for(i=0;i<n;i++) cin>>x0[i]; S=0.0; for(i=0;i<n;i++){ for(j=0;j<n;j++) S=S+a[i][j]*x0[i]; } for(i=0;i<n;i++) f=maximal(n,R0); det=R0[f]; for(k=0;k<iter;k++){ cout<<"det{"<<k<<"}="<<det<<"\n"; for(i=0;i<n;i++){ if(i!=f) R0[i]=R0[i]+a[i][f]*det; else R0[i]=R0[i]-det; } for(i=0;i<n;i++) cout<<"R["<<i+1<<"]="<<R0[i]<<" "; x[f]=x[f]+det; f=maximal(n,R0); det=R0[f]; } cout<<"\n"; for(i=0;i<n;i++) cout<<"X{"<<i+1<<"}="<<x[i]<<"\n"; delete []x; delete []R0; delete []x0; delete []a; } int maximal(int n, double R0[]){ int i,f; f=0.0; for(i=0;i<n-1;i++){ if(R0[i+1]>R0[i]) f=i+1; } return f; } |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|