Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы

Ответить
Настройки темы
C/C++ - [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы

Аватара для D.Y.

Новый участник


Сообщения: 28
Благодарности: 5

Профиль | Отправить PM | Цитировать


Мне срочняк надо прогу нахождения обратной матрицы методом гаусса и при помощи расширенной матрицы я написал но она требует доработки а сдавать в среду
если у кого есть напишите пожалуйста заранее благодарен (иначе сессия продлится до сентября)
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:29, 22-06-2008

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Цитата D.Y.:
я написал но она требует доработки »
Ну и где код в теме?
Математика процесса
определитель матрицы методом Гаусса
Обратная матрица методом Гаусса
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 22-06-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


D.Y.,
Цитата D.Y.:
я написал но она требует доработки »
А где исходники, которые требуют доработки?
Метод Гаусса, ещё смотри тут (не всё конечно, но про Гаусса есть.)

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 13:20, 22-06-2008 | #3


Аватара для D.Y.

Новый участник


Сообщения: 28
Благодарности: 5

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
 
//вот метод гаусса
 #include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
//using namespace::std;
const int dim=20;
int InvMatrG(int n, float(*a)[dim], float e,float d)
{int i,j,k;
float y,w;
float b[dim],c[dim];
int z[dim];
d=1;
for(j=0;j<n;j++)
x[j]=j;
for (i=0;i<n;i++)
{k=i;
y=a[i][i];
if (fabs(w)>fabs(y))
{k=j;
y=w;}}
d*=y;
if (fabs(y)<e)
{cout<<"matrica virojdena";
getch();
}
for (j=0;j<n;j++){
         c[j]=a[j][k];
         a[j][k]=a[j][i];
         a[j][i]=-c[j]/y;
         a[i][j]=a[i][j]/y;
         b[j]=a[i][j];}
a[i][j]=1/y;
j=z[i];
z[i]=z[k];
z[k]=j;
for (k=0;k<n;k++)
if(k!=i)
for(j=0;j<n;j++)
if (j!=i)
a[k][i]-=b[j]*c[k];}
for (i=0;i<n;i++){
         k=z[i];
         if (k!=i){
                   for (j=0;j<n;j++)
                   {w=a[i][j];
                   a[i][j]=a[k][j];
                   a[k][j]=w;}
                   j=z[i];
                   z[i]=z[k];
                   d=-d;
         }}}
         int MatrIn (int n,float(*a)[dim]){
                   int i,j;
                   for(i=0;i<n;i++)
                            for (j=0;j<n;j++)
                                      cin>>a[i][j];}
         int MatrOut(intn,float(*a)[dim]){
                   int i,j;
                   for (i=0;i<n;i++)
                            for (j=0;j<n;j++)
                                      cout<<a[i][j]<<" ";}
         void main()
         {int n;
         float matr[dim][dim];
         float d;
         cout<<"\n vvedite razmernost'";
         cin>>n;
         cout<<"\n vvedite elemeti";
         MatrIn(n,(*matr)[n]);
         cout"\n tochnost'";
         cin>>e;
         InvMatrG(n,matr[][n],e,d);
         cout"\n obratnaya matrica";
         MatrOut(n,matr[][n]);
         getch();
         }

 
 
 
 
 
 //а вот
 
//Нахождение обратной матрицы методом расширенной матрицы

#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
 
const int dim1=20;
const int dim2=40;
float **a,**a1;
int n;
//vvod matrici
int MatrIn()
{int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
cin>>a[i][j];
}
//obraschenie matrici
int invMatr(float e)
{
         int i,j,k,n1;
         float f,f1;
         float matr[20][40];
         n1=2*n;
         for (int i=0;i<n;i++)
for (j=0;j<n1;j++)
if (j<n)
matr [i][j]=a[i][j];
else 
if (j==n+1)
matr[i][j]=1;
else
matr [i][j]=0;
         for (int i=0;i<n;i++)
         {k=i;
         f1=matr[i][j];
         while (fabs(f1)<e)
         {if (k<n)
         {
                   k++;
                   f1=matr[k][i];
         }
         else
         {
                   cout<<"matrica virojdena";
                   gatch();
         }
         for (j=i;j<n1;j++)
         {
                   f=matr[k][j];
                   matr[k][j]=matr[i][j];
                   matr[i][j]=f/f1;
         }
         for (k=0;k<n;k++)
                   if (k!=i)
                            for (j=n1-1;j>=i;j--)
                                      matr[k][j]=matr[k][j]-matr[i][j]*matr[k][j];
         }
         for (i=0;i<n;i++)
for (j=0;j<n;j++)
a[i][j]=matr[i][j+n];
         }
}
//vivod obratnoy matrici
int MatrOut()
{
         int i,j;
         for (i=0;i<n;i++)
for (j=0;j<n;j++)
cout<<a1[i][j]<<" ";
}
//glavnaya proga
void main()
{
         float e;
         cout<<"vvedite razm matrici";
         cin>>n;
         cout<<"vvedite cherez probel elementi metrici";
         a=new float*[n];
         MatrIn();
         a1=new float*[n];
         for (int i=0;i<n;i++)
                   a1[i]=new float[n];
         cout<<"vvedite tochnost' vichisleniya";
         cin>>e;
         InvMatr(e);
         cout<<"obratnaya matrica";
         MatrOut();
         getch();
}

Последний раз редактировалось Drongo, 05-02-2009 в 16:44. Причина: Правильные теги.


Отправлено: 13:22, 22-06-2008 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


D.Y., Выдели код и оформи тегом [code], на панельке инструментов, над полем ввода есть изображение решётки - # Отредактируй своё сообщение, Через ссылку Редактировать выдели весть текст и щёлкни по ней или вручную пропиши сначала перед кодом [code] потом в конце [/code] Теги

