Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

Системы линейных уравнений   Найти похожие ветки 

 
ssmaxx   (2003-01-10 18:19) [0]

Уважаемые мастера ! Подскажите пожалуйста, где можно взять процедурку (компонентку, библиотечку) по решению систем линейных уравнений ???


 
Vit@ly ©   (2003-01-10 18:25) [1]

Их целый вагон и маленькая тележка. Каким методом?


 
ssmaxx   (2003-01-10 18:29) [2]

В принципе, все равно, но желательно методом Гаусса и методом обратной матрицы.


 
Strumpf ©   (2003-01-10 19:23) [3]

Я пользуюсь для обращения матрицы этим:

void __fastcall MatrixInversion(int n, TTwoArrayComplex &A, Complex &det)
{
TOneArrayInt l;
TOneArrayInt m;
l.Length = n+1;
m.Length = n+1;
det = 1.0;
for (int k=1; k<=n; k++)
{
l[k] = k;
m[k] = k;
Complex biga = A[k][k];
for (int j=k; j<=n; j++)
for (int i=k; i<=n; i++)
{
if (abs(biga) < abs(A[i][j]))
{
biga = A[i][j];
l[k] = i;
m[k] = j;
}
}
int j = l[k];
if (j > k)
for (int i=1; i<=n; i++)
{
Complex hold = -A[k][i];
A[k][i] = A[j][i];
A[j][i] = hold;
}
int i = m[k];
if (i > k)
for (int j=1; j<=n; j++)
{
Complex hold = -A[j][k];
A[j][k] = A[j][i];
A[j][i] = hold;
}
if (abs(biga) == 0.0)
{
det = 0.0;
l.Length = 0;
m.Length = 0;
return;
}
for (int i=1; i<=n; i++)
if (i != k)
A[i][k] = -A[i][k]/biga;
for (int i=1; i<=n; i++)
{
Complex hold = A[i][k];
for (int j=1; j<=n; j++)
if ((i != k) && (j != k))
A[i][j] += hold*A[k][j];
}
for (int j=1; j<=n; j++)
if (j != k)
A[k][j] = A[k][j]/biga;
det = det*biga;
A[k][k] = (Float)1.0/biga;
}
int k = n;
m10:
k--;
if (k <= 0)
{
l.Length = 0;
m.Length = 0;
return;
}
int i = l[k];
if (i > k)
for (int j=1; j<=n; j++)
{
Complex hold = A[j][k];
A[j][k] = -A[j][i];
A[j][i] = hold;
}
int j = m[k];
if (j <= k)
{
goto m10;
};
for (int i=1; i<=n; i++)
{
Complex hold = A[k][i];
A[k][i] = -A[j][i];
A[j][i] = hold;
};
goto m10;
}


 
Axis_of_Evil ©   (2003-01-10 19:32) [4]

2 ssmaxx
Ну напряги извилину, напиши сам, не ленись, это ж просто


 
ssmaxx   (2003-01-10 19:58) [5]

Уважаемый Axis_of_Evil !!! Не хватает у меня макулатуры про матрицы, поэтому и прошу помочь.


 
Феу ©   (2003-01-10 20:58) [6]

algolist.manual.ru/maths/linalg/
alglib.dore.ru/linalg/index1.html#gauss


 
Strumpf ©   (2003-01-11 11:43) [7]

А вот и ГАУСС:

void __fastcall Gauss(int n)
{
DynamicArray<int> ik,jk;
ik.Length = n+1;
jk.Length = n+1;
for (int i=1; i<=n; i++)
{
ik[i] = 0;
jk[i] = 0;
Fca[i][n+1] = Fcb[i];
};
for (int k=1; k<=n; k++)
{
Float am = 0.0;
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
for (int k1=1; k1<=k; k1++)
if ((i == ik[k1]) || (j == jk[k1]))
goto m5;
if (abs(Fca[i][j]) <= am)
goto m5;
am = abs(Fca[i][j]);
ik[k] = i;
jk[k] = j;
m5: }
}
int m = jk[k];
int l = ik[k];
int n1 = n+1;
for (int j=1; j<=n1; j++)
{
for (int k1=1; k1<=k; k1++)
if (j == jk[k1])
goto m4;
Fca[l][j] = Fca[l][j]/Fca[l][m];
for (int i=1; i<=n; i++)
if (i != ik[k])
Fca[i][j] -= Fca[i][m]*Fca[l][j];
m4: }
}
for (int k=1; k<=n; k++)
{
int m = jk[k];
int l = ik[k];
Fcx[m] = Fca[l][n+1];
}
ik.Length = 0;
jk.Length = 0;
}



Страницы: 1 вся ветка

Текущий архив: 2003.01.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
4-62905
Serega Belov
2002-12-03 12:13
2003.01.20
WinExec и Winoldap в Delphi 6.


14-62796
Дмитрий К.К.
2002-12-31 05:03
2003.01.20
Именинники 31 декабря


14-62769
uw
2002-12-30 15:59
2003.01.20
Как бы это сделать?


1-62561
Намиг
2003-01-11 12:24
2003.01.20
называть new Folders как текущий дата времени,


3-62361
Che
2002-12-24 00:09
2003.01.20
Удаление