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

Метод половинного деления при приближенном вычислении алгебраических и трансцендентных выражений. Решение системы уравнений методом Крамера. Блок-схема программы Glav. Описание стандартных и нестандартных процедур и функций, интерфейса. Численные примеры.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 29.07.2013
Размер файла 1,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(1)

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

(2)

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

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

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

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

.

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

(3)

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

=1-

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

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

Размещено на http://www.allbest.ru/

Рис. 1

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

Рис. 2

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

Рис. 3

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

Рис. 4

Рис. 5

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

ClrScr - очищает экран.

Write - вывод значений на стандартное устройство (консоль) и в файл.

WriteLn - вывод значений на стандартное устройство (консоль) и в файл + перевод каретки.

Read - считать один или несколько символов после нажатия Enter.

ReadLn - считать один или несколько символов после нажатия Enter + перевод каретки.

ReadKey - считать один символ без нажатия Enter.

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

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

POldel - метод половинного деления.

Krame - метод Крамера.

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 - График зависимости у от х

a

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,689648

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

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

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

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

4*0.2619+0.86*1.9239+0.3*0.9934 = 3

0.05*0.2619+2*1.9239+0.14*0.9934 = 4

0.07*0.2619+0.5*1.9239+-3*0.9934 = -2

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

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

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

на

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

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

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

Размещено на http://www.allbest.ru/

Рис. 11

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

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

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

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

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

ПРИЛОЖЕНИЕ

program glavn;

uses crt,POLdel,Matrica,Krame;

var e1:POLdel;

c:eiler;

e2: Matrica;

s:integral;

e3: Krame;

y:poldel;

eps:real;

i,flag:integer;

procedure Menu;

begin

clrscr;

writeln(' ЙННННННННННННННННННННННННННННННННН»');

writeln(' є MENU є');

writeln(' МННННННННННННННННННННННННННННННННН№');

writeln(' є 1 - POLdel є');

writeln(' є 2 - Matrica є');

writeln(' є 3- Krame є');

writeln('

ИНННННННННННННННННННННННННННННННННј');

end;

begin

clrscr;

flag:=1;

while(flag=1) do

begin

Menu;

writeln;

write('Wibirite punkt menu:');

readln(i);

case i of

1: begin

clrscr;

c.init;

writeln(c.poisk);

readln;

end;

2: begin

clrscr;

s.init;

writeln(s.poisk);

readln;

end;

3: begin

clrscr;

y.init;

writeln(y.poisk);

readln;

end;

readln;

end.

Unit poldel;

Interface;

Uses crt;

Type Poldel=object;

a,b,e,c,x:real;

constructor.init;

procedure shag;

function poisk:real;

end;

function funct(x:real):real;

implementation

function funct(x:real):real;

begin

funct:x*x-2*x+ln(x)

end;

constructor Poldel.init;

begin

clrscr;

a:=1,2;

b:=1,3;

writeln(`e= `);

readln(e);

c:=(a+b)/2;

end;

procedure TPoldel.shag;

begin

while abs(b-a)>e do

begin

if funct(a)*func(c)<0

then

b:=c;

else

a:=c;

c:=(a+b)/2;

end;

end;

function TPoldel.poisk:real;

begin

var y:Poldel;

e:real;

begin

y.init;

y.poisk;

readkey;

end.

program Krame;

uses crt;

type

Tmass=array[1..20] of real;

Tmatrix=array[1..20] of Tmass;

procedure Per(k,n:integer;var a:Tmatrix;var p:integer);

var z:Real;j,i:integer;

begin

z:=abs(a[k,k]);

i:=k;

p:=0;

for j:=k+1 to n do

begin

if abs(a[j,k])>z then

begin

z:=abs(a[j,k]);

i:=j;

p:=p+1;

end;

end;

if i>k then

for j:=k to n do

begin

z:=a[i,j];

a[i,j]:=a[k,j];

a[k,j]:=z;

end;

end;

function Znak(p:integer):integer;

begin

if p mod 2=0 then

Znak:=1 else Znak:=-1;

end;

procedure Opr(n:integer;a:tmatrix;var det:real);

var k,i,j,p:integer;r:real;

begin

det:=1.0;

for k:=1 to n do

begin

if a[k,k]=0 then Per(k,n,a,p);

det:=znak(p)*det*a[k,k];

for j:=k+1 to n do

begin

r:=a[j,k]/a[k,k];

for i:=k to n do

begin

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

end;

end;

end;

end;

var a:Tmatrix;

c:array[1..20] of Tmatrix;

b,x:Tmass;

det,det1:real;

n,k,j,i:integer;

begin

clrscr;

write('Порядок системы n=');

readln(n);

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

for i:=1 to n do

for j:=1 to n do

read(a[i,j]);

readln;

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

for i:=1 to n do

read(b[i]);

readln;

clrscr;

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

for i:=1 to n do

begin

for j:=1 to n do

write(a[i,j]:7:2);

write(b[i]:9:2);

writeln;

end;

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

for i:=1 to n do

begin

for k:=1 to n do

begin

for j:=1 to n do

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

c[i][k,i]:=b[k];

end;

Opr(n,c[i],det1);

if(det=0)and(det1=0) then

begin

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

readln;

exit;

end;

if(det=0)and(det1<>0) then

begin

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

readln;

exit;

end;

x[i]:=det1/det;{корень}

end;

writeln('Корни сиcтемы:');

for i:=1 to n do

writeln('x',i,'=',x[i]:7:3);

readln

end.

Const Max=50;

type

Matrix = object

public

kk,nn,mm: integer;

Summa: double;

AA,BB,CC: array [1..Max,1..Max] of Double;

procedure input;

procedure calculations;

procedure output;

end;

procedure Matrix.input;

var ii,jj:integer;

begin

write('Vvedite chislo strok 1-y matricy - A (<=50)--> '); readln(NN);

write('Vvedite chislo stolbcov 2-y matricy - A (<=50)--> '); readln(KK);

write('Vvedite chislo stolbcov 2-y matricy - B (<=50)--> '); readln(MM);

writeln('Vvedite 1-yu matricu (A):');

for ii:=1 to nn do

for jj:=1 to kk do

begin

write('Vvedite A[',ii,',',jj,'] --> ');

readln(AA[ii,jj]);

end;

writeln('Vvedite 2-yu matricu (B):');

for ii:=1 to kk do

for jj:=1 to mm do

begin

write('Vvedite B[',ii,',',jj,'] --> ');

readln(BB[ii,jj]);

end;

end;

procedure Matrix.calculations;

var ii,jj,ll:integer;

begin;

for ii:=1 to nn do

for jj:=1 to mm do

begin

Summa:= 0;

for ll:= 1 to kk do

Summa:= Summa + AA[ii,ll]*BB[ll,jj];

CC[ii,jj] := Summa;

end;

end;

procedure Matrix.output;

var ii,jj:integer;

begin

writeln('---- rezul''tat: -----');

for ii:=1 to nn do

begin

for jj:=1 to mm do

write(CC[ii,jj]:8:2);

writeln;

end;

end;

var MyMatrix:Matrix;

begin

MyMatrix.input;

MyMatrix.calculations;

MyMatrix.output;

readln;

end.

Размещено на Allbest.ru


Подобные документы

  • Основные методы структурного программирования. Методы половинного деления, Крамера, прямоугольников. Применение языка программирования Turbo Pascal 7.0. Решение системы линейных алгебраических уравнений. Описание стандартных и не стандартных функций.

    курсовая работа [376,8 K], добавлен 14.01.2015

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

    курсовая работа [149,7 K], добавлен 16.11.2008

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

    курсовая работа [251,4 K], добавлен 22.01.2015

  • Решение уравнения методом половинного деления. Программа в Matlab для уравнения (x-2)cos(x)=1. Решение нелинейных уравнений методом Ньютона. Интерполяция заданной функции. Решение системы линейных алгебраических и обыкновенных дифференциальных уравнений.

    курсовая работа [1,4 M], добавлен 15.08.2012

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

    реферат [95,0 K], добавлен 06.03.2011

  • Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.

    курсовая работа [398,1 K], добавлен 26.02.2015

  • Использование MS Excel для математических расчетов. Описание численных методов решения системы линейных алгебраических уравнений. Решение систем линейных алгебраических уравнений с методами Крамера и Зейделя и с помощью табличного процессора MS Excel.

    курсовая работа [1,6 M], добавлен 14.02.2021

  • Применение итерационных методов численного решения системы линейных алгебраических уравнений при вычислении на ЭВМ. Математические и алгоритмические основы решения задачи, метод Гаусса. Функциональные модели и блок-схемы, программная реализация решения.

    курсовая работа [527,5 K], добавлен 25.01.2010

  • Исследование систем методами случайного поиска. Изучение сущности метода половинного деления. Сравнительный анализ прямого перебора и половинного деления. Ручной счет. Шаги исследования. Описание окна работающей программы. Блок-схема и код программы.

    курсовая работа [257,5 K], добавлен 06.05.2014

  • Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.

    курсовая работа [581,0 K], добавлен 15.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.