![]() |
|
|
ЭлектроснабжениеЭлектроснабжениеСОДЕРЖАНИЕ 1. Задание. 2. Расчетно-пояснительная записка. 3. Аннотация. 4. Ведение. 5. Теория. 6. Алгоритмы. 7. Программы. 8. Инструкция пользователя. 9. Результаты экспериментов. 10. Заключение. ЗАДАНИЕ A. Выписать систему конечно-разностных уравнений. B. Оценить вычислительные затраты, требуемые для выполнения аналитических решений с шестью десятичными цифрами в 100 и 1000 точках интервала. Определить и использовать разложение в ряд Тейлора для этих вычислений. C. Оценить до проведения любых вычислений те вычислительные затраты, которые потребуются для решения конечно-разностных уравнений в 100 и 1000 точках при помощи: 4. Исключения Гаусса, 5. Итерационного метода Якоби, 6. Итерационного метода Гаусса-Зейделя. G. Вычислить решения конечно-разностных уравнений при помощи каждого из трех методов из задания C. H. Оценить применимость различных методов приближен-ного решения краевых задач для дифференциальных уравнений. АННОТАЦИЯ В данной работе по исследованию прямых и итерационных методов решения линейных систем, возникающих в краевых задачах для дифференциальных уравнений было составлено шесть программ непосредственно по алгоритмам Гаусса, Якоби, Гаусса-Зейделя. Каждый из методов был представлен в виде самостоятельной программы, которая имеет инструкцию для пользователя. Каждая программа работает по определенному управлению, причем программа Гаусса формирует матрицу сама, а в программах Якоби и Гаусса-Зейделя вводится только количество точек на интервал, исходя из чего формируется столбец неизвестных членов. Начальные значения неизвестных задаются автоматически на основе результатов, полученных в ходе исследования были сделаны соответствующие выводы. ВВЕДЕНИЕ Персональные компьютеры являются одним из самых мощных факторов развития человечества. Благодаря универсальности, высокому быстродействию, неутомимостью в работе, простоте в управлении PC нашли широкое применение в различных сферах деятельности человека. С развитием научно-технического прогресса все большая часть задач требует решения на ЭВМ, поэтому наш курсовой проект направили на развитие не только определенных навыков логического мышления, но и способность развивать и закреплять эти навыки. ТЕОРИЯ Дискретизация обыкновенных дифференциальных уравнений конечными разностями приводит к линейным уравнениям; если рассматривается краевая задача, то уравнения образуют совместную линейную систему. Прямым методом решения линейной системы [pic] называется любой метод, который позволяет получить решение с помощью конечного числа элементарных арифметических операций: сложения, вычитания, деления и т.д. Этот метод основан на сведении матрицы, системы A к матрице простой структуры - диагональной (и тогда решение очевидно ) и треугольной - разработка эффективных методов решения таких систем. Например, если А является верхней треугольной матрицей: [pic]; решение [pic] отыскивается с помощью последовательных обратных подстановок. Сначала из последнего уравнения вычисляется [pic], затем полученные значения подставляются в предыдущие уравнения и вычисляется [pic] и т.д. [pic]; [pic]; или в общем виде: [pic], i=n, n-1, ..., 1. Стоимость такого решения составляет [pic]сложений умножений(а также и делении, которыми можно пренебречь). Сведение матриц А к одному из двух указанных выше видов осуществляется с помощью ее умножения на специально подобранную матрицу М, так что система [pic] преобразуется в новую систему [pic]. Во многих случаях матрицу М подбирают таким образом, чтобы матрица МА стала верхней треугольной. Прямые методы решения СЛУ нельзя применять при очень больших, из-за нарастающих ошибок, округлениях, связанных с выполнением большого числа арифметических операций. Устранить эти трудности помогают итерационные методы. С их помощью можно получить, начиная с вектора [pic], бесконечную последовательность [pic] векторов, сходящихся к решению системы( m- номер итерации ) [pic]. Метод является сходящимся, если это состояние справедливо для произвольного начального вектора [pic]. Во всех методах, которые рассмотрены ниже, матрица А представляется в виде А=М-N ( ниже показано, как это наполняется ) и последовательно решаются системы [pic]. Формально решением системы является: [pic] где - [pic]обратная матрица. Решение итерационным методом упрощается еще и потому, что на каждом шагу надо решать систему с одними и теми же матрицами. Очевидно, что матрица М должна быть легко обращаемой, а для получения желаемой точности надо выполнить определенное число итераций. Критерием окончания итерационного процесса является соблюдение соотношения: [pic] или [pic], где [pic]- вектор невязок уравнений [pic], и[pic]и[pic] - допустимая погрешность СЛУ по неувязке или приращению вектора неизвестных на итерации. РАЗНОСТНЫЕ УРАВНЕНИЯ Многие физические системы моделируются дифферинци-альными уравнениями, например : [pic] которые не могут быть решены аналитически. Приближение этих уравнений конечными разностями основано на дискредитации интервала [0,1] как показано на рис.1 и замене производной. [pic] [pic] [pic] [pic] [pic] [pic] [pic] простой разностью, например : [pic] где, 0,2=1/5=X4-X3. Тогда аппроксимирующее разностное уравнение имеет вид: [pic] В каждой точке дискретизации справедливо одно такое уравнение, которое приводит к линейной системе для приближенных значений решения дифференциального уравнения. Уравнения такого вида можно решить с помощью разложения в ряд Тейлора. В нашем случае уравнения решенные разложением в ряд Тейлора имеют вид; [pic] Найти y’(0); y’’(0)=1; y’’’(0)=1; [pic] обозначим у’(0) как С. Решение: [pic] Решение: [pic] [pic] [pic] Система конечно-разностных уравнений [pic] интервал [0,2] разделим на 10 точек [pic] -2 1 0 0 0 0 0 0 0 0 [pic] 0.04 1 -2 1 0 0 0 0 0 0 0 [pic] 0.04 0 1 -2 1 0 0 0 0 0 0 [pic] 0.04 0 0 1 -2 1 0 0 0 0 0 [pic] 0.04 0 0 0 1 -2 1 0 0 0 0 [pic] 0.04 0 0 0 0 1 -2 1 0 0 0 [pic] 0.04 0 0 0 0 0 1 -2 1 0 0 [pic] 0.04 0 0 0 0 0 0 1 -2 1 0 [pic] 0.04 0 0 0 0 0 0 0 1 -2 1 [pic] 0.04 0 0 0 0 0 0 0 0 1 -2 [pic] -2+0.04 [pic] 5 точек. [pic] |[pic] |1 |0 |0 |0 |[pic] |0 | |1 |[pic] |1 |0 |0 |[pic] |0 | |0 |1 |[pic] |1 |0 |[pic] |0 | |0 |0 |1 |[pic] |1 |[pic] |0 | |0 |0 |0 |1 |[pic] |[pic] |0 | АЛГОРИТМ ГАУССА Назначение: Решить [pic]относительно Х. Входные параметры: masheps [pic] R, n[pic] Z, Вектор правых частей [pic]. Входно - выходные параметры [pic], после разложения в А сохраняются ее верхние треугольные сомножители[pic],[pic]. Код возврата retcode=0 при успешном решении и retcode=1 при вырождении матрицы. Выходные параметры: [pic]. Алгоритм 1. retcode=0 2. if n=1 then 3 if A[1,1]=0 then retcode=1 4 return (*Гауссово исключение с частичным выбором ведущего элемента*) 3. for k=1 to n do (*найти ведущий элемент*) 4 Amax Amax then 8. Amax k then 8. Amax 0 then for i=k+1 to n do A[i,j]n then b[i]:=q else b[i]:=(q-2); end; procedure triangul(var a:matrix;var b:vektor; var ret_code:integer;n:integer); label 1; var eps,buf,max,c:real; k,imax,i,j:integer; begin ret_code:=1; eps:=1; buf:=1+eps; while buf>1.0 do begin eps:=eps/2; buf:=1+eps; end; buf:=n*eps; for k:=1 to (n-1) do begin max:=a[k,k]; imax:=k; for i:=k to n do if a[i,k]>max then begin max:=a[i,k]; imax:=i; end; if a[imax,k]>buf then begin for j:=1 to n do begin c:=a[imax,j]; a[imax,j]:=a[k,j]; a[k,j]:=c; end; c:=b[imax]; b[imax]:=b[k]; b[k]:=c; for i:=(k+1) to n do begin a[i,k]:=a[i,k]/a[k,k]; for j:=(k+1) to n do a[i,j]:=a[i,j]-a[i,k]*a[k,j]; end; end else begin ret_code:=0; goto 1 end; 1: end; end; procedure vivod(var x:vektor;var n:integer); var i:integer; begin for i:=1 to n do writeln('x',i:1,'=',x[i],' '); end; begin vvod(a,b,n); triangul(a,b,ret_code,n); if ret_code=1 then begin geradlini(a,b,y,n); ruckgang(a,y,x,n); vivod(x,n); end else writeln('Матрица вырожденна'); end. program GAUS2(input,output); type matrix=array[1..100,1..100] of real; vektor=array[1..100] of real; var a:matrix; x,b,y:vektor; n:integer; ret_code:integer; procedure geradlini(var a:matrix;var b,y:vektor; var n:integer); var s:real;j,i:integer; begin for i:=1 to n do begin s:=0; for j:=1 to (i-1) do s:=s+a[i,j]*y[j]; y[i]:=b[i]-s; end; end; procedure ruckgang(var a:matrix;var y,x:vektor; var n:integer); var s:real;i,j:integer; begin s:=0; for i:=n downto 1 do begin s:=0; for j:=(i+1) to n do s:=s+a[i,j]*x[j]; x[i]:=(y[i]-s)/a[i,i]; end; end; procedure vvod(var a:matrix;var b:vektor; var n:integer); var i,j:integer; q:real; begin writeln('Введите количество точек на интервал: '); readln(n); q:=(-2+sqr(0.5/n)*(sqr(4*arctan(1))/4)); for i:=1 to n do begin for j:=1 to n do a[i,j]:=0; a[i,i]:=(q); end; for i:=1 to (n-1) do a[i,i+1]:=1; for i:=2 to n do a[i,i-1]:=1; for i:=1 to n do if i<>n then b[i]:=0 else b[i]:=(-sqr(2)/2); end; procedure triangul(var a:matrix;var b:vektor;var ret_code:integer; n:integer); label 1; var eps,buf,max,c:real; k,imax,i,j:integer; begin ret_code:=1; eps:=1; buf:=1+eps; while buf>1.0 do begin eps:=eps/2; buf:=1+eps; end; buf:=n*eps; for k:=1 to (n-1) do begin max:=a[k,k]; imax:=k; for i:=k to n do if a[i,k]>max then begin max:=a[i,k]; imax:=i; end; if a[imax,k]>buf then begin for j:=1 to n do begin c:=a[imax,j]; a[imax,j]:=a[k,j]; a[k,j]:=c; end; c:=b[imax]; b[imax]:=b[k]; b[k]:=c; for i:=(k+1) to n do begin a[i,k]:=a[i,k]/a[k,k]; for j:=(k+1) to n do a[i,j]:=a[i,j]-a[i,k]*a[k,j]; end; end else begin ret_code:=0; goto 1 end; 1: end; end; procedure vivod(var x:vektor;var n:integer); var i:integer; begin for i:=1 to n do writeln('x',i:1,'=',x[i]); end; begin vod(a,b,n); triangul(a,b,ret_code,n); if ret_code=1 then begin geradlini(a,b,y,n); ruckgang(a,y,x,n); vivod(x,n); end else writeln('Матрица вырождена '); end. program jakobi1(input,output); type vektor=array[1..100] of real; var r,y:vektor; z,ret_code,maxiter:integer; eps:real; procedure vvod(var z,maxiter:integer;var eps:real); begin writeln('Введите кол-во точек на интервал'); readln(z); writeln('Введите точность'); readln(eps); writeln('Введите кол-во итераций'); readln(maxiter); end; procedure ren(var r,y:vektor;var z,ret_kode,maxiter:integer;var eps:real); label 1; var iter,i:integer; rmax,q:real; begin q:=sqr(2/z); for i:=1 to z do y[i]:=1; ret_code:=0; for iter:=1 to maxiter do {c.1} begin rmax:=0; for i:=1 to z do {c.2} begin if i=1 then begin r[i]:=q-(-2*y[1]+y[2]); if rmax1)and(i<>z) then begin r[i]:=q-(y[i-1]-2*y[i]+y[i+1]); if rmax1)and(i<>z) then begin r[i]:=q-(y[i-1]-2*y[i]+y[i+1]); if rmax1) and (i<>z) then begin r:=Q-(y[i-1]-2*y[i]+y[i+1]); if Rmax1) and (i<>z) then begin r:=-(y[i-1]+q*y[i]+y[i+1]); if Rmax y[i]:=y[i]+R/q; end; end; if Rmax<=eps then begin retcode:=0; goto 1; end; end; 1: end; procedure vivod(var y:vector;var z:integer); var i:integer; begin for i:=1 to z do writeln (i:1,'=',y[i],); end; begin wod(z,maxiter,eps); reshen(y,z,retcode,maxiter,eps); if retcode=0 then vivod(y,z) else write('число итераций'); end. ИНСТРУКЦИЯ ДЛЯ ПОЛЬЗОВАТЕЛЯ Программа Jacobi1 предназначена для решения уравнений [pic]. Jacobi2 для решения уравнений [pic] ,методом конечных разностей находят значение [pic] в точках интервала (0.2) максимальное количество точек на интервал 1000. Используется массив для хранения значений вектора невязок [pic]. В процедуре reshen находится вектор невязок r [ i ]. Для первого и последнего уравнения системы находят вектора невязок различными способами. Для остальных уравнений системы вектор невязок находится одинаково. Сама матрица не формируется , т.е. для нахождения вектора невязок ее не нужно, это видно из текста программы. Программы Zeidel1 и Zeidel2, также решают уравнения [pic] и [pic] . Отличия от Jacobi состоит только в том, что отсутствует массив для вектора невязок. Программы Gaus1 и Gaus2 также решают эти уравнения, только методом Гаусса. В процедурах vvod задается количество точек на интервал(max=100) и формируются матрицы в зависимости от уравнения. Процедура triangul разлагает матрицу А на две треугольные. Процедура geradlini- прямой ход метода Гаусса. Процедура ruckgang- обратный ход. Процедура vivod- выводит значения [pic] . Вычисление уравнений с помощью итерационного метода Якоби требует времени t=0(maxiter Z), где Z- количество точек на интервал, а maxiter- количество итераций. Вычисление уравнений с помощью метода Гаусса требует времени t=0( [pic] ), где N- количество точек на интервал. Решение с помощью метода Гаусса требует больше времени чем решения другими двумя приведенными способами. |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |