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