Алгоритми розв′язування систем лінійних рівнянь
Б. Метод Крамера.
Розв′язування систем лінійних рівнянь з двома
невідомими
|a1*x + b1*y = c1
|a2*x+b2*y=c1
метод визначників:
|c1 b1| |a1 c1|
|c2 b2| |a2 c2|
x = --------- y = ---------
|a1 b1| |a1 b1|
|a2 b2| |a2 b2|
Обчислюємо визначники квадратних матриць 2х2:
x = (c1*b2-c2*b1)/(a1*b2-a2*b1)
y = (a1*c2-a2*c1)/(a1*b2-a2*b1)
Алгоритм Крамера мовою Pascal:
Program KRAMER;
var
a1,a2,b1,b2,c1,c2,x,y,d,dx,dy:real;
begin
writeln('введіть коефіциєнти двох рівнянь: a1,b1,c1,a2,b2,c2');
readln(a1,b1,c1,a2,b2,c2);
d :=
(a1*b2-a2*b1);
dx := (c1*b2-c2*b1);
dy := (a1*c2-a2*c1);
if ( d=0 ) and ( (dx=0) or (dy=0) ) then
writeln('Безліч розв′язків у системи')
else if ( d<>0 ) and (
(dx=0) or (dy=0) ) then
writeln(' Немає розв′язків у системи')
else begin writeln('Єдиний розв′язок у системи');
x:=dx/d; y:=dy/d;
writeln('x = ', x); writeln('y = ', y);
end;
end.
Алгоритм Крамера для системи лінійних рівнянь з трьома невідомими
{ ------------------------------------------------------------------------
}
{ Розв’язок системи рівнянь виду:
{ |a1*x + b1*y + c1*z = d1|
{ |a2*x + b2*y + c2*z = d2|
{ |a3*x + b3*y + c3*z = d3|
{
{ Метод розв’язку: Утворюємо квадратні масиви розміром 3х3
{ |d1 b1 c1| |a1 d1 c1| |a1 b1 d1|
{ |d2 b2 c2| |a2 d2 c2| |a2 b2 d2|
{ |d3 b3 c3| |a3 d3 c3| |a3 b3 d3|
{ x = ---------- y =
---------- z = ----------
{ |a1 b1 c1| |a1 b1 c1| |a1 b1 c1|
{ |a2 b2 c2| |a2 b2 c2| |a2 b2 c2|
{ |a3 b3 c3| |a3 b3 c3| |a3 b3 c3|
{
{ Обчислюємо чотири визначники квадратних матриць 3х3: }
{ 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);
{ x = ex/e
{ y = ey/e
{ z = ez/e
{ --------------------------------------
Алгоритм Крамера мовою Раscal
Program KRAMER2;
var a1,a2,a3,b1,b2,b3,c1,c2,c3,d1,d2,d3,x,y,z,e,ex,ey,ez:real;
begin
writeln('введіть коефіцієнти: a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3');
readln(a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3);
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
writeln('Єдиний розв’язок у системи’)
x:=ex/e; y:=ey/e; z:=ez/e;
writeln('x = ', x); writeln('y =
', y); writeln('z = ', z);
end; end.
Немає коментарів:
Дописати коментар