Объектно-ориентированное программирование на примере численных методов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    861,94 Кб
  • Опубликовано:
    2013-07-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Объектно-ориентированное программирование на примере численных методов

ВВЕДЕНИЕ

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

Подобные задачи решаются с помощью численных методов, разработанных для решения математических задач при помощи вычислительной техники на таких языках программирования, как: QBASIC, TURBO PASCAL, C++, DELPHI, VISUAL BASIC и д.р. пакеты программ. В частности, математические пакеты MathCAD, Maple, MathLab также дают возможность решения подобных задач, а так же оптимизации технологического процесса.

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

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

С помощью вычислительной техники можно решить и иные инженерные задачи, но с определенной погрешностью.

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

Составить программу приближенного вычисления методом половинного деления следующего уравнения:


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

Составить программу для вычисления системы уравнений методом Крамера.


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

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

1. МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ МЕТОДОВ

.1 Метод половинного деления при приближенном вычислении алгебраических и трансцендентных уравнений

Пусть данное уравнение приведено к виду [1]:

 (1)

где  (r-постоянная) при . Исходя из начального значения , принадлежащего отрезку  построим последовательность чисел …. по следующему закону:

 (2)

Если  (n=1,2,3,….) то предел


является единственным корнем уравнения (1.1) на отрезке , т.е.  суть последовательные приближения корня .

Оценка абсолютной погрешности n-го приближения  дается формулой


Поэтому, если  и  совпадают с точностью до , то предельная абсолютная погрешность для  будет

.

Для преобразования уравнения  к виду (1.1) заменяем последнее эквивалентным уравнением

 (3)

где число 0 выбирается так, чтобы функция

=1-

была малой по абсолютной величине в окрестности точки  (например, можно положить, что

-)

Учитывая, все выше изложенное для решения алгебраического уравнения будем использовать формулу (3) приведя ее к следующему виду

 (4)

где

 

и принимая за  половину выбранного отрезка

 

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

Вычисления по формуле (4) проводится до тех пор, пока выполняется неравенство , где - заданная точность вычисления. Как только будет выполняться неравенство , вычисления прекращаются. При этом и будет решением заданного уравнения с точностью .

1.2 Решение системы уравнений правилом Крамера

Пусть задана система n линейных уравнений с n неизвестными вида [3]

++…+=

++…+=

………………………………... (1)

++…+=

или, в матричной форме, АХ=В, где

А=, Х=, В=.

Если в системе (1.2) , т.е. матрица  имеет обратную матрицу , то система (1.2) имеет, и притом единственное, решение

,

или в компонентной записи,

, i= 1,2,…,n. (2)

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

При этом для вычисления определителя используем основное свойство определителя: Если какую-либо строку или столбец умножить на число и результат прибавить к другой строке или столбцу, то определитель не измениться. Определитель

= при  представим в виде матрицы

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

 то есть определитель будет равен произведению членов главной оси матрицы.

В дальнейшем, заменяя i-столбец на столбец свободных членов по формуле (2) находим значения неизвестных.

1.3 Умножение матрицы на матрицу

Эта операция осуществляется по своеобразному закону. Прежде всего, заметим, что размеры матриц-сомножителей должны быть согласованы. Перемножать можно только те матрицы, у которых число столбцов первой матрицы совпадает с числом строк второй матрицы (т.е. длина строки первой равна высоте столбца второй). Произведением матрицы A на матрицу B называется новая матрица C=AB, элементы которой составляются следующим образом:


Таким образом, например, чтобы получить у произведения (т.е. в матрице C) элемент, стоящий в 1-ой строке и 3-м столбце c13, нужно в 1-ой матрице взять 1-ую строку, во 2-ой - 3-й столбец, и затем элементы строки умножить на соответствующие элементы столбца и полученные произведения сложить. И другие элементы матрицы-произведения получаются с помощью аналогичного произведения строк первой матрицы на столбцы второй матрицы.

В общем случае, если мы умножаем матрицу A = (aij) размера m×n на матрицу B = (bij) размера n×p, то получим матрицу C размера m×p, элементы которой вычисляются следующим образом: элемент cij получается в результате произведения элементов i-ой строки матрицы A на соответствующие элементы j-го столбца матрицы B и их сложения.

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

2. БЛОК-СХЕМА ПРОГРАММЫ GLAV

Рис. 1

2.1 Блок-схема POLdel


2.2 Блок-схема krame

Рис. 3

2.3 Блок-схема matrica

Рис. 4

Рис. 5

3. ОПИСАНИЕ СТАНДАРТНЫХ ФУНКЦИЙ

- очищает экран.- вывод значений на стандартное устройство (консоль) и в файл.- вывод значений на стандартное устройство (консоль) и в файл + перевод каретки.- считать один или несколько символов после нажатия Enter.- считать один или несколько символов после нажатия Enter + перевод каретки.- считать один символ без нажатия Enter.

