example123 Опубликовано 24 февраля, 2010 Жалоба Опубликовано 24 февраля, 2010 Нужна программа для вычисления обратной матрицы на С++, напишите код если можно! Цитата
Lakers Опубликовано 24 февраля, 2010 Жалоба Опубликовано 24 февраля, 2010 http://drobotenko.com/code_rus.html#include int gaus_ostatok;// дефект линейного преобразования// 0 == ОКlong double gaus_deter;// в случае успешного обращения детерминантdouble gaus_minved;// минимальный ведущий элемент// можно использовать для оценки точности#define _NaN() (double&)*"Implementation dependent";// заполнитель для неразрешенных измерений// при невозможности обращения template inline static void invers(double m[N][N]) { // (c) Drobotenko http://drobotenko.com int rn[N],cn[N]; int j,k; for(j=N;j-- rn[j]=cn[j]=j; gaus_minved=1e99; gaus_deter=1; for(gaus_ostatok=N;gaus_ostatok;gaus_ostatok--) { int jved,kved; double vved=-1,t; // поиск ведущего for(j=N;j-- { if(~rn[j]) for(k=N;k-- if(~cn[k]) if(vved vved=fabs(m[j][k]),jved=j,kved=k; } if(gaus_minved>vved) gaus_minved=vved; gaus_deter*=m[jved][kved]; if(vved<1e-99) { for(j=N;j-- { if(~rn[j]) for(k=N;k-- m[j][k]=_NaN(); if(~cn[j]) for(k=N;k-- m[k][j]=_NaN(); } return; } int jt=rn[jved],kt=cn[kved]; // перестановки for(j=N;j-- t=m[kt][j],m[kt][j]=m[jved][j],m[jved][j]=t; for(j=N;j-- t=m[j][jt],m[j][jt]=m[j][kved],m[j][kved]=t; rn[jved]=rn[kt]; cn[kved]=cn[jt]; rn[kt]=cn[jt]=-1; vved=m[kt][jt]; m[kt][jt]=1; for(j=N;j-- { if(j==kt) continue; double mul=m[j][jt]/vved; m[j][jt]=0; for(k=N;k-- m[j][k]-=m[kt][k]*mul; // самый внутренний цикл ровно N^3 операций } for(k=N;k-- m[kt][k]/=vved; } }const int r=5;double m[r][r],e[r][r];double mval(int i,int j) { // значения матрицы return int(1000./(.1+fabs(i-.95*j)))/1000.; }int main(int, char **){ for(int i=r;i-- for(int j=r;j-- m[i][j]=mval(i,j); invers(m); for(int i=r;i-- for(int j=r;j-- { // проверка в Е получается единичная матрица e[i][j]=0; for(int k=r;k-- e[i][j]+=m[i][k]*mval(k,j); }} Цитата
example123 Опубликовано 24 февраля, 2010 Автор Жалоба Опубликовано 24 февраля, 2010 не пашет прога ((( Цитата
TolkienDRR Опубликовано 24 февраля, 2010 Жалоба Опубликовано 24 февраля, 2010 дай угадаю, на #include ругается? ))) Цитата
example123 Опубликовано 24 февраля, 2010 Автор Жалоба Опубликовано 24 февраля, 2010 TolkienDRRнет я её запускаю, она вылетает ) Цитата
Lakers Опубликовано 25 февраля, 2010 Жалоба Опубликовано 25 февраля, 2010 example123 гугли "Вычисление обратной матрицы по Гаусу". готовых алгоритмов там много. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.