11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

Решение матрицы методом Крамера

26.10.2012, 06:17. Показов 6921. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго времени суток. Задали написать программу для решения матрицы методом крамера. Нашел уже готовый код тут на форуме но у него нету комментов, не могу понять саму программу что и когда где выполняется так частично только представляю ход ее выполнения. В программу уже подставил свои значения матрицы ответы совпали с тем что у меня получились когда в ручную ее решал. ну там небольшие расхождения, и еще проблема мне надо чтоб корни найденные были с точностью 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 минут
хелп ми плиз...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2012, 06:17
Ответы с готовыми решениями:

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

Решение СЛАУ методом Крамера
Доброго времени суток! Пишу курсовую по методу Крамера. Вроде ничего сложного, но...

Решение СЛАУ методом Крамера
последняя надежда на помощь в этом форуме((( n = 8

Решение системы линейных уравнений методом Крамера
Написать программу решения системы линейных уравнений методом Крамера. Количество переменных до 20....

6
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
27.10.2012, 06:33  [ТС] 2
комментарии не нужно, посдкажите как сделать чтоб корни выдавал с точностью 10 в -4 степени, тоесть 4 цифры после целого числа
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 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]);
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
27.10.2012, 14:22  [ТС] 4
все проще уже разобрался просто последнюю строчку надо было
C++
1
cout << "X[" << i+1 << "] = " <<fixed<<setprecision(4)<< X[i] << "\t";
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
28.10.2012, 10:05 5
lexflax, когда у тебя элементы матрицы типа int у тебя точность страдает при приведении в double, да и с точки зрения кода - это некрасиво (неправильно): на входе целочисленные параметры (int), а на выходе double.
Т.е. в таком виде код у тебя выдает неправильные значения.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
28.10.2012, 10:34  [ТС] 6
ну почему же? на входе да целые числа у меня, поэтому и стоит тип int, зачем я буду ставить дробный тип если они целые, а на выходе врезультате математических операций получаются дробные числа, поэтому и double
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
28.10.2012, 20:54 7
lexflax, да... ты прав, в функции det у тебя дроби нет... тогда по идее и нет ей смысла возвращать значение типа double.
вообщем, я имел ввиду, что криво с точки зрения архитектуры: у тебя в функции целые числа вычисляются, результат тоже целый, а возвращает функция почему-то double. Логика как бы ясна - для приведения типов. Но так не делается.
"Как бы все сходится", но это неправильно с точки зрения ясности кода.
0
28.10.2012, 20:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2012, 20:54
Помогаю со студенческими работами здесь

Написать решение систем линейных уравнений методом Крамера
Требуеться написать решение систем линейных уравнений методом крамера. Входные данные беруться с...

Решение матрицы методом секущих
Ух, ребятки, проблема назрела. Мне нужно решить матрицу методом секущих. Как я понимаю, для этого...

Решение СЛАУ методом обратной матрицы
Может кто-нибудь кинуть код програмы &quot;Решение СЛАУ методом обратной матрицы&quot;? Алгоритм должен...

Решение матрицы, СЛАР С++ методом простых итераций
такое задание нужно по скрину который я прикреплю ниже с маткада сделать программу, На вход...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru