- •1.Теоретичні відомості.
- •1.1.Чисельні методи. Застосування. Основні принципи побудови.
- •1.2. Чисельне розв’язання трансцендентних рівнянь. Опис методів дихотомії (половинного ділення), хорд, дотичних, комбінованого методу хорд та дотичних
- •Алгоритм методу
- •Метод хорд.
- •1.3. Чисельне інтегрування. Методи лівих, правих та середніх прямокутників. Методи трапецій та парабол.
- •1.4. Використання системи Math Cad для розв’язання технічних завдань. Основні особливості та методи роботи із системою.
- •Математичні вирази.
- •Типи даних.
- •1.5. Використання табличного процесору Excel для розв’язання технічних завдань. Основні особливості та методи роботи із системою.
- •1.6. Використання алгоритмічної мови Pascal для розв’язання технічних завдань. Основні особливості та методи роботи із оболонкою Turbo-Pascal
- •Типи даних в Паскалі
- •2. Постановка задачі, із індивідуальним завданням.
- •Завдання на практичну частину із використанням системи Math Cad.
- •2.2. Завдання на розрахункову частину із використанням системи Excel.
- •2.2. Завдання на розрахункову частину із використанням системи Excel.
- •Завдання на алгоритмічну частину із використанням мови Pascal.
- •6.Порівняння ефективності чисельних методів, згідно індивідуального завдання.
- •7.Оцінка збіжності результатів розрахунків за допомогою табличного процесору Excel із результатами, які були отримані за допомогою систем Math Cad та програм згідно індивідуального завдання.
- •8.Висновки.
2.2. Завдання на розрахункову частину із використанням системи Excel.
№ 1. Використовуючи придбані навички роботи із системою Excel навчитись досліджувати графічні моделі різних форматів. Визначити довільну функцію. Створити таблицю табулювання функції, побудувати графік функції та дослідити поведінку цієї функції на певних відрізках.
№ 2. Для трансцендентних рівнянь які вказані у таблиці №3 визначити корені рівняння методом половинного ділення з похибкою е=10-5. Відокремлення коренів проводити аналітичним та графічним методами (можна використовувати систему MathCad). Якщо функція має обмежену кількість коренів – знайти всі корені, інакше, якщо функція періодична – знайти не менше трьох коренів, але відповідно практичної частини роботи.
В ході роботи необхідно:
Створити табличку де розрахунок всіх результатів крім початкових (тобто граничних значень проміжку) виконується за допомогою функцій та формул. Зразок таблиці яку необхідно побудувати надано у лекції.
Створити таблицю табулювання функції на окремому листі Excel.
Побудувати графік основної функції на окремому листі Excel.
№ 3. Проінтегрувати функцію згідно варіанту з таблиці №4 методом середніх прямокутників та трапецій. Кількість ділянок заданого відрізку взяти 80. Побудувати графік функції в заданих границях .
В ході роботи необхідно:
створити табличку де розрахунок всіх результатів крім початкових (тобто граничних значень проміжку та кількість поділянь) виконується за допомогою функцій та формул. Зразок таблиці яку необхідно побудувати надано у лекції.
обчислити значення інтегралу;
побудувати графік підінтегральної функції.
Таблиця 3
-
Варiант
Рiвняння
10
x2-ln(1+x2)-9.75=0
Таблиця 4
-
№
Вар
F(x)
[a;b]
10
X/(2+cosx)1/2
0;1,1
Завдання на алгоритмічну частину із використанням мови Pascal.
№1. Використовуючи придбані навички роботи із системою Excel навчитись досліджувати графічні моделі різних форматів. Визначити довільну функцію. Створити таблицю табулювання функції, побудувати графік функції та дослідити поведінку цієї функції на певних відрізках.
№2. Створити блок-схему і програму на мові Pascal та визначити корені трансцендентного рівняння (індивідуальний варіант таблиця №3) методом половинного ділення із точністю 0.00001.
№3. Створити блок-схему і програму на мові Pascal та знайти визначений інтеграл заданої функції (індивідуальний варіант таблиця №4) методами середніх прямокутників та трапецій при кількості поділянь яку визначає користувач.
Таблиця 3.
-
Варiант
Рiвняння
10
x2-ln(1+x2)-9.75=0
Таблиця 4.
-
№
Вар
F(x)
[a;b]
10
X/(2+cosx)1/2
0;1,1
3. Результати розрахунків за допомогою системи Math Cad.
Головна функція, її розбиття та графік.
Графіки функцій k(x) та g(x), точки перетину та результати функції root().
Обчислення інтегралу, графік функції та площа інтегралу.
4.Розрахункова частина за допомогою табличного процесору Excel.
4.1. Відокремлення коренів графічним методом.
Уточнення коренів методом половинного ділення із точністю 0.00001.
4.3. Чисельне інтегрування.
4.3.1.Розрахунок за методом середніх прямокутників.
4.2.2.Розрахунок за методом трапецій.
5.Результати алгоритмічної частини.
Лістинг програми 1.
uses crt;
var h,s,a,x,b,e,suma:real;
i,n:integer;
function fun(var x:real):real;
begin
fun:=x/exp(1/2*ln(2+cos(pi*2)));
end;
begin
clrscr;
a:=0;
b:=1.1;
write('n=');
readln(n);
e:=0.0000001;
suma:=0;
repeat
s:=suma;
suma:=0;
h:=(b-a)/n;
x:=a+h/2;
for i:=1 to n do
begin
suma:=suma+h*fun(x);
x:=x+h;
end;
writeln('suma=',suma:14:12, ' n=', n:2, ' pogreshnost=', abs(s-suma):14:12 );
n:=n*2;
until e>=abs(s-suma);
writeln('suma=',suma:14:12, ' pogreshnost=', abs(s-suma):14:12, '<', e:10:7);
readkey;
end.
Результат виконання.
Лістинг програми 2.
uses crt;
var h,s,sk,a,x,b,e:real;
i,n:longint;
begin
clrscr;
a:=0;
b:=1.1;
write('vvedit n=');
readln(n);
e:=0.0000001;
sk:=0;
repeat
s:=sk;
sk:=0;
h:=(b-a)/n;
x:=a;
for i:=1 to n do
begin
sk:=sk+(ln(1+h)/ln(1+h))*h/2;
x:=x+h;
end;
writeln('suma=',sk:16:12, ' n=', n:2, ' pogreshnost=', abs(s-sk):14:12 );
n:=n*2;
until e>=abs(s-sk);
writeln('s=',sk:16:12, ' pogreshnost=', abs(s-sk):14:12, '<', e:14:12 );
readkey;
end.
Результат виконання.
Лістинг програми 3.
PROGRAM kyr;
USES
CRT, Graph,VGL_Small;
TYPE
BaseType = real;
Point = Record
x, y: BaseType
end;
Index = 1..65520 div SizeOf (Point);
PArrayPoint = ^ArrayPoint;
ArrayPoint = array [Index] of Point;
Clip = record
Xmin:Integer;
Ymin:Integer;
Xmax:Integer;
Ymax:integer;
end;
VAR
nxmin, nxmax, nymin, nymax,a: Integer;
ymin, ymax,xmin,xmax, pixx, pixy, tmin, tmax: real;
ArrP,ArrTemp: PArrayPoint;
ColPoint: Integer;
gd,gm:integer;
P:Clip;
FUNCTION F1 (x: real): real;
Begin
F1 := x*cos(x);
End;
FUNCTION F2 (t: real): real;
Begin
F2 := 2*arctan(t);
End;
FUNCTION F3 (t: real): real;
Begin
F3 := 2*a*sqr(sin(t));
End;
Function Gx(x:real):real;
begin
Gx:=x+(nxmax-nxmin) div 2+nxmin;
end;
Function Gy(y:real):real;
Var Xasp,Yasp:word;
begin
GetAspectRatio(Xasp, Yasp);
Gy:=(nymax-nymin) div 2 -(Xasp/Yasp)*y + nymin;
end;
Procedure LineClip(x1,y1,x2,y2:Integer);
Const
CodeBottom = 1;
CodeTop = 2;
CodeLeft = 4;
CodeRight = 8;
PROCEDURE Razm (var m, n, cp: Integer; pix: real);
Begin
m := 1;
n := 0;
If Round (m * Exp(n*Ln(10)) / pix) < 30 then
While Round (m * Exp(n*Ln(10)) / pix) < 30 do
begin
Case m of
1: m := 2;
2: m := 5;
5: begin
m := 1;
Inc (n)
end
end
end
Else
begin
While Round (m * Exp(n*Ln(10)) / pix) > 30 do
begin
Case m of
1: begin
m := 5;
Dec (n)
end;
2: m := 1;
5: m := 2;
end
end;
Case m of
1: m := 2;
2: m := 5;
5: begin
m := 1;
Inc (n)
end
end
end;
cp := Round (m * Exp(n*Ln(10)) / pix)
End;
PROCEDURE Out_CoordAxle;
Var
x, y, m, n, cp, ost, y1, x1, ch, i: Integer;
mn: real;
f: Boolean;
Begin
SetColor (GREEN);
f := true;
if ymin >= 0 then y := nymax
else
if ymax <= 0 then
begin
y := nymin;
f := false;
end
else y := nymax + Round (ymin/pixy);
Line (nxmin, y, nxmax, y);
Line (nxmax, y, nxmax-10, y+3);
Line (nxmax, y, nxmax-10, y-3);
if xmin >= 0 then x := nxmin
else if xmax <= 0 then x := nxmax
else x := nxmin - Round (xmin/pixx);
Line (x, nymin, x, nymax);
if f
then
begin
Line (x, nymin, x-3, nymin+10);
Line (x, nymin, x+3, nymin+10);
end;
Razm (m, n, cp, pixx);
ost := abs (nxmin - x) mod cp;
ch := m * ((nxmin - x) div cp);
SetTextJustify (centertext, toptext);
if (nxmin - x) > 0 then
begin
ost := cp - ost;
Inc (ch, m)
end;
x1 := ost + nxmin;
While x1 <= nxmax - 10 do
begin
Line (x1, y-3, x1, y+3);
if ch <> 0 then OutTextXY (x1, y+10, MakeStr (ch))
else OutTextXY (x1 - 5, y+10, MakeStr (ch));
Inc (x1, cp);
Inc (ch, m)
end;
if xmin > 0 then
begin
mn := 1;
for i := 1 to Abs (n) do
begin
if n < 0 then mn := mn * 10
else mn := mn / 10
end;
OutTextXY (nxmax-20, y+20, '(x+'+MakeStrR(xmin*mn, 2, 0)+')*10^'+MakeStr(n))
end
else OutTextXY (nxmax, y+20, 'x*10^'+MakeStr(n));
Razm (m, n, cp, pixy);
ost := abs (-nymax + y) mod cp;
ch := m * ((-nymax + y) div cp);
if (-nymax + y) > 0 then
begin
ost := cp - ost;
Inc (ch, m)
end;
y1 := nymax - ost;
While y1 >= nymin+10 do
begin
Line (x-3, y1, x+3, y1);
if ch <> 0 then OutTextXY (x-17, y1-3, MakeStr (ch));
Dec (y1, cp);
Inc (ch, m);
end;
if ymin > 0 then OutTextXY (x, nymin-10, '(y+'+MakeStr(round(xmin))+')*10^'+MakeStr(n))
else OutTextXY (x, nymin-10, 'y*10^'+MakeStr(n));
SetColor (White)
End;
var ch,ch1:char;
k,h,d,t1,t2:real;
i,j:integer;
BEGIN
ch:=#0;
gd:=detect;
{ gm:=VgaHi;}
initGraph(gd,gm,'c:\bp\bgi');
SetColor(Yellow);
InitVgl;
repeat
ClearDevice;
nxmin := 50;
nxmax := 590;
nymin := 50;
nymax := 430;
SetTextJustify (LeftText, TopText);
SetColor(Yellow);
OutTextXY(0,0,'1 : Function given Obviously');
OutTextXY(0,20,'2 : Function given in parameter');
OutTextXY(0,40,'3 : Transformation of the diagrams');
OutTextXY(0,60,'Esc : Exit');
Ch:=readkey;
case ch of
'1': begin
ClearDevice;
SetColor(Yellow);
Rectangle(nxmin-40, nymin-40, nxmax+40, nymax+40);
xmin := -pi;
xmax := 2*pi;
MinMax1;
SetColor (Red);
Out_Wind;
Out_CoordAxle;
FreeMem (ArrP, Round ((nxmax-nxmin)) * Sizeof (Point));
OutTextXY(320,460,'Press any key');
ch:=readkey;
ClearDevice;
ch:=#0;
end;
'2': begin
ClearDevice;
SetColor(Yellow);
Rectangle(nxmin-40, nymin-40, nxmax+40, nymax+40);
tmin := 0.01;
tmax := 10;
a:=1;
MinMax2;
SetColor (Red);
Out_Wind;
Out_CoordAxle;
FreeMem (ArrP, Round((nxmax-nxmin)) * Sizeof (Point));
OutTextXY(320,460,'Press any key');
ch:=readkey;
ClearDevice;
ch:=#0;
end;
'3': begin
repeat
nxmin := 50;
nxmax := 450;
nymin := 50;
nymax := 430;
P.xmin := 50;
P.xmax := 450;
P.ymin := 50;
P.ymax := 430;
ClearDevice;
Rectangle(nxmin-40, nymin-40, nxmax+40, nymax+40);
xmin := -10;
xmax := 10;
MinMax1;
SetColor (Red);
Out_Wind;
Out_CoordAxle;
SetTextJustify (LeftText, TopText);
SetColor(Yellow);
OutTextXY(500,0,'1 : y=kx(x+h)+d');
OutTextXY(500,20,'2 : y=F(|x|)');
OutTextXY(500,40,'3 : y=|F(x)|');
OutTextXY(500,60,'4 : y=|F(|x|)|');
ch1:=readkey;
case ch1 of
'1':begin
OutTextXy(500,100,'k=');
GotoXY(66,7);Read(k);
SetFillStyle(0,0);
Bar(500,90,600,110);
OutTextXy(500,100,'h=');
GotoXY(66,7);Read(h);
Bar(500,90,600,110);
OutTextXy(500,100,'d=');
GotoXY(66,7);Read(d);
Bar(500,90,600,110);
vgl_pushmatrix;
vgl_scale(1,k);
vgl_translated(d,h);
for i:=1 to (nxmax - nxmin) do
begin
arrp^[i].x:=XG(arrp^[i].x);arrp^[i].y:=YG(arrp^[i].y);
Vgl_GetPoint(arrp^[i].x ,arrp^[i].y);
arrp^[i].x:=GX(arrp^[i].x);arrp^[i].y:=GY(arrp^[i].y);
end;
vgl_popmatrix;
setcolor(green);
Out_Wind1;
ch1:=readkey;
end;
'2':begin
vgl_pushmatrix;
vgl_reflectionY;
j:=0;
for i:=(nxmax-nxmin) downto (nxmax-nxmin) div 2 do
begin
t1:=XG(arrp^[i].x);t2:=YG(arrp^[i].y);
vgl_getPoint(t1,t2);
t1:=Gx(t1);t2:=Gy(t2);
arrp^[j+1].x:=t1;
arrp^[j+1].y:=t2;
j:=j+1;
end;
vgl_popmatrix;
setcolor(green);
Out_Wind;
ch1:=readkey;
end;
'3':begin
vgl_pushmatrix;
vgl_reflectionX;
for i:=1 to (nxmax - nxmin) do
begin
arrp^[i].x:=XG(arrp^[i].x);arrp^[i].y:=YG(arrp^[i].y);
if arrp^[i].y<0 then VGL_GetPoint(arrp^[i].x,arrp^[i].y);
arrp^[i].x:=GX(arrp^[i].x);arrp^[i].y:=GY(arrp^[i].y);
end;
vgl_popmatrix;
setcolor(green);
Out_Wind;
ch1:=readkey;
end;
'4':begin
vgl_pushmatrix;
vgl_reflectionY;
j:=0;
for i:=(nxmax-nxmin) downto (nxmax-nxmin) div 2 do
begin
t1:=XG(arrp^[i].x);t2:=YG(arrp^[i].y);
vgl_getPoint(t1,t2);
t1:=Gx(t1);t2:=Gy(t2);
arrp^[j+1].x:=t1;
arrp^[j+1].y:=t2;
j:=j+1;
end;
vgl_popmatrix;
vgl_pushmatrix;
vgl_reflectionX;
for i:=1 to (nxmax - nxmin) do
begin
arrp^[i].x:=XG(arrp^[i].x);arrp^[i].y:=YG(arrp^[i].y);
if arrp^[i].y<0 then VGL_GetPoint(arrp^[i].x,arrp^[i].y);
arrp^[i].x:=GX(arrp^[i].x);arrp^[i].y:=GY(arrp^[i].y);
end;
vgl_popmatrix;
setcolor(green);
Out_Wind;
ch1:=readkey;
end;
end;
FreeMem (ArrP, Round ((nxmax-nxmin)) * Sizeof (Point));
until ch1=#27;
end;
end;
Until ch=#27;
CloseGraph;
END.
Результат виконання.