Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.86
AlexSun
18 / 16 / 1
Регистрация: 03.11.2010
Сообщений: 169
#1

Решить систему уравнений методом Крамера - C++

10.04.2011, 16:40. Просмотров 4021. Ответов 7
Метки нет (Все метки)

Не по теме:

Ненавижу математику!!!


Нужно написать программу на чистом C для решения системы уравнений методом Крамера.
Помню там нужно подставлять правый столбец (числа которые после знака равно) вместо каждого, находить определители и делить их на основной определитель, но его я умею искать только для матрицы 3 х 3 (треугольником).
Помогите найти готовый исходник для решения такой задачи или хотя бы для нахождения определителя любой матрицы.
Пока что пытаюсь переписать вот это Написать решение систем линейных уравнений методом Крамера с C++ на C, получается не очень.

Не по теме:

А еще я только что узнал что в C нету классов ^^

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2011, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решить систему уравнений методом Крамера (C++):

Решить систему уравнений матричным методом. - C++
Решить систему уравнений матричным методом.

Решить систему алгебраических уравнений методом Гаусса - C++
Решить систему алгебраических уравнений методом Гаусса: 6X1-X2-X3=11,33, -X1+6X2-X3=32, -X1-X2+6X3=42;

Решить систему линейных уравнений вида Ax=b методом Зейделя - C++
2)Решить систему линейных уравнений вида Ax=b методом Зейделя 6.9 0,0319 0,039 0,461 0,0191 6,0 0,0333 0,405 0,0134 0,0205 5,1...

Методом Гаусса решить систему n линейных алгебраических уравнений - C++
Помогите пожалуйста написать на с++ методом Гаусса решить систему n линейных алгебраических уравнений. Отсюда нашла именно ту тему там...

