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
=
Правая часть формулы прямоугольников
является интегральной суммой и при h
0 стремится
к данному интегралу. Однако при фиксированном 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);;;.