Объектно-ориентированное программирование на примере численных методов
Метод половинного деления при приближенном вычислении алгебраических и трансцендентных выражений. Решение системы уравнений методом Крамера. Блок-схема программы 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