Курсовая работа (т): Программирование алгоритмов на примере численных методов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

7. Численный пример

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

Задано алгебраическое уравнение x2-2ln(x+2)=0 с заданной точностью вычисления ε=10-4 , которые необходимо решить методом половинного деления.

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

Таблица 1. Данные для построения графика функции у=x2-2ln(x+2)=0

x

1

1,5

2

y

-1,19722

-0,25552

1,22742


Из таблицы 1, что корень уравнения лежит на отрезке от 1 до 2 , т. к. функция меняет знак на противоположный (в соответствие с методом половинного деления). График функции у= x2-2ln(x+2) представлен на рисунке 1.

Рис. 1. График функции у= x2-2ln(x+2)

Результаты решения по методу половинного деления были полученные с помощью программы Exсel и сведены в таблицу 2.

Решением функции у= x2-2ln(x+2) по методу половинного деления являются значения х=1,6007 а данным значением ε=0,0001 и значением функции f(x)= - 0,000015 отрезке [1;2].

Результаты программного решения дают следующие значения.

Таблица 2. Результаты расчета функции у= x2-2ln(x+2)по методу половинного деления.

a

b

c=(a+b)/2

f(a)

f(b)

f(c )

[a-b]

1

2

1,5

-1,19722

1,227411

-0,25553

-1

1,5

2

1,75

-0,25553

1,227411

-0,5

1,5

1,75

1,625

-0,25553

0,418988

0,064916

-0,25

1,5

1,625

1,5625

-0,25553

0,064916

-0,09952

-0,125

1,5625

1,625

1,59375

-0,09952

0,064916

-0,01835

-0,0625

1,59375

1,625

1,609375

-0,01835

0,064916

0,023019

-0,03125

1,59375

1,609375

1,601563

-0,01835

0,023019

0,002267

-0,01563

1,59375

1,601563

1,597656

-0,01835

0,002267

-0,00806

-0,00781

1,597656

1,601563

1,599609

-0,00806

0,002267

-0,0029

-0,00391

1,599609

1,601563

1,600586

-0,0029

0,002267

-0,00032

-0,00195

1,600586

1,601563

1,601074

-0,00032

0,002267

0,000974

-0,00098

1,600586

1,601074

1,60083

-0,00032

0,000974

0,000328

1,600586

1,60083

1,600708

-0,00032

0,000328

5,14E-06

-0,00024

1,600586

1,600708

1,600647

-0,00032

5,14E-06

-0,00016

-0,00012

1,600647

1,600708

1,600677

-0,00016

5,14E-06

-7,6E-05

-6,1E-05

1,600677

1,600708

1,600693

-7,6E-05

5,14E-06

-3,5E-05

-3,1E-05

1,600693

1,600708

1,6007

-3,5E-05

5,14E-06

-1,5E-05

-1,5E-05



Таким образом, результаты расчета функции у= x2-2ln(x+2) по методу половинного деления полученные с помощью программы Exсel дают более точный результат.

Необходимо решить систему уравнений методом Крамера.


Для этого считает основной определитель матрицы:


Аналогично считаются определители матриц, которые получаются из А заменой 1-ого, 2-ого, …, n-ого столбца соответственно на столбец свободных членов. После этого решение системы линейных алгебраических уравнений методом Крамера осуществляется по следующим формулам .

..

Определитель матрицы, полученный заменой столбца х на столбец свободных членов, считается по формуле:


Определитель матрицы, полученный заменой столбца у на столбец свободных членов, считается по формуле:


Определитель матрицы, полученный заменой столбца z на столбец свободных членов, считается по формуле:


Находим значения х, у и z по формулам:


Проверка результатов расчета осуществляются подстановкой данных в систему уравнений:


Что дает абсолютно точный результат.

Результаты программного решения показывают также абсолютно точный результат.


Необходимо вычислить определенный интеграл  на отрезке [1,2] методом прямоугольников c заданным количеством шагов n=20 и точностью ε =10-4.

Для этого находим шаг изменения аргумента .

Отсюда x=n+(i+0,5)*h и считается для всех шагов n=20

X1=1+(1+0,5)*0,05=1,075

X2=1+(2+0,5)*0,05=1,125

X3=1+(3+0,5)*0,05=1,175

X4=1+(4+0,5)*0,05=1,225

X5=1+(5+0,5)*0,05=1,275

X6=1+(6+0,5)*0,05=1,325

X7=1+(7+0,5)*0,05=1,375

X8=1+(8+0,5)*0,05=1,425

X9=1+(9+0,5)*0,05=1,475

