Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

программа каторая решает системы линейных уравнений

1.8K
03 декабря 2006 года
dEBuch
95 / / 21.10.2005
Мне нужно написать программку каторая решает системы линейных уравнений. Но не пойму как найти обратную матрицу A^-1. Поидее
А^1=Ap/|A|.
|A| - определитель матрицы A.
Ap - Матрица эл. которой яв. алгебраическим дополнением эл. матрицы At.
At - транспонированая матрица.
Так вот в чем проблема. Как разделить матрицу на число, я что-то пропустил. Как умножить на число знаю, каждый эл. умножить на число. А делить как? Так же?
PS
Я не знаю где создать эту тему, решил здесь. Плизз не сносите быстро так или переместите куда нужно.
63
03 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Есть и другой способ нахождения обратной матрицы. Вот я как-то такое делал, система 3*3, решение методом Гаусса, может пригодится. Неотлаженную, но логика вроде верная, просьба за глюки по почкам не бить;) Сам алгоритм, последовательное отделение переменных получением нижней диагональной матрицы, поставь и посмори промеж. выводы.
Код:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;

    long double matrix[3][7];
   
    // end of init
    void dbg()
    {
    for(int i = 0; i < 3; i++)
    {
        for(int j  = 3; j < 6; j++)
        {  
            cout.width(9);
            cout <<fixed << setprecision(4) << right <<  matrix[j] << "  ";
        }
        cout << endl << endl;
    }
   
    }
   
int main()
{
    //1 string
    matrix[0][0] = 3.75;
    matrix[0][1] = -0.28;
    matrix[0][2] = 0.17;
    matrix[0][3] = 1;
    matrix[0][4] = 0;
    matrix[0][5] = 0;
    matrix[0][6] = 0.75;
    //2 string
    matrix[1][0] = 2.11;
    matrix[1][1] = -0.11;
    matrix[1][2] = -0.12;
    matrix[1][3] = 0;
    matrix[1][4] = 1;
    matrix[1][5] = 0;
    matrix[1][6] = 1.11;
    //3 string
    matrix[2][0] = 0.22;
    matrix[2][1] = -3.17;
    matrix[2][2] = 1.81;
    matrix[2][3] = 0;
    matrix[2][4] = 0;
    matrix[2][5] = 1;
    matrix[2][6] = 0.05;
   
    for(int i = 1; i < 3; i++)
    {
        for(int j = 1; j < 7; j++)
        {
            matrix[j] -= matrix[0][j] / (matrix[0][0] / matrix[0]);
        }
    }
    matrix[1][0] = 0;
    matrix[2][0] = 0;
    for(int j = 2; j < 7; j++)
    {
        matrix[2][j] -= matrix[1][j] / (matrix[1][1] / matrix[2][1]);
    }
    matrix[2][1] = 0;
   
    long double det = matrix[0][0] * matrix[1][1] *matrix[2][2];
    cout << "Det = " <<  det << endl;
    for(int j = 3; j  <7; j++)
    {
        matrix[2][j] /= matrix[2][2];
    }
    matrix[2][2] = 1;
    for(int i =0; i < 2;i++)
    {
        for(int j = 6; j > 1 ; j--)
        {
            matrix[j] -= matrix[2][j] / (matrix[2][2] / matrix[2]);
        }
    }
   
    for(int j = 2; j  <7; j++)
    {
        matrix[1][j] /= matrix[1][1];
    }
    matrix[1][1] = 1;
    for(int j = 6; j >0 ; j-- )
    {
        matrix[0][j] -= matrix[1][j] / (matrix[1][1] / matrix[0][1]);
    }
    for(int j = 1; j  <7; j++)
    {
        matrix[0][j] /= matrix[0][0];
    }
    matrix[0][0] = 1;
    cout << "Obr matriza" << endl << endl;
    dbg();
    cout << "Otvet [" << matrix[0][6] <<" , " << matrix[1][6] << " , " << matrix[2][6] << "]" ;
    return EXIT_SUCCESS;
}

PS - тут кстати, уже есть такая тема..
274
03 декабря 2006 года
Lone Wolf
1.3K / / 26.11.2006
хм...я отом же говорю метод гауса, и вперед. кстати его же используй для нахождения обратной матрицы
242
04 декабря 2006 года
Оlga
2.2K / / 04.02.2006
посмотри здесь:
http://alglib.sources.ru/matrixops/
1.8K
05 декабря 2006 года
dEBuch
95 / / 21.10.2005
Люди помогите написать функцию вычисления Минора M эл. a.
Это нужно вычеркнуть строку и столбец по i j из предыдушей матрицы и найти определитель (n-1)-го порядка. Определитель матрицы найти не проблема, т.к. функцию уже написал, а вот как найти минор и у меня получилась рекурсия, тоесть из функции определителя вызывается функция минора. Короче осталось написать функцию вычисления минора. Может нужно создать новую кв. матрицу(масив)(n-1)го порядка и в него вписать нужные эл., больше ничего в голову не пришло. Плизз помогите.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог