Практична робота 16 «Алгоритми табуляції властивостей поліномів на мові
Pascal»
Завдання 1. Скласти і
реалізувати алгоритм для знаходження табулювання значень квадратичної функції, що
задана рекурсивною формулою у=(а1х+а2)х+а3=
а1х2+а2х+а3.
program Quadratfunction; {назва
алгоритму табуляції}
var a1, a2, a3, x, y, d, x1, x2,y1:
real; i, k: integer; {оголошення змінних: дійсні числа та цілі числа}
begin {початок виконання алгоритму і введення випадкових коефіцієнтів квадратичної функції}
a1:=-(1+random(3))
*(-2+random(1)) *(-random(2)) +
1+random(3) ;
writeln( ' Якщо cтарший коефіцієнт квадратичної функції a1=', a1); writeln;
a2:=2+random(7) *(-1+random(3));
writeln(' Якщо
лінійний коефіцієнт квадратичної функції a2=', a2); writeln;
a3:= (4+random(10))*(-1)*(-1+random(3));
writeln(' Якщо вільний
коефіцієнт квадратичної функції: y(0)=a3=', a3); writeln;
writeln(' Якщо cума коефіцієнтів квадратичної функції: y(1)=a1+a2+a3=', a1+a2+a3); writeln;
x:=-(1+random(20)); writeln(' Якщо
початковий аргумент квадратичної функції x=', x); writeln;
d:=1+random(3); writeln( ' Якщо
величина кроку табуляції квадратичної
функції d=', d); writeln;
k:=5+random(8); writeln( ' Якщо
кількість кроків табуляції k=', k); writeln;
for i:=1 to k do begin {виконання
циклу з лічильником по kрокам для
обчислення значень функції}
x:=x+(i-1)*d; y:=(a1*x+a2)*x+a3; { виведення результатів табулювання на екран монітора}
writeln( ' номер кроку
табуляції i=', i, ' аргумент функції х=', x, ' значення
функції y=', y); writeln; end; writeln('********'); writeln( ' квадратична функція має вигляд
у=', a1, '*x*x+(
' , a2, ' )x+(
', a3, ' )' );
d:=a2*a2-4*a1*a3;
if (d>0) or
(d=0) then {обчислення дискримінанта
перевірка його знаку для квадратичної функції}
begin x:=0.5*(-a2-sqrt(d))/a1; y:=abs((a1*x+a2)*x+a3); x1:=x;
{обчислення
першого нуля квадратичної
функції}
writeln( ' перший наближений нуль квадратичної функції х1=', x, 'з абсолютною похибкою ',y); writeln;
x:=0.5*(-a2+sqrt(d))/a1;
y:=abs((a1*x+a2)*x+a3); x2:=x;{ {обчислення
другого нуля
квадратичної функції}
writeln( ' другий наближений
нуль квадратичної функції х2=', x, 'з абсолютною похибкою ',y); writeln; end
else writeln( ' немає нулів квадратична функція');
x:=0.5*(-a2)/a1; y:=(a1*x+a2)*x+a3; y1:=y;
{обчислення координат вершини
параболи }
if (a1>0) then {оголошення мінімуму
квадратичної функції як координат вершини параболи}
writeln( 'гілки
параболи напрямлені вгору, мінімум
квадратичної функції якщо Хmin=', x, ' та Уmin= ',y)
else {оголошення максимуму
квадратичної функції як координат вершини параболи}
writeln( 'гілки параболи напрямлені вниз, максимум квадратичної функції якщо Хmах=',x, ' та Уmах= ',y); writeln;
writeln( 'вісь симетрії графіка параболи це вертикальна пряма лінія: Хвісь=', -0.5*a2/a1); writeln;
if (a1>0) then writeln(' функція зростає, якщо Х>', -0.5*a2/a1); writeln;
if (a1>0) then writeln(' функція спадає, якщо Х<', -0.5*a2/a1); writeln;
if (a1>0) and (d>0) then writeln(' функція додатна, якщо Х<', x1, ' та Х>', x2); writeln;
if (a1>0) and (d>0) then writeln(' функція відємна, якщо ХЄ(', x1, ' ;', x2, ') ' ); writeln;
if (a1<0) and (d>0) then writeln(' функція відємна, якщо Х<', x1, ' та Х>', x2); writeln;
if (a1<0) and (d>0) then writeln(' функція додатна, якщо ХЄ(', x1, ' ;', x2, ') ' ); writeln;
if (a1<0) then writeln(' функція зростає, якщо Х<', -0.5*a2/a1); writeln;
if (a1<0) then writeln(' функція спадає, якщо Х>', -0.5*a2/a1); writeln;
if (a2=0) then writeln( 'Квадратична функція у=',
a1, '*x*x+(
' , a2, ' )x+(
', a3, ' ) парна.') else
writeln( 'Квадратична функція у=',
a1, '*x*x+(
' , a2, ' )x+(
', a3, ' ) ні парна, ні
непарна.'); writeln;
writeln( 'Обернена функція до першої гілки параболи квадратичної
функції: у1=+((x-(', y1, '))/ (', a1, '))^0.5 +(', -0.5*a2/a1, ')'); writeln;
writeln( 'Обернена функція до другої гілки параболи квадратичної
функції: у2=-((x-(', y1, '))/( ', a1, '))^0.5 +(', -0.5*a2/a1, ')'); writeln;
writeln( ' Немає
перегинів випуклих ділянок квадратична функція');
end.
{закінчення
алгоритму}
Протестуйте алгоритм чотири рази та
порівняйте результати табуляції і виберіть той варіант, при якому можна знайти
найточніше наближення нулів
квадратичної функції, тобто випадок y:=(a1*x+a2)*x+a3=0.
Завдання 2. Скласти і
реалізувати алгоритм для знаходження табулювання значень кубічної функції, що
задана рекурсивною формулою у=((а1х+а2)х+а3)х+a4.
program Cubesfunction; {назва
алгоритму табуляції}
var a1, a2, a3, a4, x, y, d: real; i, k: integer; {оголошення змінних величин: дійсні числа та цілі числа}
begin { початок виконання алгоритму і введення випадкових коефіцієнтів кубічної функції}
a1:=1+random(3); writeln( ' Якщо cтарший коефіцієнт кубічної функції a1=', a1); writeln;
a2:=2+random(7); writeln(' Якщо
квадратичний коефіцієнт кубічної функції a2=', a2); writeln;
a3:=-(4+random(10)); writeln(' Якщо лінійний коефіцієнт кубічної функції a3=', a3); writeln;
a4:=-(3+random(10)); writeln(' Якщо вільний коефіцієнт кубічної функції a4=', a4); writeln;
x:=-(1+random(20)); writeln(' Якщо
початковий аргумент кубічної функції x=', x); writeln;
d:=1+random(3); writeln( ' Якщо
величина кроку табуляції кубічної
функції d=', d); writeln;
k:=15+random(5); writeln( ' Якщо
кількість кроків табуляції k=', k); writeln;
for i:=1 to k do begin {виконання
циклу з лічильником по kрокам для
обчислення значень функції}
x:=x+(i-1)*d; y:=((a1*x+a2)*x+a3)+a4; { виведення результатів табулювання на екран монітора}
writeln( ' номер кроку
табуляції i=', i, ' аргумент функції х=', x, ' значення
функції y=', y); writeln; end; writeln('********'); end. {закінчення алгоритму}
Протестуйте алгоритм чотири рази та
порівняйте результати табуляції і виберіть той варіант, при якому можна знайти
найточніше наближення нулів кубічної функції,
тобто випадок ((a1*x+a2)*x+a3)*x+a4=0.
Практична робота 20. «Алгоритми інтерполяції
квадратними поліномами трьох точкової статистики на мові Pascal»
Завдання 1.
Створити алгоритм який за трьома відомими точками в прямокутній системі координат генерує формулу квадратичної
функції використовуючи розв’язання системи 3-х рівнянь з трьома невідомими методом Крамера. Ця задача називається «інтерполяція
квадратичними поліномами» або знаходження «квадратичного тренду».
Розв’язання. Випадковим чином задаються три
точки деякої статистики: (х1; у1), (х2;
у2), (х3; у3). Вважається, що ці три точки належать деякій параболі, що записується формулою вигляду: у=ах2+bx+c. Підставляємо
кожну точку у формулу і отримуємо систему трьох рівнянь з трьома невідомими а, b, c.
{| aх1*х1 + bх1 + c * 1 = y1
| }
{| aх2*х2 + bх2 + c * 1 = y2
}
{| aх3*х3 + bх3 + c * 1 = y1
}
Розв’язуємо систему
відносно а, b, c за допомогою метода визначників (метод Крамера).
Program Interpoljacia;
var a1, a2, a3, b1, b2, b3, c1, c2, c3, d1, d2, d3, x,
y, z, e, ex, ey, ez, x1, x2, x3, y1, y2, y3: real;
begin
x1:=-(1+random(3))
*(-2+random(1)) *(-random(2)) +
1+random(3) ;
y1:=-(1+random(3))
*(-2+random(1)) *(-random(2)) + 2+random(3) ;
writeln( ' Якщо перша
точка, що належить квадратичній функції х1=', x1,
'y1=', y1); writeln;
x2:=-(1+random(3))
*(-2+random(1)) *(-random(2)) +
1+random(3) ;
y2:=-(1+random(3))
*(-2+random(1)) *(-random(2)) + 3+random(3) ;
writeln( ' Якщо друга
точка, що належить квадратичній функції х2=', x2, 'y2=', y2); writeln;
x3:=-(1+random(3))
*(-2+random(1)) *(-random(2)) +
1+random(3) ;
y3:=-(1+random(3))
*(-2+random(1)) *(-random(2)) + 4+random(3) ;
writeln( ' Якщо третя
точка, що належить квадратичній функції х3=', x3, 'y3=', y3); writeln;
a1:= x1*x1; a2:= x2*x2;
a3:= x3*x3; b1:= x1; b2:= x2;
b3:= x3; c1:=1; c2:=1;
c3:=1;
d1:=y1; d2:=y2;
d3:=y3;
e:= (a1 * b2 *
c3 + b1 * c2 * a3 + c1 * a2 * b3-a3 * b2 * c1-b3 * c2 * a1-c3 * a2 * b1);
ex:=(d1 * b2 *
c3 + b1 * c2 * d3 + c1 * d2 * b3-d3 * b2 * c1-b3 * c2 * d1-c3 * d2 * b1);
ey:=(a1 * d2 *
c3 + d1 * c2 * a3 + c1 * a2 * d3-a3 * d2 * c1-d3 * c2 * a1-c3 * a2 * d1);
ez:=(a1 * b2 *
d3 + b1 * d2 * a3 + d1 * a2 * b3-a3 * b2 * d1-b3 * d2 * a1-d3 * a2 * b1);
if (e=0) and
((ex=0) or (ey=0) or (ez=0)) then
writeln (
'безліч рішень')
else if (e
<> 0) and ((ex = 0) or (ey = 0) or (ez = 0)) then
writeln (
'немає рішень')
else begin
x:=ex/e; y:=ey/e;
z:=ez/e;
writeln ( 'Головний визначник е =', e);writeln ( 'a =', x);
writeln ( 'b =', y);
writeln ( 'c =', z);
writeln( ' Шукана квадратична
функція у=', x, '*x*x+( ' , y, ' )x+( ', z, ' ) '); end; end.
Немає коментарів:
Дописати коментар