Главная » Рефераты    
рефераты Разделы рефераты
рефераты
рефератыГлавная
рефератыЕстествознание
рефератыУголовное право уголовный процесс
рефератыТрудовое право
рефератыЖурналистика
рефератыХимия
рефератыГеография
рефератыИностранные языки
рефератыРазное
рефератыИностранные языки
рефератыКибернетика
рефератыКоммуникации и связь
рефератыОккультизм и уфология
рефератыПолиграфия
рефератыРиторика
рефератыТеплотехника
рефератыТехнология
рефератыТовароведение
рефератыАрхитектура
рефератыАстрология
рефератыАстрономия
рефератыЭргономика
рефератыКультурология
рефератыЛитература языковедение
рефератыМаркетинг товароведение реклама
рефератыКраеведение и этнография
рефератыКулинария и продукты питания
рефераты
рефераты Информация рефераты
рефераты
рефераты

Электроснабжение

Электроснабжение

СОДЕРЖАНИЕ

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- количество точек на интервал.

Решение с помощью метода Гаусса требует больше времени чем решения

другими двумя приведенными способами.

рефераты Рекомендуем рефератырефераты

     
Рефераты @2011