">
Информатика Программирование
Информация о работе

Тема: Методы работы с файлами

Описание: Метод Симпсона (парабол). Работа методом хорд., половинного деления, прямоугольников. Вычисление определенного интеграла. Суть, формула метода прямоугольников шагом разбиения отрезка. Графическая иллюстрация метода трапеций. Оценка погрешностей методов.
Предмет: Информатика.
Дисциплина: Программирование.
Тип: Курсовая работа
Дата: 14.08.2012 г.
Язык: Русский
Скачиваний: 1
Поднять уникальность

Похожие работы:

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное
учреждение высшего профессионального образования

«Пермский национальный исследовательский
политехнический университет»

КУРСОВАЯ РАБОТА

по дисциплине «Математической моделирование»

Выполнил

ПЕРМЬ, 2012

Содержание:

1) Операции с файлами

2) Метод: а) Хорд

б) Половинного деления

3) Метод: а) Парабол

б) Прямоугольников

в) Трапеций

4) Метод: а) Гаусса

б) Ньютона

в) Зейделя

5) Метод: а) Эйлера

б) Рунге-Кутта

6) Ряды Фурье

Операции с файлами

Задача заключается в том, что бы изменить элементы исходной таблицы (массива) и вывести полученный результат в таком же виде.

В данном случае мы каждый элемент таблицы умножили на 3.

Текст задачи:

program z1;

const c=3;

var t,p:text; a,b:array [1..10,1..10] of integer;

i,j,n,m,k:integer;

begin

assign(t,H:Olegabl.txt);

assign(p,H:Olegpol.txt);

reset(t); i:=0;

while not eof(t) do

begin i:=i+1; j:=0;

while not eoln(t) do

begin j:=j+1; read(t,a[i,j]);

end; readln(t); end;

n:=i; m:=j;

for i:=1 to n do

begin for j:=1 to m do

write(a[i,j]:4); writeln; end; writeln;

for i:=1 to n do begin

for j:=1 to m do begin

b[i,j]:=a[i,j]*3;

write(b[i,j]:4); end;

writeln; end;

rewrite(p);

for i:=1 to n do begin

for j:=1 to m do

write(p,b[i,j], );

writeln(p); end; close(p);

readln; end.

Результаты

Исходные данные:

2 3 1 5  1 2 0 3  -4 -8 -9 1  6 9 3 15  3 6 0 9  -12 -24 -27 3  Полученные данные:

Вывод:

Данный способ работы с файлами достаточно прост и удобен. В данном случае выполняется всего одно действие (умножение на 3). Достоинство этого метода в том, что можно работать с числами довольно легко и быстро, недостаток же в том, что работать можно только с числами.

Решение иррациональных уравнений

Метод хорд

Теоретические сведения:

Задан отрезок [а,b], содержащий корень уравнения F(x)=0. Уточнение значения корня производится путем использования уравнения касательной. В качестве начального приближения задается тот из концов отрезка [а,b], где значение функции и ее второй производной имеют одинаковые знаки (т.е. выполняется условиеF(x0)*F"(x0) > 0). В точке F(x0) строится касательная к кривой у = F(x) и ищется ее пересечение с осью х. Точка пересечения принимается за новую итерацию. Решение контрольных математики методом Ньютона самый быстрый способ нахождения корней уравнений
Итерационная формула имеет вид:



Итерационный процесс проходит до того времени, пока не будет выполнено условие - F(X)

Иллюстрация метода хорд

Рисунок  иллюстрирует работу метода хорд. В данном случае вторая производная функции положительна, поэтому в качестве начального приближения выбрана точка хо = b. Как видно из рисунка, метод имеет очень быструю сходимость среди всех методов решения нелинейных уравнений: обычно заданная точность достигается за 2-3 итерации.

Блок схема

Текст задачи

program z1;

var i,k,n:integer;

v,s,x0,e,c,a,b,cc:real;

function f(x:real):real;

begin

f:=x*x-2*x;end;

begin

write(a=);readln(a);

write(b=);readln(b);

repeat begin

cc:=c;

k:=k+1;

c:=(b*f(a)-a*f(b))/(f(a)-f(b));

if f(a)*f(c)<0 then b:=c else a:=c;

e:=abs((cc-c)/c);

writeln(k=,k, c=,c:2:2, f(c)=,f(c):5:5, e=,e:5:5);

end;

until e<0.001;

readln

end.

Результаты

а=1, b=4 k(число итераций) c F(c) e(погрешность)  1 1.33 -0.88889 1.00000  2 1.60 -0.64000 0.16667  3 1.78 -0.39506 0.10000  4 1.88 -0.22145 0.05556  5 1.94  -0.11754 0.02941  6 1.97 -0.06059 0.01515  7 1.98 -0.03077 0.00769  8 1.99 -0.01550 0.00388  9

10 2.00

2.00 -0.00778

-0.00390 0.00195

0.00097  

Вывод:

Достоинство метода Хорд: очень быстрая сходимость по сравнению с методом половинного деления к заданной точности. Недостаток: громоздкий алгоритм: на каждой итерации необходимо вычислять значение функции, и ее первой производной.

Метод половинного деления

Теоретические сведения:

Этот метод решения уравнений отличается от других методов тем, что для него не требуется выполнения условия, что первая и вторая производная сохраняют знак на интервале [a, b]. Метод половинного деления сходится для любых непрерывных функций f(x) в том числе недифференцируемых.

Разделим отрезок [a, b] пополам точкой . Если   (что практически наиболее вероятно), то возможны два случая: либо f(x) меняет знак на отрезке [a, c] (Рис. 1), либо на отрезке [c, b] (Рис. 2)



Рис. 1 

Рис. 2  

Выбирая в каждом случае тот отрезок, на котором функция меняет знак, и, продолжая процесс половинного деления дальше, можно дойти до сколь угодно малого отрезка, содержащего корень уравнения.

Блок схема

Текст задачи

program z1;

var i,k,n:integer;

v,s,x0,e,c,a,b,cc:real;

function f(x:real):real;

begin

f:=x*x-2*x;end;

begin

write(a=);readln(a);

write(b=);readln(b);

repeat

cc:=c; k:=k+1; c:=(a+b)/2;

if f(a)*f(c)<0 then b:=c else a:=c;

e:=abs((cc-c)/c);

writeln(k=,k, ,c=,c:2:2, ,f(c)=,f(c):5:5, e=,e:5:5);

until e<0.001;

readln; end.

Результаты:

a=1;b=4 k c F(c) e  1 2.50 1.25000 1.00000  2 1.75 -0.43750 0.42857  3 2.13 0.26563 0.17647  4 1.94 -0.12109 0.09677  5 2.03 0.06348 0.04615  6 1.98 -0.03101 0.02362  7 2.01 0.01569 0.01167  8 2.00 -0.00780 0.00587  9 2.00 0.00391 0.00293  10 2.00 -0.00195 0.00147  11 2.00 0.00098 0.00073  

Вывод:

Недостаток метода половинного деления: медленная сходимость по сравнению с методом хорд к заданной точности. Достоинство: небольшй алгоритм вычисления значения функции, и ее первой производной.

Вычисление определенного интеграла

Метод парабол

Теоретические сведения

Метод парабол - метод вычисления корней многочлена с комплексными коэффициентами, и позволяет найти все корни многочлена без предварительной информации о начальном приближении.

Пусть функция y = f(x) непрерывна на отрезке [a; b] и нам требуется вычислить определенный интеграл.
Разобьем отрезок [a; b] на n элементарных отрезков длины 2h=(b-a)/n точками [x(2i-2);x(2i)]. Пусть точки x(2i-2) (i=1,2,3..n) являются серединами отрезков [x(2i-2);x(2i)] соответственно. В этом случае узлы определяются равенством x(i)=a+h*i.
Суть метода Симпсона (парабол) заключается в том, что на каждом интервале [x(2i-2);x(2i)] подынтегральная функция приближается квадратичной параболой y=a(i)*x*x+b(i)*x+c(i), проходящей через точки .(x(2i-2);f(x(2i-2)), .(x(2i-1);f(x(2i-1)), .(x(2i);f(x(2i)). Отсюда и название метода.
Геометрически это выглядит так:




Графическая иллюстрация метода Симпсона.
Красной линией изображен график функции y = f(x), синей линией показано приближение графика функции y = f(x) квадратичными параболами на каждом элементарном отрезке разбиения.



Блок схема

begin

Текст задачи

program z1;

const a=0;b=5;e=0.0001;

var k,n,p:integer;

ss,s,dx,u,x,h,z:real;

function f(x:real):real;

begin

f:=-(sin(x)+2);

end;

begin h:=b-a;

repeat

k:=k+1; ss:=s; h:=h/2;

s:=f(a)+f(b); x:=a+h; z:=-1;

while(xbegin

z:=-z;

s:=s+f(x)*(z+3);

x:=x+h; end;

s:=s*h/3;

u:=abs((ss-s)/s);

writeln(k=,k, ,s=,s:2:2,u=,u:5:5);

until (u<=e);readln;end.

Результаты

k s e  1  -11.20 1.00000  2  -10.73 0.04359  3 -10.72 0.00105  4 -10.72 0.00006  

Вывод

В данном методе среднее количество итераций и средняя сложность написания текста задачи. Достоинства данного метода заключаются в том, что он является самым точным из трех методов, недостаток этого метод в том, что сложно найти максимальное значение интеграла

Метод прямоугольников

Теоретические сведения

Пусть функция y = f(x) непрерывна на отрезке [a; b]. Нам требуется вычислить определенный интеграл. Так же как в методе парабол разбиваем отрезки.

Суть метода прямоугольников заключается в том, что в качестве приближенного значения определенного интеграла берут интегральную сумму.
Если отрезок интегрирования [a; b] разбить на равные части длины h точками, и в качестве точек выбрать середины элементарных отрезков, то приближенное равенство можно записать в виде . Это и есть формула метода прямоугольников. Ее еще называют формулой средних прямоугольников из-за способа выбора точек.

называют шагом разбиения отрезка [a; b].

Приведем графическую иллюстрацию.




Из чертежа видно, что подынтегральная функция y = f(x) приближается кусочной ступенчатой функцией на отрезке интегрирования.

С геометрической точки зрения для неотрицательной функции y = f(x) на отрезке [a; b] точное значение определенного интеграла представляет собой площадь криволинейной трапеции, а приближенное значение по методу прямоугольников – площадь ступенчатой фигуры.





Перейдем к оценке абсолютной погрешности метода прямоугольников. Сначала оценим погрешность на элементарном интервале. Погрешность метода прямоугольников в целом будет равна сумме абсолютных погрешностей на каждом элементарном интервале.

Блок схема

Текст задачи

Program z1;

const a=0;

b=5;

e=0.0001;

var k,n,p:integer;

ss,s,dx,u,x:real;

function f(x:real):real;

begin

f:={-(sin(x)+2);}2 end;

begin

k:=0; ss:=0; s:=0; n:=1;

repeat

k:=k+1;ss:=s;s:=0;n:=n*2;

dx:=(b-a)/n;x:=a;

while xbegin

s:=s+f(x)*dx; x:=x+dx;

end; u:=abs((ss-s)/s);

writeln(‘k=’,k,’ ‘,’s=’,s:1:2,’ ‘,’u=’ ,u:5:5,’ ‘,’n=’,’ ‘,n);

until ureadln; end.

Результаты

k s e n  1 -10.35 1.00000 2  2 -10.68 0.06100 4  3 -10.81 0.00023 6  

Вывод

Данный метод хорош тем, что он за минимальное количество итераций приближается к точному значению ответа. Недостаток его в том, что по написанию текста данной задачи она является самой сложной.

Метод Трапеций

Теоретические сведения

Пусть нам требуется вычислить определенный интеграл, где y = f(x) непрерывна на отрезке [a; b].
Разобьем отрезок [a; b] на n равных интервалов длины h точками. В этом случае шаг разбиения определяется так же как в методе парабол. Рассмотрим функцию на элементарных отрезках [x(i-1);x(i)].
Возможны четыре случая (на рисунке показаны простейшие из них, к которым все сводится при увеличении n):




На каждом отрезке [x(i-1);x(i)] заменим функцию y = f(x) отрезком прямой, проходящей через точки и . На рисунке показаны синими линиями:




В качестве приближенного значения интеграла возьмем выражение .
Давайте выясним, что означает в геометрическом смысле записанное приближенное равенство. В первом случае площадь криволинейной трапеции приближенно равна площади трапеции с основаниями f(x(i-1)), f(x(i)) и высотой h, в последнем случае определенный интеграл приближенно равен площади трапеции с основаниями -f(x(i-1)), -f(x(i))и высотой h, взятой со знаком минус. Во втором и третьем случаях приближенное значение определенного интеграла равно разности площадей красной и синей областей, изображенных на рисунке ниже.





Графическая иллюстрация метода трапеций.



Блок схема

Текс задачи

program z1;

const a=0;b=5;e=0.0001;

var k,n,p:integer;

ss,s,dx,x,u:real;

function f(x:real):real;

begin

f:=-(sin(x)+2);

end;

begin

k:=0; ss:=0; s:=0; n:=1;

repeat

k:=k+1;ss:=s;s:=0;n:=n*2;

dx:=(b-a)/n;x:=a;

while xbegin

s:=s+dx*(f(x)+f(x+dx))/2; x:=x+dx;

end;

u:=abs((ss-s)/s);

writeln(k=,k, ,s=,s:1:2, ,u= ,u:5:5, ,n=, ,n);

until u

Результаты

k s e n  1 -10.30 1.00000 2  2 -10.62 0.03041 4  3 -10.69 0.00676 8  4 -10.71 0.00165 16  5 -10.71 0.00041 32  6 -10.72 0.00010 64  7 -10.72 0.00003 128  

Вывод

В этом методе приближенное значение определенного интеграла стремиться к истинному значению, однако следует учитывать тот факт, что промежуточные вычисления в своем большинстве проводятся приближенно, и при больших n начинает накапливаться вычислительная погрешность.

Вывод о трех методах: При решении интеграла если требуется высокая точность решения, то лучше использовать метод парабол, если нужно наименьшее количество итераций то следует использовать метод прямоугольников, если же необходимо легкость написания задачи и использовать меньшее количество итераций то лучше использовать метод трапеций.

Решение систем линейных алгебраических уравнений

Метод Гаусса

Теоретические сведения

Метод Гаусса прекрасно подходит для решения систем линейных алгебраических уравнений (СЛАУ). Он обладает рядом преимуществ по сравнению с другими методами:

во-первых, нет необходимости предварительно исследовать систему уравнений на совместность;

во-вторых, методом Гаусса можно решать не только СЛАУ, в которых число уравнений совпадает с количеством неизвестных переменных и основная матрица системы невырожденная, но и системы уравнений, в которых число уравнений не совпадает с количеством неизвестных переменных или определитель основной матрицы равен нулю;

в-третьих, метод Гаусса приводит к результату при сравнительно небольшом количестве вычислительных операций.

Допустим, нам дана система из нескольких уравнений с неизвестными переменными.

Записываем эту совокупность в матричном виде, и можно производить некоторые действия для получения неизвестных переменных:

? поменять местами два уравнения,

? умножить обе части какого-либо уравнения на произвольное и отличное от нуля действительное (или комплексное) число k,

? к обеим частям какого-либо уравнения прибавить соответствующие части другого уравнения, умноженные на произвольное число к, таким образом, мы получим корни ур-ев.

Блок схема

Текст задачи

var t:text; a: array[1..5,1..5] of real;

c:real; n,i,j,k:integer; b:array[1..5] of real;

begin

assign(t,h:Oleg4matrica.txt);

reset(t);

while not eof(t) do

begin

i:=i+1;j:=0;

while not eoln(t) do

begin

j:=j+1;read(t,a[i,j]);end;

readln(t);end;

n:=i;close(t);

for i:=1 to n do begin

for j:=1 to n+1 do

write(a[i,j]:4:2, );writeln; end;

writeln;

for i:= 1 to n-1 do

for j:=i+1 TO n do begin

c:=a[i,i]/a[j,i];

for k:=i to n+1 do

a[j,k]:=a[i,k]-a[j,k]*c;end;

for i:=1 to n do begin

for j:=1 to n+1 do

write(a[i,j]:4:2, );writeln; end;

writeln;

b[n]:=a[n,n+1]/a[n,n];

for i:=n-1 downto 1 do begin

b[i]:=a[i,n+1]/a[i,i];

for j:=i+1 to n do

b[i]:=b[i]-a[i,j]*b[j]/a[i,i];end;

for i:=1 to n do

writeln(b[i]=, b[i]:0:2);

readln; end.

Результаты 1 3 -7 5 6  2 5 7 12 81  -2 1 1 1 7  3 6 9 -8 10  Корни уравнений данной системы: х1=2; х2=-1; х3=3; х4=1;

Метод Ньютона

Теоретические сведения

Задан отрезок [а,b], содержащий корень уравнения F(x)=0. Уточнение значения корня производится путем использования уравнения касательной. В качестве начального приближения задается тот из концов отрезка [а,b], где значение функции и ее второй производной имеют одинаковые знаки (т.е. выполняется условиеF(x0)*F"(x0) > 0).

В точке F(x0) строится касательная к кривой у = F(x) и ищется ее пересечение с осью х. Точка пересечения принимается за новую итерацию. Метод Ньютона самый быстрый способ нахождения корней уравнений

Итерационная формула имеет вид:



Итерационный процесс проходит до того времени, пока не будет выполнено условие /F(X)/< e , где e - заданная точность.



Рис. Иллюстрация метода Ньютона

Рис иллюстрирует работу метода Ньютона. В данном случае вторая производная функции положительна, поэтому в качестве начального приближения выбрана точка хо = b. Как видно из рисунка, метод имеет очень быструю сходимость среди всех методов решения нелинейных уравнений: обычно заданная точность достигается за 2-3 итерации

Блок схема

Текст задачи

var a:array[1..5,1..5] of integer;t:text;

i,j,m,n:byte; e,ed,alfa:real;d:boolean; b,c:array[1..5] of real;

begin

ed:=0.001;

assign(t,H:Oleg4m.txt);

reset(t);

while not eof(t) do

begin

i:=i+1;j:=0;

while not eoln(t) do

begin

j:=j+1;

read(t,a[i,j]);

end;readln(t);end;close(t);

n:=i;m:=j;

for i:=1 to n do begin

for j:=1 to m do

write(a[i,j], );writeln; end;

repeat

c:=b;

for i:=1 to n do

begin

b[i]:=a[i,n+1]/a[i,i];

for j:=1 to n do

if j<>i then b[i]:=b[i]-a[i,j]*c[j]/a[i,i];

writeln(b[,i,]=,b[i]:0:2);

end;

d:=false;

for i:=1 to n do begin

alfa:=0;

for j:=1 to n do

alfa:=alfa+(a[i,j]*b[j]);

e:=abs((alfa-a[i,n+1])/a[i,n+1]);

writeln(e=,e:2:5);

if e>=ed then d:=true;

end; writeln; until not d;

readln end.

Результаты

Корни уравнений х1=-1; х2=1; 4 2 2  2 5 7  

Вывод

Метод Ньютона позволяет находить решение систем линейных алгебраических уравнений, если определитель основной матрицы отличен от нуля. По сути метод сводится к вычислению определителей матриц порядка n на n и применению соответствующих формул для нахождения неизвестных переменных.

Метод Зейделя

Теоретические сведения

Метод Зейделя (иногда называемый методом Гаусса-Зейделя) является модификацией метода простой итерации, заключающейся в том, что при вычислении очередного приближения x(k+1) его уже полученные компоненты x1(k+1), ...,xi - 1(k+1) сразу же используются для вычисления xi(k+1).

В координатной форме записи метод Зейделя имеет вид:


x1(k+1) = c11x1(k) + c12x2(k) + ... + c1n-1xn-1(k) + c1nxn(k) + d1
x2(k+1) = c21x1(k+1) + c22x2(k) + ... + c2n-1xn-1(k) + c2nxn(k) + d2
...
xn(k+1) = cn1x1(k+1) + cn2x2(k+1) + ... + cnn-1xn-1(k+1) + cnnxn(k) + dn
где x(0) - некоторое начальное приближение к решению.

Таким образом i-тая компонента (k+1)-го приближения вычисляется по формуле

xi(k+1) = ? j=1i-1 cijxj(k+1) + ? nj=i cijxj(k) + di , i = 1, ..., n

Условие окончания итерационного процесса Зейделя при достижении точности ? в упрощенной форме имеет вид:

|| x (k+1) - x (k) || ? ?.

Блок схема

Текст задачи

var a:array[1..5,1..5] of integer;t:text;

i,j,m,n:byte; e,ed,alfa:real;d:boolean; b,c:array[1..5] of real;

begin

ed:=0.001;

assign(t,H:Oleg4m.txt);

reset(t);

while not eof(t) do

begin

i:=i+1;j:=0;

while not eoln(t) do

begin

j:=j+1;

read(t,a[i,j]);

end;readln(t);end;close(t);

n:=i;m:=j;

for i:=1 to n do

begin

for j:=1 to m do

write(a[i,j], );writeln; end;

repeat

for i:=1 to n do

begin

b[i]:=a[i,n+1]/a[i,i];

for j:=1 to n do

if j<>i then b[i]:=b[i]-a[i,j]*b[j]/a[i,i];

writeln(b[,i,]=,b[i]:0:2); end;

d:=false;

for i:=1 to n do

begin alfa:=0;

for j:=1 to n do

alfa:=alfa+(a[i,j]*b[j]);

e:=abs((alfa-a[i,n+1])/a[i,n+1]);

writeln(e=,e:2:5);

if e>=ed then d:=true;

end; writeln;

until not d;

readln end.

Результаты

Корни уравнений х1=2; х2=-1; х3=0; х4=4; 2 4 3 7  1 8 0 2  

Вывод

Достоинства метода Зейделя в том, что он достаточно просто в написании текста программы, не достоинства метода в том, что объем текста программы большой и громоские операции.

Заголовок

Метод Эйлера

Теоретические сведения.

Решить дифференциальное уравнение у/=f(x,y) численным методом - это значит для заданной последовательности аргументов х0, х1…, хn и числа у0, не определяя функцию у=F(x), найти такие значения у1, у2,…, уn, что уi=F(xi)(i=1,2,…, n) и F(x0)=y0.

Таким образом, численные методы позволяют вместо нахождения функции

У=F(x) получить таблицу значений этой функции для заданной последовательности аргументов. Величина h=xk-xk-1 называется шагом интегрирования.

Текст задачи

const x0=0; y0=1;xn=1;n=5; dX=(xn-x0)/n;

var x,y:array[1..100] of real;t:text; i,j:integer;

function f(x,y:real):real;

begin

f:=2*y-5*x+4;end;

begin

assign(t,h:Oleg5 diffeler diff.txt);

rewrite(t);

x[1]:=x0; y[1]:=y0;

writeln(x[1]:2:2, ,y[1]:2:2);

for i:=2 to n+1 do

begin

x[i]:=x[i-1]+dX;

y[i]:=y[i-1]+f(x[i-1],y[i-1])*dX;

writeln(x[i]:2:4, ,y[i]:2:4);

end;

for i:=1 to n+1 do

writeln(t,x[i]:2:4, ,y[i]:2:4);

close(t); readln; end.

Результаты 1 0.0000 1.0000  2 0.2000 2.2000  3 0.4000 3.6800  4 0.6000 5.5520  5 0.8000 7.9728  6 1.0000 11.1619  

Вывод

Метод Эйлера относиться к численным методам, дающим решение в виде таблицы приближенных значений искомой функции у(х). Он является сравнительно грубым и применяется в основном для ориентировочных расчетов.

Метод Рунге-Куты

Теоретические сведения

1. Эти методы являются одноступенчатыми: чтобы найти уm+1, нужна информация о предыдущей точке xm, ym.

2. Они согласуются с рядом Тейлора вплоть до членов порядка hp, где степень р различна для различных методов и называется порядковым номером или порядком метода.

3. Они не требуют вычисления производных от f (x, y), а требуют вычисления самой функции.

Текст программы

const

x0=0; y0=1; n=5; Xn=1;

deltax=(Xn-x0)/n;

var x,y:array[1..100] of real;

i,j:integer;

k:integer;

t:text;

k1,k2,k3,k4,deltay:real;

function f(x,y:real):real;

begin

f:=2*y-2*x+1;

{f:=exp(2*x)+x;}

end; begin

assign(t,H:Oleg unge-kut.txt);

rewrite(t);

x[1]:=x0; y[1]:=y0;

writeln(x[1]:2:5, ,y[1]:2:5);

for i:=2 to n+1 do begin

x[i]:=x[i-1]+deltax;

k1:=deltax*f(x[i-1],y[i-1]);

k2:=deltax*f(x[i-1]+deltax/2,y[i-1]+k1/2);

k3:=deltax*f(x[i-1]+deltax/2,y[i-1]+k2/2);

k4:=deltax*f(x[i-1]+deltax,y[i-1]+k3);

deltay:=(k1+2*k2+2*k3+k4)/6;

y[i]:=y[i-1]+deltay;

writeln(x[i]:2:5, ,y[i]:2:5);

end;

for i:=1 to n+1 do

writeln(t,x[i]:2:5, ,y[i]:2:5);

readln; close(t); end.

Результаты 1 0.00000 1.00000  2 0.20000 1.69173  3 0.40000 2.62527  4 0.60000 3.91951  5 0.80000 5.75182  6 1.00000 8.38679  

Вывод

Достоинства метода Рунта-Кутты в том, что этот метод достаточно точный и за малое количество итераций приходит к ответу, недостатки в том, что большие и неудобные выражения для вычислений требуются.

Общий вывод

Если при решении дифференциальных уравнений требуется точность вычислений, то лучше использовать метод Рунта-Кутты, если же достаточно приблизительной точности, то можно воспользоваться методом Эйлера. По уровню сложности написания текста задачи одинаковы.

Ряды Фурье

Теоретические сведения

Ряд Фурье является частным случаем функциональных рядов. Функциональным рядом называется выражение вида




где U1(x),U2(x), ... ,Uk(x), ...  - функции, зависящие от одной переменной х или от нескольких переменных (тогда через х обозначают точку в пространстве: х = (х1, ... , xn)).

Текст задачи

const

ee=1e-3;

a=0;

b=3;

period=b-a;

n=20;

id=1e-3;

var k:integer;

ex:text;

a0,t,dt,st,Ampl,phi,i:real;

ak,bk:array [1..n] of real;

function f(t:real):real;

begin

if (t>=0) and (t<1) then f:=t;

if (t>=1) and (t<2) then f:=1;

if (t>=2) then f:=6-2*t;

end;

function si(c,k:integer):real;

var t,dt,e,ss,s:real; z:integer;

begin

dt:=(b-a)/50;

repeat

ss:=s;

dt:=dt/2;

case c of

1: s:=f(a)+f(b);

2: s:=f(a)*cos(2*Pi*k*a/period)+f(b)*cos(2*Pi*k*b/period);

3: s:=f(a)*sin(2*Pi*k*a/period)+f(b)*sin(2*Pi*k*b/period);

4: s:=sqr(f(a))+sqr(f(b));

end;

t:=a+dt;

z:=-1;

while t begin

z:=-z;

case c of

1: s:=s+f(t)*(3+z);

2: s:=s+f(t)*cos(2*Pi*k*t/period)*(3+z);

3: s:=s+f(t)*sin(2*Pi*k*t/period)*(3+z);

4: s:=s+sqr(f(t))*(3+z);

end;

t:=t+dt;

end;

s:=2*(s*dt/3)/period;

if abs(s) begin

s:=0; e:=0; end

else e:=abs((ss-s)/s);

until e<=ee; si:=s;

end; begin

{assign (ex , H:PhoenixAfi.txt);

rewrite(ex);} a0:=si(1,0);

writeln(a0=,a0:0:7);

{for k:=1 to n do}

while i<=id do

begin

ak[k]:=si(2,k);

bk[k]:=si(3,k);

Ampl:=sqrt(sqr(ak[k])+sqr(bk[k]));

if (ak[k]>0) and (bk[k]>0) then phi:=arctan(ak[k]/bk[k]);

if (ak[k]>0) and (bk[k]<0) then phi:=arctan(ak[k]/bk[k])+pi;

if (ak[k]>0) and (bk[k]=0) then phi:=pi/2;

if (ak[k]<0) and (bk[k]>0) then phi:=arctan(ak[k]/bk[k])+2*pi;

if (ak[k]<0) and (bk[k]<0) then phi:=arctan(ak[k]/bk[k])+pi;

if (ak[k]<0) and (bk[k]=0) then phi:=3*pi/2;

if (ak[k]=0) and (bk[k]>0) then phi:=0;

if (ak[k]=0) and (bk[k]<0) then phi:=pi;

if (ak[k]=0) and (bk[k]=0) then writeln(net);

writeln({ex,}k:2,ak[k]:8:4,bk[k]:8:4,Ampl:6:2,phi*180/pi:6:0);

{writeln(k:2,ak[k]:8:4,bk[k]:8:4,Ampl:6:2,phi*180/pi:6:0);}

end;

dt:=(b-a)/(40*n);

t:=a;

while t<=b do begin

st:=a0/2;

for k:=1 to n do

st:=st+ak[k]*cos(2*pi*k*t/period)+bk[k]*sin(2*pi*k*t/period);

writeln(t:0:5, ,f(t):0:5, ,st:0:5);

t:=t+dt; end; {close(ex);} end.

Результаты 0.00000 0.00000 0.06024   0.01500 0.01500 0.04961   0.03000 0.03000 0.04232   0.04500 0.04500 0.03843   0.06000 0.06000 0.03793   0.07500 0.07500 0.04078   0.09000 0.09000 0.04688   0.10500 0.10500 0.05605   0.12000 0.12000 0.06812   0.13500 0.13500 0.08282   0.15000 0.15000 0.09988   0.16500 0.16500 0.11900   0.18000 0.18000 0.13983   0.19500 0.19500 0.16203   0.21000 0.21000 0.18524   0.22500 0.22500 0.20910   0.24000 0.24000 0.23325   0.25500 0.25500 0.25737   0.27000 0.27000 0.28114   0.28500 0.28500 0.30427   0.30000 0.30000 0.32651   0.31500 0.31500 0.34765   0.33000 0.33000 0.36752   0.34500 0.34500 0.38600   0.36000 0.36000 0.40301   0.37500 0.37500 0.41852   0.39000 0.39000 0.43255   0.40500 0.40500 0.44517   0.42000 0.42000 0.45647   0.43500 0.43500 0.46661   0.45000 0.45000 0.47575   0.46500 0.46500 0.48411   0.48000 0.48000 0.49190   0.49500 0.49500 0.49937   0.51000 0.51000 0.50675   0.52500 0.52500 0.51430   0.54000 0.54000 0.52224   0.55500 0.55500 0.53081   0.57000 0.57000 0.54020   0.58500 0.58500 0.55060   0.60000 0.60000 0.56214   0.61500 0.61500 0.57493   0.63000 0.63000 0.58906   0.64500 0.64500 0.60454   0.66000 0.66000 0.62137   0.67500 0.67500 0.63949   0.69000 0.69000 0.65882   0.70500 0.70500 0.67922   0.72000 0.72000 0.70053   0.73500 0.73500 0.72255   0.75000 0.75000 0.74505   0.76500 0.76500 0.76782   0.78000 0.78000 0.79057   0.79500 0.79500 0.81307   0.81000 0.81000 0.83504   0.82500 0.82500 0.85623   0.84000 0.84000 0.87641   0.85500 0.85500 0.89534   0.87000 0.87000 0.91284   0.88500 0.88500 0.92873   0.90000 0.90000 0.94289   0.91500 0.91500 0.95521   0.93000 0.93000 0.96565   0.94500 0.94500 0.97420   0.96000 0.96000 0.98087   0.97500 0.97500 0.98574   0.99000 0.99000 0.98891   1.00500 1.00000 0.99053   1.02000 1.00000 0.99077   1.03500 1.00000 0.98983   1.05000 1.00000 0.98793   1.06500 1.00000 0.98531   1.08000 1.00000 0.98220   1.09500 1.00000 0.97887   1.11000 1.00000 0.97555   1.12500 1.00000 0.97248   1.14000 1.00000 0.96985   1.15500 1.00000 0.96787   1.17000 1.00000 0.96669   1.18500 1.00000 0.96644   1.20000 1.00000 0.96721   1.21500 1.00000 0.96905   1.23000 1.00000 0.97197   1.24500 1.00000 0.97592   1.26000 1.00000 0.98086   1.27500 1.00000 0.98665   1.29000 1.00000 0.99315   1.30500 1.00000 1.00020   1.32000 1.00000 1.00757   1.33500 1.00000 1.01506   1.35000 1.00000 1.02242   1.36500 1.00000 1.02940   1.38000 1.00000 1.03578   1.39500 1.00000 1.04130   1.41000 1.00000 1.04575   1.42500 1.00000 1.04894   1.44000 1.00000 1.05069   1.45500 1.00000 1.05089   1.47000 1.00000 1.04944   1.48500 1.00000 1.04630   1.50000 1.00000 1.04147   1.51500 1.00000 1.03501   1.53000 1.00000 1.02704   1.54500 1.00000 1.01771   1.56000 1.00000 1.00724   1.57500 1.00000 0.99588   1.59000 1.00000 0.98393   1.60500 1.00000 0.97174   1.62000 1.00000 0.95966   1.63500 1.00000 0.94809   1.65000 1.00000 0.93744   1.66500 1.00000 0.92811   1.68000 1.00000 0.92050   1.69500 1.00000 0.91502   1.71000 1.00000 0.91203   1.72500 1.00000 0.91187   1.74000 1.00000 0.91484   1.75500 1.00000 0.92118   1.77000 1.00000 0.93110   1.78500 1.00000 0.94471   1.80000 1.00000 0.96210   1.81500 1.00000 0.98324   1.83000 1.00000 1.00807   1.84500 1.00000 1.03644   1.86000 1.00000 1.06813   1.87500 1.00000 1.10284   1.89000 1.00000 1.14023   1.90500 1.00000 1.17987   1.92000 1.00000 1.22131   1.93500 1.00000 1.26404   1.95000 1.00000 1.30750   1.96500 1.00000 1.35112   1.98000 1.00000 1.39432   1.99500 1.00000 1.43650   2.01000 1.98000 1.47707   2.02500 1.95000 1.51547   2.04000 1.92000 1.55115   2.05500 1.89000 1.58360   2.07000 1.86000 1.61237   2.08500 1.83000 1.63706   2.10000 1.80000 1.65730   2.11500 1.77000 1.67285   2.13000 1.74000 1.68348   2.14500 1.71000 1.68907   2.16000 1.68000 1.68958   2.17500 1.65000 1.68502   2.19000 1.62000 1.67549   2.20500 1.59000 1.66118   2.22000 1.56000 1.64230   2.23500 1.53000 1.61916   2.25000 1.50000 1.59211   2.26500 1.47000 1.56155   2.28000 1.44000 1.52790   2.29500 1.41000 1.49163   2.31000 1.38000 1.45321   2.32500 1.35000 1.41312   2.34000 1.32000 1.37184   2.35500 1.29000 1.32983   2.37000 1.26000 1.28754   2.38500 1.23000 1.24537   2.40000 1.20000 1.20370   2.41500 1.17000 1.16286   2.43000 1.14000 1.12312   2.44500 1.11000 1.08471   2.46000 1.08000 1.04779   2.47500 1.05000 1.01248   2.49000 1.02000 0.97884   2.50500 0.99000 0.94685   2.52000 0.96000 0.91646   2.53500 0.93000 0.88758   2.55000 0.90000 0.86005   2.56500 0.87000 0.83370   2.58000 0.84000 0.80832   2.59500 0.81000 0.78368   2.61000 0.78000 0.75952   2.62500 0.75000 0.73562   2.64000 0.72000 0.71172   2.65500 0.69000 0.68759   2.67000 0.66000 0.66302   2.68500 0.63000 0.63782   2.70000 0.60000 0.61185   2.71500 0.57000 0.58500   2.73000 0.54000 0.55719   2.74500 0.51000 0.52839   2.76000 0.48000 0.49864   2.77500 0.45000 0.46801   2.79000 0.42000 0.43661   2.80500 0.39000 0.40462   2.82000 0.36000 0.37223   2.83500 0.33000 0.33969   2.85000 0.30000 0.30728   2.86500 0.27000 0.27530   2.88000 0.24000 0.24408   2.89500 0.21000 0.21395   2.91000 0.18000 0.18524   2.92500 0.15000 0.15829   2.94000 0.12000 0.13342   2.95500 0.09000 0.11092   2.97000 0.06000 0.09108   2.98500 0.03000 0.07412  Вывод

Этот метод дает точные результаты, за достаточно большое количество итераций и еще один недостаток, это сложные и громоские вычисления.

Интернет-ресурсы:

http://эссе.рф - сборник не проиндексированных рефератов. Поиск по рубрикам и теме. Большинство текстов бесплатные. Магазин готовых работ.