Вычисление корней системы уравнений методом Крамера - C++
Составить программу вычисления корней системы уравнений с двумя неизвестными методом Крамера. \left\{\begin{matrix} & & a1x+b1y=c1...

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

7
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
10.04.2011, 19:31 #2
Детерминант. Должен для любой матрицы считать, учитывает нули в нехороших местах (на диагонали):
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
double det(double **matrix, size_t dim)
{
    double **copy;
    double result = 1.0;
    int sign = 1;
    bool key = true;
 
    copy = new double *[dim];
 
    for (size_t i = 0; i < dim; ++i)
    {
        copy[i] = new double [dim];
 
        for (size_t j = 0; j < dim; ++j)
            copy[i][j] = matrix[i][j];
    }
 
    for (size_t k = 0; k < dim; ++k)
    {
        if (copy[k][k] == 0.0)
        {
            key = false;
 
            for (size_t i = k + 1; i < dim; ++i)
            {
                if (copy[i][k] != 0.0)
                {
                    key = true;
 
                    std::swap(copy[k], copy[i]);
 
                    sign *= -1;
 
                    break;
                }
            }
        }
 
        if (!key)
            return 0.0;
            
        for (size_t i = k + 1; i < dim; ++i)
        {
            double multi = copy[i][k] / copy[k][k];
 
            for (size_t j = 0; j < dim; ++j)
                copy[i][j] -= multi * copy[k][j];
        }
 
        result *= copy[k][k];
    }
 
    for (size_t i = 0; i < dim; ++i)
        delete [] copy[i];
 
    delete [] copy;
 
    return sign * result;
}
Добавлено через 34 секунды
Ах ты чёрт, на сях же надо... Ну ничего, думаю, вы сами переделаете выделение памяти...
0
AlexSun
18 / 16 / 1
Регистрация: 03.11.2010
Сообщений: 169
10.04.2011, 23:19  [ТС] #3
Какое выделение памяти? Что это?

Нужно на C...
0
Jupiter
Каратель
Эксперт С++
6564 / 3985 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.04.2011, 23:34 #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
62
#define true 1
#define false 0
typedef char bool;
double det(double **matrix, size_t dim)
{
    double **copy;
    double result = 1.0;
    int sign = 1;
    bool key = true;
 
    copy = (double**)malloc(sizeof(double*)*dim);
 
    for (size_t i = 0; i < dim; ++i)
    {
        copy[i] = (double*)malloc(sizeof(double)*dim);
 
        for (size_t j = 0; j < dim; ++j)
            copy[i][j] = matrix[i][j];
    }
 
    for (size_t k = 0; k < dim; ++k)
    {
        if (copy[k][k] == 0.0)
        {
            key = false;
 
            for (size_t i = k + 1; i < dim; ++i)
            {
                if (copy[i][k] != 0.0)
                {
                    key = true;
                    double* tmp = copy[k];
                    copy[k] = copy[i];
                    copy[i] = tmp;
                    sign *= -1;
 
                    break;
                }
            }
        }
 
        if (!key)
            return 0.0;
            
        for (size_t i = k + 1; i < dim; ++i)
        {
            double multi = copy[i][k] / copy[k][k];
 
            for (size_t j = 0; j < dim; ++j)
                copy[i][j] -= multi * copy[k][j];
        }
 
        result *= copy[k][k];
    }
 
    for (size_t i = 0; i < dim; ++i)
        free(copy[i]);
 
    free(copy);
 
    return sign * result;
}
0
asics
Freelance
Эксперт С++
2852 / 1787 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
10.04.2011, 23:35 #5
Цитата Сообщение от AlexSun Посмотреть сообщение
Нужно на C...
Цитата Сообщение от Maxwe11 Посмотреть сообщение
bool key = true;
Как бэ...
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
10.04.2011, 23:38 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Шок... Просто слов нет. Как вы ещё что-то там собирались с плюсов самостоятельно переписывать...
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
62
63
64
double det(double **matrix, unsigned dim)
{
    double **copy;
    double result = 1.0;
    int sign = 1;
    int key = 1;
    double *temp;
    double multi;
    unsigned i, j ,k;
 
    copy = (double **)malloc(dim * sizeof(double *));
 
    for (i = 0; i < dim; ++i)
    {
        copy[i] = (double *)malloc(dim * sizeof(double));
 
        for (j = 0; j < dim; ++j)
            copy[i][j] = matrix[i][j];
    }
 
    for (k = 0; k < dim; ++k)
    {
        if (copy[k][k] == 0.0)
        {
            key = 0;
 
            for (i = k + 1; i < dim; ++i)
            {
                if (copy[i][k] != 0.0)
                {
                    key = 1;
 
                    temp = copy[k];
                    copy[k] = copy[i];
                    copy[i] = temp;
 
                    sign *= -1;
 
                    break;
                }
            }
        }
 
        if (key == 0)
            return 0.0;
            
        for (i = k + 1; i < dim; ++i)
        {
            multi = copy[i][k] / copy[k][k];
 
            for (j = 0; j < dim; ++j)
                copy[i][j] -= multi * copy[k][j];
        }
 
        result *= copy[k][k];
    }
 
    for (i = 0; i < dim; ++i)
        free(copy[i]);
 
    free(copy);
 
    return sign * result;
}
Добавлено через 40 секунд
asics,
Цитата Сообщение от Maxwe11 Посмотреть сообщение
#define true 1
#define false 0
typedef char bool;
Как бэ)))

Добавлено через 1 минуту
Maxwe11, не заработает)))
double tmp = copy[k];
copy[k] - строка матрицы. Надо делать tmp типа double *.
3
asics
Freelance
Эксперт С++
2852 / 1787 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
10.04.2011, 23:39 #7
Цитата Сообщение от Maxwe11 Посмотреть сообщение
#define true 1
#define false 0
typedef char bool;
Извиняюсь, не заметил
0
AlexSun
18 / 16 / 1
Регистрация: 03.11.2010
Сообщений: 169
10.04.2011, 23:40  [ТС] #8
silent_1991, я просто раньше на PHP писал, там не нужно волноваться за память, за типы и так далее.
Теперь в Си все непривычно как-то

Осталось разобраться как оно работает (считает).
Как ей передавать матрицу? Каким массивом?
Что хранят переменная dim?
double **copy; // для копии?
double result = 1.0; // ну это понятно
int sign = 1; // знак? что за знак?
int key = 1; // ?
double *temp; // это тоже ясно
double multi; // ?
unsigned i, j ,k; // циклы
0
10.04.2011, 23:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2011, 23:40
Привет! Вот еще темы с ответами:

Решить систему уравнений - C++
Вот как то так,а дальше? #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;cmath&gt; #include &lt;math.h&gt; using namespace std; int...

Решить систему уравнений - C++
вот такая задачка....

Решить систему уравнений - C++
решить систему уравнений f(x)= 0 и f(x)=1/x+6 при x&lt;=1, else

Решить систему уравнений - C++
Помогите пожалуйста кому не сложно. Составить блок-схему и программу разветвляющейся структуры для вычисления заданной функции. ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.