4. ОПИСАНИЕ НЕСТАНДАРТНЫХ ПРОЦЕДУР И ФУНКЦИЙ

Программа GLAVN сама по себе использует не стандартные модули (POldel, Kramer, matrica), которые в свою очередь содержат не стандартные процедуры и функции, выполнение которых приводит к выполнению программы. Поэтому описание не стандартных процедур и функций, по сути, сводится к описанию процедур и функций, содержащихся в выше перечисленных модулях.- метод половинного деления.- метод Крамера.- умножение матрицы на матрицу.

5. ОПИСАНИЕ ИНТЕРФЕЙСА

После запуска программы GLAVN.exe на экране появляется меню,

Рис. 6

в котором указаны пункты: 1, 2, 3, они соответственно вызывают методы. При нажатии кнопки 1, 2, 3 вызывается метод. После выполнения выбранного метода выводится меню повторить (y) или нет (n).

Повтор (y/n) при нажатии «y» программа повторяется, а при нажатии «n» программа завершается.

Рис. 7 - Результат процедуры POLdel

Рис. 8 - Результат процедуры Matrica

Рис. 9 - Результат процедуры krame

6. ЧИСЛЕННЫЕ ПРИМЕРЫ

Все выше перечисленное в данной курсовой работе проиллюстрировано на конкретных примерах.

При проверке правильности программы использовалось приложение Microsoft Excel. В приложении вводим данные в виде таблицы и далее строим график используя данные.

Решение уравнения методом половинного деления: . Проверка решения в Microsoft Exсel.

x

y

1

-1

1,1

-0,89469

1,2

-0,77768

1,3

-0,64764

1,4

-0,50353

1,5

-0,34453

1,6

-0,17

1,7

0,020628

1,8

0,227787

1,9

0,451854

2

0,693147

2,1

0,951937

2,2

1,228457

2,3

1,522909

2,4

1,835469

2,5

2,166291

2,6

2,515511

2,7

2,883252

крамер метод деление интерфейс

По данным таблицы построим график зависимости из которого видно, что корень уравнения находится на интервале от 1.6 до 1.7.








Рисунок 10 - График зависимости у от х

b

(a+b)/2

f(a)

f(b)

f((a+b)/2)

|a-b|

1,6

1,7

1,65

-0,17

0,020628

-0,07672

0,1

1,65

1,7

1,675

-0,07672

0,020628

-0,02856

0,05

1,675

1,7

1,6875

-0,02856

0,020628

-0,0041

0,025

1,6875

1,7

1,69375

-0,0041

0,020628

0,008234

0,0125

1,6875

1,7

1,690625

-0,0041

0,008234

0,002061

0,00625

1,6875

1,690625

1,689063

-0,0041

0,002061

-0,00102

0,003125

1,689063

1,690625

1,689844

-0,00102

0,002061

0,00052

0,001563

1,689063

1,689844

1,689453

-0,00102

0,00052

-0,00025

0,000781

1,689453

1,689844

1,689648

-0,00025

0,00052

0,000135

0,000391

1,689453

1,689551

-0,00025

0,000135

-5,7E-05

0,000195

1,689551

1,689648

1,6896

-5,7E-05

0,000135

3,92E-05

9,77E-05

Примем a = 1,6 и b = 1,7 и по этим данным составим таблицу 5 в Microsoft Exсel, в которой просчитываем решение до момента пока погрешность вычисления не станет равной 0,001

Решение уравнения методом Крамера

При заданной системе уравнений


решение методом Крамера имеем следующие значения неизвестных , ,

•0.2619+0.86•1.9239+0.3•0.9934 = 3

.05•0.2619+2•1.9239+0.14•0.9934 = 4

.07•0.2619+0.5•1.9239+-3•0.9934 = -2

проверка равенств на интеренет-сайте дает абсолютно точный результат.


Умножение матрицы на матрицу

Умножаем матрицу

 на

Получаем результат:


Численный пример проверен на интернет-сайте


Диаграмма взаимодействия

Рис. 11

Диаграмма классов





ЗАКЛЮЧЕНИЕ

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1.   Воробьев Г.Н., Бахвалов Н.С. «Численные методы». М., 2008. 231 с.

2.      Ефимов А.В., Демидович Б.П. «Линейная алгебра и основы математического анализа». М.: Наука, 2008. 386 с.

.        Бараненков Г.С., Демидович Б.П. «Задачи и упражнения по математическому анализу для ВТУЗОВ». М.: Наука, 2008. 184 с.

.        Абрамов С.А., Зима Е.В. «Начало программирования на языке Паскаль». М.: Наука, 2008. 8 с.