Ты хоть этот код сам писал? Мне кажется не сам. Что именно не получается там? Где искать ошибку? Я вот только что загрузил в комплятор, 10 ошибок и 3 предупреждения

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 13:29, 22-06-2008 | #5


Аватара для D.Y.

Новый участник


Сообщения: 28
Благодарности: 5

Профиль | Отправить PM | Цитировать


использовал книгу "решение инженерных задач при помощи С++"
у меня не находило библиотеку "vcl.h" когда я ее комментировал
выбивало ошибки на счет директив препроцессора "argsused" & "hdrstop"
я их тоже комментировал но выбило ошибку что функции ввода и вывода должны возвращать значения

Отправлено: 13:56, 22-06-2008 | #6


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата D.Y.:
z[i]=z[k];
d=-d;
}}}
int MatrIn (int n,float(*a)[dim]){ »
Одну скобку } нужно убрать точно.

Цитата D.Y.:
for(j=0;j<n;j++)
x[j]=j; »
Непонятное присвоение?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 13:57, 22-06-2008 | #7


Аватара для D.Y.

Новый участник


Сообщения: 28
Благодарности: 5

Профиль | Отправить PM | Цитировать


У меня Visual Studio 2008 вот что выдает
Курсач.cpp
.\Курсач.cpp(7) : fatal error C1083: Cannot open include file: 'vcl.h': No such file or directory
Build log was saved at "file://c:\Documents and Settings\Женя\Мои документы\Visual Studio 2008\Projects\Курсач\Курсач\Debug\BuildLog.htm"
Курсач - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Отправлено: 14:05, 22-06-2008 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


D.Y., А у меня Borland C++ Builder 6.0



D.Y., В этой функции
Код: Выделить весь код
int InvMatrG(int n, float(*a)[dim], float e, float d)
подразумевается возвращение результата, но она ничего не возвращает!

Та же функция, что и выше.
Код: Выделить весь код
for(j = 0; j < n; j++)  // нехватает скобки {
    x[j] = j;
В общем, я точно уверен, что вы не писали эту программу, там такие ошибки... Что вряд ли бы вы не заметили.

В общем, что смог и знаю, подправил, в остальном я не компетентен.
метод гаусса

Код: Выделить весь код
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
//using namespace::std;
const int dim = 20;
void InvMatrG(int n, float(*a)[dim], float e, float d)
{
  int i,
      j,
      k,
      x;
  float y,
        w;
  float b[dim], c[dim];
  int z[dim];
  d = 1;

  for(j = 0; j < n; j++){
    x[j] = j;
    for (i = 0; i < n; i++){
      k = i;
      y = a[i][i];
      if(fabs(w) > fabs(y)){
         k = j;
         y = w;
       }
   }
    d *= y;
    if(fabs(y) < e){
      cout<<"matrica virojdena";
      getch();
    }

    for(j = 0; j < n; j++){
      c[j] = a[j][k];
      a[j][k] = a[j][i];
      a[j][i] -= c[j]/y;
      a[i][j] = a[i][j] / y;
      b[j] = a[i][j];
    }

    a[i][j] = 1 / y;
    j = z[i];
    z[i] = z[k];
    z[k] = j;
    for(k = 0; k < n; k++)
      if(k != i)
        for(j = 0; j < n; j++)
          if(j != i)
            a[k][i] = -b[j] * c[k];
   }

    for(i = 0; i < n; i++){
      k = z[i];
      if(k != i){
        for(j = 0; j < n; j++){
           w = a[i][j];
           a[i][j] = a[k][j];
           a[k][j] = w;
         }
      j = z[i];
      z[i] = z[k];
      d = -d;
     }
  }
}
//----------------------------------------
void MatrIn (int n,float(*a)[dim])
{
  int i,
      j;

  for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
      cin>>a[i][j];
}
//-----------------------------------------------------
void MatrOut(int n,float(*a)[dim])
{
   int i,
       j;

   for(i = 0; i < n; i++)
     for(j = 0; j < n; j++)
        cout<<a[i][j]<<" ";


}
void main()
{
  int n, e;
  float matr[dim][dim];
  float d;

  cout<<"\n vvedite razmernost'";
  cin>>n;
  cout<<"\n vvedite elemeti";

  MatrIn(n,(*matr)[n]);  // Проверьте синтаксис и правильность принимаемых параметров
  cout<<"\n tochnost'";
  cin>>e;
  InvMatrG(n, matr[][n], e, d); // Проверьте синтаксис и правильность принимаемых параметров
  cout<<"\n obratnaya matrica";
  MatrOut(n, matr[][n]); // Проверьте синтаксис и правильность принимаемых параметров

  getch();
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 22-06-2008 в 14:36.


Отправлено: 14:17, 22-06-2008 | #9


Аватара для D.Y.

Новый участник


Сообщения: 28
Благодарности: 5

Профиль | Отправить PM | Цитировать


Спасибо и за это!

Отправлено: 14:51, 22-06-2008 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - [решено] Получить адрес битовой матрицы Tcanvas hackroute Программирование и базы данных 1 09-11-2009 22:50
C/C++ - Нахождение чётных элементов в столбцах матрицы ShadowMas Программирование и базы данных 9 04-04-2009 10:21
C/C++ | Матрицы Kuron Программирование и базы данных 2 21-01-2007 10:09
c++.NET выравнивание матрицы bezumes Программирование и базы данных 4 22-04-2006 01:20
Формирование матрицы Sergey Po Программирование и базы данных 3 28-04-2004 04:47




 
Переход