Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=848642&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 03:37:50 2016
Кодировка: Windows-1251
Cи - решение систем линейных уравнений - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
General Discussion >> Study (Archive)

Страницы: 1
anbal
old hand

Рег.: 12.08.2003
Сообщений: 795
Рейтинг: -57
  Cи - решение систем линейных уравнений
      27.01.2004 13:55
 

есть у кого нить такая написанная функция (любой метод сгодится)

Перенесено модератором Kach из раздела Hard & Soft



Редактировал Kach (27.01.2004 16:00)
KOHTPA
Carpal Tunnel

Рег.: 22.01.2003
Сообщений: 33647
Рейтинг: 2374
  Re: Cи - решение систем линейных уравнений [re: anbal]
      27.01.2004 14:12
 

Исключением переменных.

code:

#undef DEBUG
/* #define L 4 */
/* #define C 5 */

/* #define real long double */
/* real M[L][C]; */
#ifndef abs
#define abs(N) ((N>0)?(N):(-(N)))
#endif
{
int i,j,k;
int lead,maxlead;

for(i=lead=0;(i<L)&&(lead<C);i++,lead++)
{
/* Maximal by absolute value leading element search */
{ real max=0;

for(j=i;j<L;j++)
if(abs(M[j][lead])>max)
{ maxlead=j; max=abs(M[j][lead]); };
/* If no maximal leading element */
if(max==0) { i--; continue; };
};
/* Swap lines #i and #maxlead */
if(i!=maxlead)
{ real t;
for(j=lead;j<C;j++)
{ t=M[i][j];
M[i][j]=M[maxlead][j];
M[maxlead][j]=t;
};
};
/* Now subtract from each line below #i line #i */
for(j=i+1;j<L;j++)
{ real ratio=M[j][lead]/M[i][lead];
for(k=lead+1;k<C;k++)
M[j][k]-=M[i][k]*ratio;
M[j][lead]=0;
};
/* Next line */
};

/* Backward pass */
for(i=L-1;i>0;i--)
{
/* Determine leading element */
for(lead=0;(lead<C)&&(M[i][lead]==0);lead++);
if(lead==C) continue;
/* Subtract current line from upper lines */
for(j=0;j<i;j++)
{ real ratio=M[j][lead]/M[i][lead];
for(k=lead+1;k<C;k++)
M[j][k]-=M[i][k]*ratio;
M[j][lead]=0;
};
/* Next line */
};

/* Normalize */
for(i=0;i<L;i++)
{
/* Determine leading element */
for(lead=0;(lead<C)&&(M[i][lead]==0);lead++);
if(lead==C) continue;
/* Divide line on leading element */
for(j=lead+1;j<C;j++) M[i][j]/=M[i][lead];
M[i][lead]=1;
};

/* Finished */
};



---
...Я работаю...

Attila
R

Рег.: 18.12.2002
Сообщений: 16118
Из: ...вот именно там.
Рейтинг: 3169
  Re: Cи - решение систем линейных уравнений [re: anbal]
      27.01.2004 14:31
 

могу дать на Си++ обращение матрицы через LU-разложение самодельное



Кр-ть - с.т.!
Страницы: 1

General Discussion >> Study (Archive)

Дополнительная информация
0 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  Basilio, The_Nameless_One 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в