Форум программистов, компьютерный форум CyberForum.ru

решение матрицы методом крамера - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.88
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
26.10.2012, 06:17     решение матрицы методом крамера #1
доброго времени суток. Задали написать программу для решения матрицы методом крамера. Нашел уже готовый код тут на форуме но у него нету комментов, не могу понять саму программу что и когда где выполняется так частично только представляю ход ее выполнения. В программу уже подставил свои значения матрицы ответы совпали с тем что у меня получились когда в ручную ее решал. ну там небольшие расхождения, и еще проблема мне надо чтоб корни найденные были с точностью 10в -4 степени подскажите как исправить код чтоб так было? ну и комменты можите поставить кто под поймет где что и как выполняется в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
const int N = 3;
 
double det(int A[N][N])
{
    return A[0][0] * A[1][1] * A[2][2] +
           A[0][1] * A[1][2] * A[2][0] +
           A[1][0] * A[2][1] * A[0][2] -
           A[2][0] * A[1][1] * A[0][2] -
           A[1][0] * A[0][1] * A[2][2] -
           A[2][1] * A[1][2] * A[0][0];
}
 
int main()
{
    int A[N][N] =
    {
        160, 12, 60,
        40, 25, -330,
        30, 50, -110
    };
 
    int B[N] =
    {
        81,
        60,
        90
    };
 
    double X[N];
    int T[N][N];
 
    double detA;
    int n;
    int i, j;
 
    detA = det(A);
 
    for (n = 0; n < N; n++)
    {
        for (i = 0; i < N; i++)   //первая матрица
            for (j = 0; j < N; j++)
                T[i][j] = A[i][j];
 
        for (j = 0; j < N; j++)
            T[j][n] = B[j];
 
        X[n] = det(T) / detA;
    }
 
    for (i = 0; i < N; i++)
        cout << "X[" << i << "] = " << X[i] << "\t";
 
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 23 часа 26 минут
хелп ми плиз...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 06:17     решение матрицы методом крамера
Посмотрите здесь:

C++ Написать решение систем линейных уравнений методом Крамера
C++ Решение СЛАУ методом Крамера
Решить систему уравнений методом Крамера C++
C++ задача методом крамера (как проверить вход данные с++)
C++ Вычисление корней системы уравнений методом Крамера
Решение матрицы методом секущих C++
Решение СЛАУ методом обратной матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
27.10.2012, 06:33  [ТС]     решение матрицы методом крамера #2
комментарии не нужно, посдкажите как сделать чтоб корни выдавал с точностью 10 в -4 степени, тоесть 4 цифры после целого числа
remarkes
300 / 223 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
27.10.2012, 10:41     решение матрицы методом крамера #3
lexflax, тебе надо:
1. в функции
C++
1
double det(int A[N][N])
и в других местах сделать массивы с матрицами в тип double
2. в конце вместо
C++
1
cout << "X[" << i << "] = " << X[i] << "\t";
C++
1
printf("X[%d] = %.4f\t", i, X[i]);
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
27.10.2012, 14:22  [ТС]     решение матрицы методом крамера #4
все проще уже разобрался просто последнюю строчку надо было
C++
1
cout << "X[" << i+1 << "] = " <<fixed<<setprecision(4)<< X[i] << "\t";
remarkes
300 / 223 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
28.10.2012, 10:05     решение матрицы методом крамера #5
lexflax, когда у тебя элементы матрицы типа int у тебя точность страдает при приведении в double, да и с точки зрения кода - это некрасиво (неправильно): на входе целочисленные параметры (int), а на выходе double.
Т.е. в таком виде код у тебя выдает неправильные значения.
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
28.10.2012, 10:34  [ТС]     решение матрицы методом крамера #6
ну почему же? на входе да целые числа у меня, поэтому и стоит тип int, зачем я буду ставить дробный тип если они целые, а на выходе врезультате математических операций получаются дробные числа, поэтому и double
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 20:54     решение матрицы методом крамера
Еще ссылки по теме:

Утечка памяти (решение СЛАУ методом Крамера, матрицы, malloc) C++
C++ Решение системы линейных уравнений третьего порядка по правилу Крамера
C++ Решение уравнения методом половинного деления и методом итераций
C++ СЛАУ методом Крамера
C++ Решение матрицы 6х6 венгерским методом. (Эвристический способ)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
remarkes
300 / 223 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
28.10.2012, 20:54     решение матрицы методом крамера #7
lexflax, да... ты прав, в функции det у тебя дроби нет... тогда по идее и нет ей смысла возвращать значение типа double.
вообщем, я имел ввиду, что криво с точки зрения архитектуры: у тебя в функции целые числа вычисляются, результат тоже целый, а возвращает функция почему-то double. Логика как бы ясна - для приведения типов. Но так не делается.
"Как бы все сходится", но это неправильно с точки зрения ясности кода.
Yandex
Объявления
28.10.2012, 20:54     решение матрицы методом крамера
Ответ Создать тему
Опции темы

Текущее время: 11:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru