Решить систему уравнений с помощью обратной матрицы

Тема в разделе "C/C++/C#", создана пользователем iScream, 17 мар 2010.

Статус темы:
Закрыта.
  1. iScream

    iScream Гость

    Вообщем, ребят, такая проблема. Учусь на заочном отделении технического вуза. Специальность, ну, никаким образом не связана с программированием, но, как посчитали люди, составляющие программу обучения, для общего развития надо знать поверхностно С++ (боже мой, какой бред). Главное сделать, сдавать - да, каким-нибуддь образом сдам. Так как моё знание компьютера ограничивается поверхностным знанием МС оффис и не вылазит за пределы обновления антивируса ^^, хочу обратиться к вам за помощью. Задача состоит в следующем:
    Решить систему уравнений с помощью обратной матрицы:
    [​IMG]
    Работа выполняется на языке С в интегрированной среде Borland C++ (вер. 3.1) или как консольное приложение в среде Borland C++ Builder (вер. 5 или 6). Преподаватель сказал, что в среде Borland C++ Builder проще сделать...
    Буду очень признателен всем, кто протянет руку помощи.
     
  2. iScream

    iScream Гость

    спс, решение найдено. тема маст би клосед :rolleyes:
     
  3. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.472
    Симпатии:
    27
    Сначала решение опубликуйте=)
     
  4. iScream

    iScream Гость

    Код (Text):
    #include <stdio.h>

    #define N 3 // Размерность матрицы

    /*
    *   Определитель м-цы 2x2
    */
    double GetDet2( double x[][2] ) {

    return x[0][0]*x[1][1]-x[0][1]*x[1][0];

    }


    /*
    * Вычисление алгебраического дополнения к эл-ту a[i0][j0]
    */
    double GetAlgDop( double a[][N], int i0, int j0 ) {

    int i, iDop, j, jDop;
    double aDop[N-1][N-1];

    iDop = 0;
    for (i = 0; i < N; i++ ) {
    if ( i == i0 )
    continue;    // Пропускаем строку i0
    jDop = 0;
    for ( j = 0; j < N; j++ ) {
    if ( j == j0 )
    continue; // Пропускаем столбец j0
    aDop[iDop][jDop] = a[i][j];
    ++jDop;
    }
    ++iDop;
    }

    if ( (i0+j0) % 2 == 0 )
    return GetDet2( aDop );
    else
    return -GetDet2( aDop );

    }



    /*
    * Печать матрицы n x m
    */
    void PrintMatrix( double* x, // Адрес первого эл-та м-цы, которую нужно распечатать
    int n,  // К-во строк в м-це,
    int m    // К-во столбцов
    ) {

    int i;

    for (i = 0; i < n*m; i++ ) {
    printf( "%6.1g", x[i] );
    if ( (i+1) % m == 0 )
    printf( "\n" );
    }

    }


    int main() {

    int  i, j;
    double a[N][N] = {1., 2., 1.,
    3., -5., 3.,
    2., 7., -1. };
    double aM1[N][N]; // Обратная матрица
    double x[N];     // Решение
    double b[N] = {4., 1., 8.}; // Свободные члены
    double det = 0;         // Определитель исх. м-цы

    // Исходная матрица
    printf( "Исходная м-ца:\n" );
    PrintMatrix( &a[0][0], N, N );

    // Столбец свободных членов
    printf( "Столбец свободных членов:\n" );
    PrintMatrix( &b[0], N, 1 );

    // Определитель
    for ( j = 0; j < N; j++ )
    det = det + a[0][j]*GetAlgDop( a, 0, j );
    printf( "Det = %6.1g\n", det );
    if ( det == 0. ) {
    printf( "Вырожденная матрица к-тов!\n" );
    return -1;
    }

    // Обратная м-ца
    for ( i = 0; i < N; i++ )
    for ( j = 0; j < N; j++ )
    // Сразу и транспонируем
    aM1[j][i] = GetAlgDop( a, i, j ) / det;

    printf( "Обратная м-ца:\n" );
    PrintMatrix( &aM1[0][0], N, N );

    // Решение
    for ( i = 0; i < N; i++ ) {
    x[i] = 0.;
    for ( j = 0; j < N; j++ )
    x[i] = x[i] + aM1[i][j] * b[j];
    }

    printf( "Решение:\n" );
    PrintMatrix( &x[0], N, 1 );
    printf( "\n" );

    return 0;

    }
     
Загрузка...
Похожие Темы - Решить систему уравнений
  1. mrx13
    Ответов:
    8
    Просмотров:
    260
  2. kuklofon
    Ответов:
    9
    Просмотров:
    579
  3. GREED
    Ответов:
    1
    Просмотров:
    542
  4. Amfion
    Ответов:
    0
    Просмотров:
    428
  5. vovanabali
    Ответов:
    0
    Просмотров:
    536
Статус темы:
Закрыта.

Поделиться этой страницей