Практична робота 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.
Протестуйте правильність
виконання алгоритму.
Немає коментарів:
Дописати коментар