|a11 a12 a13 a14|
|a21 a22 a23 a24|
|a31 a32 a33 a34|
|a41 a42 a43 a44|
= (-1)^(1+1) * a11 * |a22 a23 a24| +
|a32 a33 a34|
|a42 a43 a44|
+ (-1)^(1+2) * a12 * |a21 a23 a24| +
|a31 a33 a34|
|a41 a43 a44|
+ (-1)^(1+3) * a13 * |a21 a22 a24| +
|a31 a32 a34|
|a41 a42 a44|
+ (-1)^(1+4) * a14 * |a21 a22 a23|
|a31 a32 a33|
|a41 a42 a43|
вычесления опредилителя 4х4
как можно вычеслить опредилитель 4х4 спомощью цикла или какнибудь динамически
Цитата:
Originally posted by TOXA23
как можно вычеслить опредилитель 4х4 спомощью цикла или какнибудь динамически
как можно вычеслить опредилитель 4х4 спомощью цикла или какнибудь динамически
Можно рекурсивно.
Определитель раскладывается по первому ряду следующим образом:
Код:
Далее определитель 3-го порядка аналогично:
Код:
|a11 a12 a13|
|a21 a22 a23|
|a31 a32 a33|
= (-1)^(1+1) * a11 * |a22 a23| +
|a32 a33|
+ (-1)^(1+2) * a12 * |a21 a23| +
|a31 a33|
+ (-1)^(1+3) * a13 * |a21 a22|
|a31 a32|
|a21 a22 a23|
|a31 a32 a33|
= (-1)^(1+1) * a11 * |a22 a23| +
|a32 a33|
+ (-1)^(1+2) * a12 * |a21 a23| +
|a31 a33|
+ (-1)^(1+3) * a13 * |a21 a22|
|a31 a32|
Далее определитель 2-го порядка:
Код:
|a11 a12|
|a21 a22|
= (-1)^(1+1) * a11 * |a22| +
+ (-1)^(1+2) * a12 * |a21|
|a21 a22|
= (-1)^(1+1) * a11 * |a22| +
+ (-1)^(1+2) * a12 * |a21|
А определитель 1-го порядка равен элементу:
Код:
|a11| = (-1)^(1+1) * a11 = a11
Цитата:
Originally posted by sp999
Можно рекурсивно.
Определитель раскладывается по первому ряду следующим образом:
Далее определитель 3-го порядка аналогично:
Далее определитель 2-го порядка:
А определитель 1-го порядка равен элементу:
Можно рекурсивно.
Определитель раскладывается по первому ряду следующим образом:
Код:
|a11 a12 a13 a14|
|a21 a22 a23 a24|
|a31 a32 a33 a34|
|a41 a42 a43 a44|
= (-1)^(1+1) * a11 * |a22 a23 a24| +
|a32 a33 a34|
|a42 a43 a44|
+ (-1)^(1+2) * a12 * |a21 a23 a24| +
|a31 a33 a34|
|a41 a43 a44|
+ (-1)^(1+3) * a13 * |a21 a22 a24| +
|a31 a32 a34|
|a41 a42 a44|
+ (-1)^(1+4) * a14 * |a21 a22 a23|
|a31 a32 a33|
|a41 a42 a43|
|a21 a22 a23 a24|
|a31 a32 a33 a34|
|a41 a42 a43 a44|
= (-1)^(1+1) * a11 * |a22 a23 a24| +
|a32 a33 a34|
|a42 a43 a44|
+ (-1)^(1+2) * a12 * |a21 a23 a24| +
|a31 a33 a34|
|a41 a43 a44|
+ (-1)^(1+3) * a13 * |a21 a22 a24| +
|a31 a32 a34|
|a41 a42 a44|
+ (-1)^(1+4) * a14 * |a21 a22 a23|
|a31 a32 a33|
|a41 a42 a43|
Далее определитель 3-го порядка аналогично:
Код:
|a11 a12 a13|
|a21 a22 a23|
|a31 a32 a33|
= (-1)^(1+1) * a11 * |a22 a23| +
|a32 a33|
+ (-1)^(1+2) * a12 * |a21 a23| +
|a31 a33|
+ (-1)^(1+3) * a13 * |a21 a22|
|a31 a32|
|a21 a22 a23|
|a31 a32 a33|
= (-1)^(1+1) * a11 * |a22 a23| +
|a32 a33|
+ (-1)^(1+2) * a12 * |a21 a23| +
|a31 a33|
+ (-1)^(1+3) * a13 * |a21 a22|
|a31 a32|
Далее определитель 2-го порядка:
Код:
|a11 a12|
|a21 a22|
= (-1)^(1+1) * a11 * |a22| +
+ (-1)^(1+2) * a12 * |a21|
|a21 a22|
= (-1)^(1+1) * a11 * |a22| +
+ (-1)^(1+2) * a12 * |a21|
А определитель 1-го порядка равен элементу:
Код:
|a11| = (-1)^(1+1) * a11 = a11
я все это себе предстовляю, но немогу написать сам код проги...
Цитата:
Originally posted by TOXA23
я все это себе предстовляю, но немогу написать сам код проги...
я все это себе предстовляю, но немогу написать сам код проги...
Вот немного коряво (не Сишник я), но работает:
Код:
#pragma hdrstop
#pragma argsused
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>
int A[4][4]={{2,5,3,8},
{7,3,9,2},
{1,6,0,2},
{5,2,8,7}};
int Calculate(int N, int M[4][4])
{
if (N == 1)
return M[0][0];
else
{
int M1[4][4];
int i, x, X, Y, Res = 0;
for (i = 0; i < N; i++)
{
for (Y = 1; Y < N; Y++)
{
x = 0;
for (X = 0; X < N; X++)
if (X != i)
M1[Y-1][x++] = M[Y][X];
}
if (i % 2 == 0)
Res += M[0] * Calculate(N - 1, M1);
else
Res -= M[0] * Calculate(N - 1, M1);
}
return Res;
}
}
int main(int argc, char* argv[])
{
int Op = Calculate(4, A);
cout << Op << endl;
getch();
return 0;
}
#pragma argsused
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>
int A[4][4]={{2,5,3,8},
{7,3,9,2},
{1,6,0,2},
{5,2,8,7}};
int Calculate(int N, int M[4][4])
{
if (N == 1)
return M[0][0];
else
{
int M1[4][4];
int i, x, X, Y, Res = 0;
for (i = 0; i < N; i++)
{
for (Y = 1; Y < N; Y++)
{
x = 0;
for (X = 0; X < N; X++)
if (X != i)
M1[Y-1][x++] = M[Y][X];
}
if (i % 2 == 0)
Res += M[0] * Calculate(N - 1, M1);
else
Res -= M[0] * Calculate(N - 1, M1);
}
return Res;
}
}
int main(int argc, char* argv[])
{
int Op = Calculate(4, A);
cout << Op << endl;
getch();
return 0;
}