X11=1+(11+0,5)*0,05=1,575

X12=1+(12+0,5)*0,05=1,625

X13=1+(13+0,5)*0,05=1,675

X14=1+(14+0,5)*0,05=1,725

X15=1+(15+0,5)*0,05=1,775

X16=1+(16+0,5)*0,05=1,825

X17=1+(17+0,5)*0,05=1,875

X18=1+(18+0,5)*0,05=1,925

X19=1+(19+0,5)*0,05=1,975

X20=1+(20+0,5)*0,05=2,025

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

Таблица 3. Результаты расчетов по методу прямоугольников

n

h

f(x)

S

1

1,075

-1,09098

-1,17281

2

1,125

-1,01324

-1,1399

3

1,175

-0,92999

-1,09274

4

1,225

-0,84124

-1,03052

5

1,275

-0,74701

-0,95244

6

1,325

-0,64731

-0,85769

7

1,375

-0,54217

-0,74548

8

1,425

-0,43158

-0,615

9

1,475

-0,31556

-0,46546

10

1,525

-0,19414

-0,29606

11

1,575

-0,06731

-0,10601

12

1,625

0,064916

0,105489

13

1,675

0,202519

0,339219

14

1,725

0,595972

15

1,775

0,493824

0,876538

16

1,825

0,647508

1,181702

17

1,875

0,806534

1,512251

18

1,925

0,970892

1,868968

19

1,975

1,140576

2,252637

20

2,025

1,315575

2,66404



-1,38629

0


Значения функции f(x) определяются по формуле f(x)= x*x-2ln(x+2) отсюда:

(x1)= 1,075*1,075-2ln(1,075+2)= -1,17281(x2)= 1,125*1,125-2ln(1,125+2)= -1,1399(x3)= 1,175*1,175-2ln(1,175+2)= -1,09274(x4)= 1,225*1,225-2ln(1,225+2)= -1,03052(x5)= 1,275*1,275-2ln(1,275+2)= -0,95244(x6)= 1,325*1,325-2ln(1,325+2)= -0,85769(x7)= 1,375*1,375-2ln(1,375+2)= -0,74548(x8)= 1,425*1,425-2ln(1,425+2)= -0,615(x9)= 1,475*1,475-2ln(1,475+2)= -0,46546(x10)= 1,525*1,525-2ln(1,525+2)= -0,29606(x11)= 1,575*1,575-2ln(1,575+2)= -0,10601(x12)= 1,625*1,625-2ln(1,625+2)= 0,105489(x13)= 1,675*1,675-2ln(1,675+2)= 0,339219(x14)= 1,725*1,725-2ln(1,725+2)= 0,595972(x15)= 1,775*1,775-2ln(1,775+2)= 0,876538(x16)= 1,825*1,825-2ln(1,825+2)= 1,181702(x17)= 1,875*1,875-2ln(1,875+2)= 1,512251(x18)= 1,925*1,925-2ln(1,925+2)= 1,868968(x19)= 1,975*1,975-2ln(1,975+2)= 2,252637

f(x20)= 2,025*2,025-2ln(2,025+2)= 2,66404

Находим суммарное значение полученных функций:

-1,09098-1,01324-0,92999-0,84124-0,74701-0,64731-0,54217-0,43158-0,31556-0,19414-0,06731+0,064916+0,202519+0,345491+0,493824+0,647508+

,806534+0,970892+1,315575+1,140576=-1,38629

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

А также по формуле S=h*f(x) определяем значение интегралов на каждом из отрезков:

S1=0,05*(-1,09098)= -0,0461=0,05*(-1,01324)= -0,04333=0,05*(-0,92999)= -0,04041=0,05*(-0,84124)= -0,03732=0,05*(-0,74701)= -0,03407=0,05*(-0,64731)= -0,03065=0,05*(-0,54217)= -0,02705=0,05*(-0,43158)= -0,02326=0,05*(-0,31556)= -0,01929=0,05*(-0,19414)= -0,01512=0,05*(-0,06731)=-0,01076=0,05*(0,064916)= -0,00619=0,05*(0,202519)= -0,00143=0,05*(0,345491)= 0,003543=0,05*(0,493824)= 0,008721=0,05*(0,647508)= 0,01411=0,05*(0,806534)= 0,019712=0,05*(0,970892)= 0,025528=0,05*(1,315575)= 0,03156=0,05*(1,140576)= 0,03781

Суммарное значение интегралов равно:  -1,17281-1,1399-1,09274-1,03052-0,95244-0,85769-0,74548-0,615-0,46546-0,29606-0,106010,1054890,3392190,5959720,8765381,1817021,5122511,868968