.        Епанешников А.Е., Красильников Ю.И. «Программирование в среде турбо Паскаль». М.: Центр МИФИ СП Диалог, 2008. 3-6 с.

6.      http://window.edu.ru/library/pdf2txt/746/59746/29792/page

ПРИЛОЖЕНИЕ

glavn;crt,POLdel,Matrica,Krame;e1:POLdel;:eiler;: Matrica;:integral;: Krame;:poldel;:real;,flag:integer;Menu;;(' ЙННННННННННННННННННННННННННННННННН»');(' є MENU є');(' МННННННННННННННННННННННННННННННННН№');(' є 1 - POLdel є');(' є 2 - Matrica є');(' є 3- Krame є');('

ИНННННННННННННННННННННННННННННННННј');;;:=1;(flag=1) do;;('Wibirite punkt menu:');(i);i of

: begin;.init;(c.poisk);;;

: begin;.init;(s.poisk);;;

: begin;.init;(y.poisk);;;;.poldel;;crt;Poldel=object;,b,e,c,x:real;.init;shag;poisk:real;;funct(x:real):real;funct(x:real):real;:x*x-2*x+ln(x);Poldel.init;;:=1,2;:=1,3;(‘e= ‘);(e);:=(a+b)/2;;TPoldel.shag;abs(b-a)>e dofunct(a)*func(c)<0:=c;:=c;:=(a+b)/2;;;TPoldel.poisk:real;y:Poldel;:real;.init;.poisk;;.Krame;crt;=array[1..20] of real;=array[1..20] of Tmass;Per(k,n:integer;var a:Tmatrix;var p:integer);z:Real;j,i:integer;:=abs(a[k,k]);:=k;:=0;j:=k+1 to n doabs(a[j,k])>z then:=abs(a[j,k]);:=j;:=p+1;;;i>k thenj:=k to n do:=a[i,j];[i,j]:=a[k,j];[k,j]:=z;;;Znak(p:integer):integer;p mod 2=0 then:=1 else Znak:=-1;;Opr(n:integer;a:tmatrix;var det:real);k,i,j,p:integer;r:real;:=1.0;k:=1 to n doa[k,k]=0 then Per(k,n,a,p);:=znak(p)*det*a[k,k];j:=k+1 to n do:=a[j,k]/a[k,k];i:=k to n do[j,i]:=a[j,i]-r*a[k,i];;;;;a:Tmatrix;:array[1..20] of Tmatrix;,x:Tmass;,det1:real;,k,j,i:integer;;('Порядок системы n=');(n);

writeln('Введите коэффициенты системы:');

for i:=1 to n doj:=1 to n do(a[i,j]);;

writeln('Введите свободные члены:');

for i:=1 to n do(b[i]);

readln;;('Расширенная матрица системы:');

for i:=1 to n doj:=1 to n do(a[i,j]:7:2);(b[i]:9:2);;;

Opr(n,a,det);{определитель системы исходной}

for i:=1 to n dok:=1 to n doj:=1 to n do[i][k,j]:=a[k,j];[i][k,i]:=b[k];;(n,c[i],det1);(det=0)and(det1=0) then

writeln('Система не определена!');

readln;;;(det=0)and(det1<>0) then

begin('Система не имеет решений!');

readln;;;[i]:=det1/det;{корень};('Корни сиcтемы:');i:=1 to n do('x',i,'=',x[i]:7:3);.Max=50;= object,nn,mm: integer;: double;,BB,CC: array [1..Max,1..Max] of Double;input;calculations;output;;Matrix.input;ii,jj:integer;('Vvedite chislo strok 1-y matricy - A (<=50)--> '); readln(NN);('Vvedite chislo stolbcov 2-y matricy - A (<=50)--> '); readln(KK);('Vvedite chislo stolbcov 2-y matricy - B (<=50)--> '); readln(MM);('Vvedite 1-yu matricu (A):');ii:=1 to nn dojj:=1 to kk do('Vvedite A[',ii,',',jj,'] --> ');(AA[ii,jj]);;('Vvedite 2-yu matricu (B):');ii:=1 to kk dojj:=1 to mm do('Vvedite B[',ii,',',jj,'] --> ');(BB[ii,jj]);;;Matrix.calculations;ii,jj,ll:integer;;ii:=1 to nn dojj:=1 to mm do:= 0;ll:= 1 to kk do:= Summa + AA[ii,ll]*BB[ll,jj];[ii,jj] := Summa;;;Matrix.output;ii,jj:integer;('---- rezul''tat: -----');ii:=1 to nn dojj:=1 to mm do(CC[ii,jj]:8:2);;;;MyMatrix:Matrix;.input;.calculations;.output;

readln;.

Похожие работы на - Объектно-ориентированное программирование на примере численных методов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!