Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 11:53   #1
AlinAA
 
Регистрация: 19.02.2009
Сообщений: 5
По умолчанию Алгоритм нахождения обратной мтарицы

проверьте,пожалуйста,правильный ли... самой нет пока возможности проверить..задействован метод гаусса

Код:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

/* получение обратной матрицы */
extern int invert(double* matrix, int* nstr, int* nstb)
{ int N = *nstr, i, j, k;
double **e;
double *tmp;

if (*nstr != *nstb)
{
puts("matrica ne kvadratnaia");
return 0;
}



/* Выделяем память под единичную матрицу */
e= (double**)malloc(N*sizeof(double));
for (k = 0; k < N; k++)
e[k] = (double*)malloc(N*sizeof(double));
/* ------------------------ */

/* Создадим единичную матрицу */
for (i=0;i<N;i++)
for (j=0;j<N;j++)
e[i][j]=(i==j?1:0);

/* Действия с обратной матрицей */
for(i=0;i<N;i++)
{

tmp = (double*)malloc(sizeof(double));
*tmp=*(matrix+i*N+i);
for(j=N-1;j>=0;j--)
{
e[i][j]/=*tmp;
*(matrix+i*N+j)/=*tmp;
}

/* excluding i-th element from each row except i-th one */
for(j=0;j<N;j++)
if (j!=i)
{
*tmp =*(matrix + j*N + i);

for(k=N-1;k>=0;k--)
{
e[j][k]-=e[i][k] * (*tmp);
*(matrix+j*N+k) -= *(matrix+i*N+k) * (*tmp);
}
}
free((void*)tmp);
}

/* Копируем единичную матрицу к исходной */
for(i=0;i<N;i++)
for(j=0;j<N;j++)
*(matrix+i*N+j)=e[i][j];

/* освобождаем память */
for (i = 0; i != N; ++i)
free((void*)e[i]);
free((void**)e);

return 1;
}

/*получение нормы матрицы */
extern double norma(double* matrix, int* nstr, int* nstb)
{
int N = *nstr, i, j; double max_stb = *(matrix); double sum_ = 0.0;

for(i=0;i<N;i++)
{
for(j=0;j<N;j++) /* считаем сумму в столбце в цикле */
{
sum_ += *(matrix+j*N + i);
}
if (sum_ > max_stb) /* определяем максимальный элемент в столбце */
max_stb = sum_;
}
return fabs(max_stb); /* возвращяем модуль максимальной суммы в столбцах */
}
AlinAA вне форума Ответить с цитированием
Старый 22.03.2009, 12:20   #2
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Для начала, вместо:
e= (double**)malloc(N*sizeof(double));
должно быть:
e = (double**)malloc(N*sizeof(double *));
como вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт обратной связи Helen888 Фриланс 6 02.05.2010 11:11
алгоритм нахождения наилучшего маршрута между двумя заданными городами Uli9 Общие вопросы Delphi 28 18.11.2008 16:59
алгоритм нахождения наилучшего(кратчайшего) маршрута между двумя заданными городами Uli9 Помощь студентам 4 14.11.2008 15:03
алгоритм нахождения интеграла методом трапеций pirozho4ek Паскаль, Turbo Pascal, PascalABC.NET 2 11.06.2007 02:44