,2526372,66404=0

Погрешность метода находим по формуле .

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

.

0,05*(-3,87969)=-0,1938

=

Правая часть формулы прямоугольников является интегральной суммой и при h0 стремится к данному интегралу. Однако при фиксированном h отличается от соответствующего интеграла на величину Rn(f). По заданной абсолютной погрешности ε подбирается параметр n, при котором выполняется равенство < ε.

0<0,0001, что соответствует условию задачи.

Рис. 2. График функции построенной по методу прямоугольников

функции вида. дает следующий результат: определенный интеграл равен 0,99959.Rn(f)<E, где Rn(f)=  Sn(f)= n x*f(xk)


ЗАКЛЮЧЕНИЕ

структурный программирование функция уравнение

В заключение хотелось бы отметить, что применение языка программирования Turbo Pascal 7.0 значительно упрощает работу по вычислению значений функций, нахождения корней уравнений и вычисления программы. Достаточно усовершенствовать отдельный модуль откомпилировать его и появляется возможность решать различные варианты задач с использованием данных методов. Более того, текст главной программы более читаем, и занимает меньше места. Имеющиеся наработки в отдельных модулях можно использовать в других программах. Четко выраженная структура программы позволяет более ясно представить цели и задачи стоящие перед программистом.

Список используемЫХ ИСТОЧНИКОВ

1.       Информатика: учебник для вузов / А.Н. Гуда [и др.]; под ред. В.И. Колесникова. - М.: Дашков и К, 2008. - 400 с.

2.       Чекмарев, Ю.В. Вычислительные системы, сети и телекоммуникации [Электронный ресурс]/ Ю.В. Чекмарев.- «ДМК Пресс», 2010. - Загл. с экрана.- Режим доступа: http://e.lanbook.com/books/element.php?pl1_cid=258&pl1_id=1108.

.        Шаньгин, В.Ф. Защита компьютерной информации [Электронный ресурс]/ В.Ф. Шаньгин.- «ДМК Пресс», 2010. - Загл. с экрана.- Режим доступа: http://e.lanbook.com/books/element.php?pl1_cid=258&pl1_id=1146 .

4.       Артемова, С.В. Информатика. Методические указания по выполнению лабораторных работ/ С.В. Артемова, Т.И. Чернышова, Н.Г. Чернышов. - Тамбов, Тамб. гос. техн. ун-т, 2006. - 54 с.

5.       Галявов, И.Р. Borland C++ для себя [Электронный ресурс]/ И.Р.. Галявов. - «ДМК Пресс», 2009. - Загл. с экрана.- Режим доступа: http://e.lanbook.com/books/element.php?pl1_cid=258&pl1_id=1230.

6.       Алексеев, Е.Р FreePascal и Lazarus: Учебник по программированию [Электронный ресурс]/ О.В. Чеснокова, Т.В.Кучер.- «ДМК Пресс», 2010. - Загл. с экрана.- Режим доступа: http: //e.lanbook.com/books/element.php?pl1_cid =258&pl1_id =1267.

7.       Буч, Г. Язык UML руководство пользователя [Электронный ресурс]/ Г.Буч, Д. Рамбо, И. Якобсон. - «ДМК Пресс», 2008. - Загл. с экрана.- Режим доступа: http: //e.lanbook.com/books/element.php?pl1_cid =258&pl1_id =1246.

8.       OpenOffice.org для профессионала [Электронный ресурс].- «ДМК Пресс», 2009. - Загл. с экрана.- Режим доступа: http: //e.lanbook.com/books/ element.php?pl1_cid =258&pl1_id =1223.

.        Дьяконов, В.П. MATHLAB 9.5 /10/11 в математике, физике и образовании [Электронный ресурс]/ В.П.Дьяконов. -«ДМК Пресс»,- 2010. - Загл. с экрана.- Режим доступа: http: //e.lanbook.com/books/ element.php?pl1_cid =258&pl1_id =1181.

10.     http//crems.jesby.tstu.ru.88

11.     www.kib.ru/info/course

12.     http://study.utmn.ru/~izaharova

ПРИЛОЖЕНИЕ

program glav; {присвоение имени программы}

uses crt, modul1, modul2, modul3; {объявление модулей} {объявление переменных}

w:integer; { объявление переменной: w тип целые}

