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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2011, 12:03   #1
Monomah
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 16
По умолчанию найти обратную матрицу в Си

необходимо найти обратную матрицу методов разложение на произведение двух треугольных....на Си..причем исходная матрица и обратная должны быть одномерными...
код вроде написал, проверьте плиз(зы сам проверить не могу...почему не спрашивайте)
ЗЫ я тут где-то наверняка запутался в коэффициентах
ЗЫЫ формулизация задачи
Пусть А=СВ, где С-нижняя В-верхняя треугольные матрицы с диаг.элементами равными еденице, тогда следующие формулы
с[i][j]=a[i][j]-(сумма произведений c[i][k] и b[k][j] где k изменяется от k=1, до k=j-1)
b[i][j]=(a[i][j]-(сумма проивзедений c[i][k] b[k][j], где k изменяется от k=1, до k=i-1))/c[i][i]
это были формулы для нахождения треугольных матриц....
сейчас уже как из этих треугольных получить обратную...

obrata[i][j]=(-1)*(сумма произведений obrata[i][k] c[k][j] где k изм-ся от k=j+1 до k=n)/c[j][j] для (i>j)
obrata[i][i]=1-(сумма произведений obrata[i][k] c[k][i] где k изм-ся от k=i+1 до k=n)/c[i][i] для (i=j)
obrata[i][j]=(-1)*(сумму произведений b[i][k] obrata[k][j] где k изменяется от k=i+1 до k=n) для i<j

вот сам код
Код:
#include <stdio.h>
int main (void)
{
double z,a[1024],b[32][32],c[32][32],a1[1024];
int i,j,k,p,m,s,l,n;
scanf("%d",n);
for (i=1;i<n;i++) {
scanf("%lf",z);
a[i]=z; }
p=0;m=0;
for (i=1;i<n;i++)
for (j=1;j<n;j++)
{if (i<j) c[i][j]=0
if (i>j) b[i][j]=0
if (i==j) {c[i][j]=1 b[i][j]=1}
for (i=0;i<n;i++)
for (j=0;j<n;j++)
for (i=k;k<(j-1);k++)
if (i>=j) c[i][j]=a[i+i*n+j]-(p+c[i][k]*b[k][j]);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
for (i=k;k<(i-1);k++)
if (i<j) b[i][j]=(a[i+i*n+j]-(m+c[i][k]*b[k][j]))/c[i][i];
p=0; m=0; s=0;
for (i=n;i>1;i--)
for (j=n;j>1;j--)
for (k=(j-1);k>i;k--)
if (i>j) a1[i]=(-1)*(p+a1[i+i*n+k]*c[k][j])/c[j][j];
for (i=1;i<n;i++)
for (j=1;j<n;j++)
for (i=k;k<(i+1);k++)
{if (i==j) a1[i+i*n+i]=(1-(m+a1[i+i*n+k]*c[k][i]))/c[i][i]; 
if (i<j) a1[i+i*n+j]=(-1)*(b[i][k]*a1[k+k*n]+m);}
for(i=1;i<n;i++)
{a[i]=z;
printf("%lf",z);}
}
Monomah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку в коде С задача на обратную матрицу Monomah Помощь студентам 0 20.02.2011 17:11
Найти обратную матрицу. C# MaD1z Помощь студентам 0 23.12.2009 12:47
Как найти обратную матрицу? Энжи Помощь студентам 0 07.12.2009 22:38
Помогите найти обратную матрицу в Pascal Maloiii Помощь студентам 3 20.04.2009 21:39