- •Постановка задач
- •Математическое описание методов
- •2.1. Метод хорд
- •2.2 Решение систем линейных уравнений методом Зейделя
- •2.3. Метод Рунге-Кутта
- •Блок-схема модуля hord1 (процедура hord)
- •3.3 Блок-схема модуля roonge1 (процедура roonge)
- •Описание стандартных функций
- •5 Описание нестандартных функций
- •6 Описание интерфейса
- •7 Численные примеры
5 Описание нестандартных функций
Описание не стандартных функций сводится к описанию модуей.
Модуль hord1 содержит следующие функции и методы:
Funct(x:real):real;- принимает одно входное значение x, после чего функция вычисляет и возвращает значение исходной математической функции от данного x;
Hord.init данный метод инициализирует новый объект типа hord;
Hord.shag данный метод выполняет один математический шах по методу хорд в объекте hord;
Hord.poisk:real данная функция реализует цикл поиска корня линейного уравнения по методу хорд, после окончания поиска функция возвращает значение корня.
Модуль zeid1 – содержит одну процедуру (zeid). Которая выполняет решение системы линейных уравнений методом Зейделя.
Модуль roonge1 – содержит одну процедуру (roonge). Которая выполняет решение дифференциального уравнения методом Рунге-Кутта.
6 Описание интерфейса
Основная программа GLAV (использующая методы структурного программирования) работает следующим образом. Используя способ запроса, определяет дальнейший ход развития. При получении любого результата отличного от 1,2,3 вновь возвращается на начало программы. Тем самым, исключая возможность ошибочного ввода. При получении ответа соответствующего цифрам 1,2,3 передает управление одной из процедур описанных в не стандартных модулях пользователя. При этом выполнение главной программы практически заканчивается за исключением оператора выхода, который выполняется при вводе цифры 4 . Управление передается соответственно одному из модулей (hord1, zeid1, roonge1). Каждый из перечисленных модулей по сути своей представляет отдельную программу, являющуюся составной частью другой. Это позволяет в зависимости от выбора пользователя выполнить тот или иной самостоятельный модуль, входящий в главную программу.
При выборе 1 управление передается модулю myzend(процедура zend) выполнение которого приводит к выходу из модуля в главную программу.
Аналогично построены и два других модуля входящих в программу GLAV.
Окно главной программы:
Результат процедуры hord:
Результат процедуы zeid:
Результат процедуры roonge:
7 Численные примеры
Все выше перечисленное в данной курсовой работе проиллюстрировано на конкретных примерах.
-
Задано алгебраическое уравнение, 2х-3sin(2x)-1=0 , имеющее явно отрицательное значение при , и положительное значение при . При заданной точности вычисления , при решении методом хорд, дает .
a |
b |
f(a) |
f(b) |
x |
f(x) |
1 |
2 |
-1 |
5,270407 |
1 |
-1,7278923 |
1,463504 |
2 |
1,288182 |
5,270407 |
1,4635038 |
1,2881816 |
1,289957 |
2 |
-0,01791 |
5,270407 |
1,2899565 |
-0,0179125 |
1,292362 |
2 |
-0,00087 |
5,270407 |
1,2923616 |
-0,0008707 |
1,292478 |
2 |
-4,2E-05 |
5,270407 |
1,2924785 |
-4,153E-05 |
1,292484 |
2 |
-2E-06 |
5,270407 |
1,292484 |
-1,979E-06 |
1,292484 |
2 |
-9,4E-08 |
5,270407 |
1,2924843 |
-9,427E-08 |
1,292484 |
2 |
-4,5E-09 |
5,270407 |
1,2924843 |
-4,491E-09 |
1,292484 |
2 |
-2,1E-10 |
5,270407 |
1,2924843 |
-2,14E-10 |
1,292484 |
2 |
-1E-11 |
5,270407 |
1,2924843 |
-1,02E-11 |
1,292484 |
2 |
-4,9E-13 |
5,270407 |
1,2924843 |
-4,863E-13 |
1,292484 |
2 |
-2,3E-14 |
5,270407 |
1,2924843 |
-2,309E-14 |
1,292484 |
2 |
-1,1E-15 |
5,270407 |
1,2924843 |
-1,11E-15 |
Видно из графика что корень уравнения приблизительно равен 1,3
-
Решение заданной системы
линейных уравнений осуществлялся с помощью Maple:
ЗАКЛЮЧЕНИЕ
В заключение хотелось бы отметить, что методы структурного программирования позволяют более мобильно и качественно проводить работу по модернизации программного обеспечения. Так достаточно усовершенствовать отдельный модуль откомпилировать его и главный модуль, для достижения, желаемого результата. Более того, текст главной программы более читаем, и занимает меньше места. Имеющиеся наработки в отдельных модулях можно использовать в других программах, не задумываясь об их работоспособности. Четко вычерченная структура позволяет яснее представить цели и задачи стоящие перед программистом. Не нужно все время перемещаться по тексту взад и вперед. В любой промежуток времени работы над очень большой программной появляется возможность сконцентрироваться на отдельном модуле. Открывается возможность совместной работы нескольких человек над одной громоздкой программной. Удачно разработанный модуль одного программиста становиться, доступен другим.
Все выше перечисленное позволяет сделать вывод. Что структурное программирование открывает не объятые просторы в развитии современной техники, и будущее, а вернее сказать уже настоящее именно за ним. Вместе с объектно-ориентированным программированием оно уже составляет авангард современной науки.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1.Воробьев Г.Н., Бахвалов Н.С. «Численные методы». М.: Наука, 1973. 231с.
2. Ефимов А.В., Демидович Б.П. «Линейная алгебра и основы математического анализа». М.: Наука, 1981. 386с.
3. Бараненков Г.С., Демидович Б.П. «Задачи и упражнения по математическому анализу для ВТУЗОВ». М.: Наука, 1980. 184с.
4. Абрамов С.А., Зима Е.В. «Начало программирования на языке Паскаль». М.: Наука, 1987. 8с.
5. Епанешников А.Е., Красильников Ю.И. «Программирование в среде турбо Паскаль». М.: Центр МИФИ СП Диалог, 1990. 3-6с.
Приложение:
Метод хорд:
unit myhord;
interface
uses crt;
type hord=object
a,b,c,cp,eps:real;
constructor init;
procedure shag;
function poisk:real;
end;
function funct(x:real):real;
implementation
function funct(x:real):real;
begin
funct:=2*x-3*sin(2*x)-1
end;
constructor hord.init;
begin
clrscr;
writeln(' Metod HORD');
write('Vvedite pogreshnost eps = ');
readln(eps);
write('Vvedite nachalo otrezka: a = ');
readln(a);
write('Vvedite konets otrezka: b = ');
readln(b);
cp:=b;
c:=b-(funct(b)*(a-b))/(funct(a)-funct(b));
end;
procedure hord.shag;
begin
if(funct(a)*funct(c)>0)
then a:=c
else b:=c;
cp:=c;
c:=b-(funct(b)*(a-b))/(funct(a)-funct(b));
end;
function hord.poisk:real;
begin
while (abs(c-cp)>eps) do
begin
if(funct(c)=0) then
begin
break;
end
else
begin
shag;
end;
end;
poisk:=c;
end;
end.
Метод Зейделя:
unit Dec_sys;
interface
uses crt;
type
matrix=array[1..10,1..10] of real;
vector=array[1..10] of real ;
TDec_sys=object
n:integer;
procedure Zeidel(a:matrix;b:vector;x:vector;e:real);
procedure Dec_Zeidel;
constructor Init;
destructor Done;
end;
implementation
procedure TDec_sys.Zeidel(a:matrix; b:vector; x:vector; e:real);
var i,j,flag:integer;
s1, s2, s, v, m:real;
begin
flag:=1;
for i:=1 to n do
begin
s := 0;
for j:=1 to n do
if j<>i then
s:=s+abs(a[i][j]);
if s>=abs(a[i][i]) then
flag:=0;
end;
if (flag=1) then
begin
repeat
begin
m:=0;
for i:=1 to n do
begin
s1:=0;
s2:=0;
for j:=1 to i do
s1:=s1+(a[i][j]*x[j]);
for j:=i+1 to n do
s2:=s2+a[i][j] * x[j];
v:=x[i];
x[i]:=x[i]-((1 / a[i][i])*(s1 + s2 - b[i]));
if (abs (v-x[i]) >m ) then
m:=abs(v - x[i]);
end;
end; until (m>=e );
writeln('ђҐиҐЁҐ бЁб⥬л:');
for i:=1 to n do
writeln('x',i,'=',x[i]:5:5);
end
else writeln('‘Ёб⥬ Ґ б室Ёвбп!');
end;
procedure TDec_sys.Dec_Zeidel;
var eps:real;
a:matrix;
b,x:vector;
i,j:integer;
begin
clrscr;
writeln('ђҐиҐЁҐ бЁб⥬л га ўҐЁ©:');
writeln('a11ъx1+a12ъx2+a13ъx3=b1');
writeln('a21ъx1+a22ъx2+a23ъx3=b1');
writeln('a31ъx1+a32ъx2+a33ъx3=b1');
writeln;
write('‚ўҐ¤ЁвҐ в®з®бвм: '); readln(eps);
writeln;
writeln('‚ўҐ¤ЁвҐ н«Ґ¬Ґвл а биЁаҐ®© ¬ ваЁжл бЁб⥬л:');
for i:=1 to n do
begin
for j:=1 to n do
begin
write('a',i,j,'=');
readln(a[i][j]);
end;
end;
writeln;
writeln('‚ўҐ¤ЁвҐ н«Ґ¬Ґвл бв®«Ўж бў®Ў®¤ле з«Ґ®ў:');
for i:=1 to n do
begin
write('b',i,'=');
readln(b[i]);
end;
for i:=1 to n do
begin
x[i]:=0;
end;
writeln;
Zeidel(a,b,x,eps);
readln;
end;
constructor TDec_sys.Init;
begin
n:=3;
end;
destructor TDec_sys.Done;
begin
clrscr;
end;
end.
Метод Рунге-Кутта:
unit rk;
interface
uses crt;
type TEiler=object
x,y,h,b,dx1,dx2,dx3,dx4,ddx:real;
constructor init;
procedure shag;
procedure poisk;
end;
function proizv(f,g:real):real;
implementation
function proizv(f,g:real):real;
begin
proizv:=g*g-f*f;
end;
constructor TEiler.init;
begin
clrscr;
x:=0;
y:=0.5;
h:=0.1;
b:=1;
end;
procedure TEiler.shag;
begin
dx1:=proizv(x,y);
dx2:=proizv(x+h/2,y+h*dx1/2);
dx3:=proizv(x+h/2,y+h*dx2/2);
dx4:=proizv(x+h,y+h*dx3);
ddx:=(dx1+2*dx2+2*dx3+dx4)/6;
y:=y+ddx*h;
x:=x+h;
end;
procedure TEiler.poisk;
var f:text;
begin
assign(f,'1.txt');
rewrite(f);
while (x<=b) do
begin
writeln('x=',x:3:3,' ','y=',y:3:3);
writeln(f,x,' ',y);
shag;
end;
close(f);
end;
end.