begin {начало тела программ

repeat {начало цикла «repeat - until»}('1-polovin del, 2-kramer, 3 - integral'); {вывод сообщения в ‘ ‘ на экран}(w); {ввод значения переменной w}

if w=1 then polovin; {расчет методом половинного деления}

if w=2 then kramer; {расчет методом Крамера}

if w=3 then pr; {расчет по формуле прямоугольников}

until (w=1) or (w=2) or (w=3);; {задержка экрана}

end. {окончание программы}

unit modul1; {объявление модуля 1}crt;polovin; {определение процедуры polovin }{раздел реализации процедуры} { объявление переменных типа действительные числа}

a,b,e,x,c:real;f(x:real): real; { объявление функции f } { начало тела функции}

f:= x*x-2ln(x+2) {вычисление значения функции}

end;

procedure polovin; { конец тела функции} {начало тела процедуры}

clrscr;

write('a= '); {ввод начального значения}

readln(a);

write('b= '); {ввод конечного значения}

readln(b);

write('e= '); {ввод погрешности вычисления}

readln(e);

c:=(a+b)/2; {расчет начального значения аргумента}

while abs(b-a)>e do { начало цикла «while», проверка условия}

begin

if f(a)*f(c)<0 then b:=c { проверка условия «f(a)*f(c)<0» и присвоение}

else a:=c; {значения a или b }

c:=(a+b)/2; { конец цикла «while»}:=(a+b)/2;

writeln('x= ',x:4:2); {Вывод значения x}

writeln('f(x)= ',f(x):4:4); {Вывод значения f(x)}

readln;

end; {окончание процедуры polovin}

end.modul2; {объявление модуля} crt;n=3; {определение постоянной n=3 }

type matr=array[1..3,1..5] of real; {определение типа matr}kramer; {определение процедуры kramer }kramer; {раздел реализации процедуры}

var { объявление переменных типа действительные числа}

a:matr;,j,m,k:integer;,s2,d,opred,det: real;,x,v,popr:array[1..n] of real;op(a:matr):real; {определение функции op }

var { объявление переменных функции op },j,m: integer;{начало тела функции op}

for i:=1 to 3 doj:=1 to 2 do begin[i,j+n]:=a[i,j];('a[',i,',',j+n,']= ',a[i,j+n]:4:2); {добавление к матрице 2 и 3 столбца };:=0;m:=0 to 2 do begin

d:=1;i:=1 to n do:=d*a[i,i+m]; {нахождение произведения элементов главных диагоналей}:=s1+d; {сумма произведений элементов главных диагоналей}

end;:=0;m:=6 downto 4 do:=1;i:=1 to n do

d:=d*a[i,m-i]; {нахождение произведения элементов побочных диагоналей}:=s2+d; {сумма произведений элементов побочных диагоналей};:=s1-s2; {расчёт определителя матрицы}; { конец тела функции}{начало тела процедуры}

for i:=1 to n doj:=1 to n do

write('vvedite a[',i:2,',',j:2,']= '); {ввод значений элементов матрицы А}

readln(a[i,j]);;

write('vvedite b[',i:2,']= '); {ввод значений элементов матрицы В}(b[i]);;:=op(a); {вызов функции op для расчёта главного определителя матрицы}

writeln('det= ', det:4:2);i:=1 to n do beginj:=1 to n do begin

v[j]:=a[j,i]; {присвоение временной переменной значений столбца}[j,i]:=b[j]; {присвоение значению столбца значений матрицы- столбца В};[i]:=op(a); {вызов функции op для расчёта побочных определителей }

writeln('popr',i:1,'=',popr[i]:4:2);j:=1 to n do[j,i]:=v[j]; {возврат значений i-го столбца};;i:=1 to n do

begin[i]:=popr[i]/det; {расчёт неизвестных переменных}('x',i:1,'=',x[i]:4:2); {вывод неизвестных переменных}

end;;.modul3; {объявление модуля 3}crt;pr;{раздел реализации процедуры}pr; {определение процедуры pr }

var { объявление переменных типа действительные числа},b,n,i:integer; {и действительные числа}

s,p,h,x:real;{начало тела функции};

writeln('vvedite a'); {ввод начального значения отрезка}(a);('vvedite b'); {ввод конечного значения отрезка}(b);('vvedite n'); {ввод количества отрезков}(n);:=(b-a)/n; {вычисление шага}:=0;i:=1 to n-1 do {суммируем значения функции на x1...xn}x:=a+(i+0.5)*h; {вычисляем значение х на данном шаге}:= s+(x*x-2ln(x+2)) {значение функции от данного х};:=s*h; {находим значение функции методом прямоугольник}

writeln(s:4:4);;;.

Источник: https://www.bibliofond.ru/detail.aspx?id=787323