Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/68: Рейтинг темы: голосов - 68, средняя оценка - 4.76
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89

Коэффициенты системы линейных уравнений

25.03.2010, 19:51. Показов 12521. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.

Очень прошу, помогите понять задачу. Я не могу понять алгоритма решения этой задачи..((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2010, 19:51
Ответы с готовыми решениями:

Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы
#include <iostream> #include <conio.h> using namespace std; void scan( float **a, int n,int m) { for (int i=0;i<n;i++) ...

Алгоритм вычисления фундаментальной системы решений системы линейных уравнений над полем Z2
Помогите написать программу на С++. Задача: разработать и запрограммировать алгоритм вычисления фундаментальной системы решений системы...

Решение системы линейных уравнений.
\begin{cases} & \text{ } cos(ax+2)...... x>2 \\ & \text{ } tg |x-2a| .... .. x\leq 2 \end{cases} x а h по а = 0.2 ...

3
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.03.2010, 20:17
Преобразование матрицы к треугольному виду (для квадратной) или к трапециевидному (для прямоугольной) производится с помощью прямого хода метода Гаусса. Пусть применяется метод Гаусса без выбора ведущего элемента.
Алгоритм такой.
На i-том шаге непреобразованный столбец матрицы A - это часть столбца i, начиная с элемента a[i][i] (т.е. начиная с элемента главной диагонали для квадратной матрицы). Если a[i][i] равен нулю, то тебе нужно перестановкой строк добиться того, чтобы первый элемент непреобразованного столбца не равнялся нулю. Если все элементы непреобразованного столбца равны нулю, то переходишь к следующему столбцу, в противном случае обнуляешь остальные элементы непреобразованного столбца (делишь строку, которая содержит a[i][i] на a[i][i], умножаешь на элемент, который хочешь обнулить, и отнимаешь эту строку от строки, которая содержит элемент, который ты хочешь обнулить).
А вообще, если ты на вышке решал системы методом Гаусса, то тебе должен быть понятен алгоритм
1
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
26.03.2010, 10:54  [ТС]
Nameless One, а можно хотя бы фрагмент программы?
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
26.03.2010, 11:05
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <cmath>
 
void quit()
{
    std::cout << "Матрица системы - вырожденная" << std::endl;
    exit(EXIT_SUCCESS);
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    const size_t size=4;
    double A1[size][size];
    double B1[size];
    //Матрица системы
    double A[size][size]={ 
        {6.1, 6.2, -6.3, 6.4},
        {1.1, -1.5, 2.2, -3.8},
        {5.1, -5, 4.9, -4.8},
        {1.8, 1.9, 2, -2.1}};
 
    //Вектор, определяющий правую часть с-мы
    double B[size]={6.5, 1.2, 4.7, 2.2};
    //Число перестановок строк
    size_t rCnt=0;
    //Ведущий элемент
    double ldn;
    //Номер ведущего элемента
    size_t index;
    //Неизвестные корни
    double x[size];
    //Вектор невязки
    double r[size]={0, 0, 0, 0};
    //Вспомогательный вектор
    double asv[size]={0, 0, 0, 0};
    //Определитель
    double det;
 
    //Копирование исходных массивов
    for(size_t i=0; i<size; ++i)
    {
        for(size_t j=0; j<size; ++j)
            A1[i][j]=A[i][j];
        B1[i]=B[i];
    }
 
    //Прямой ход
    for(size_t j=0; j<size-1; ++j)
    {
        //Выбор ведущего элемента столбца
        ldn=fabs(A[j][j]);
        index=j;
        for(size_t i=j; i<size; ++i)
            if(fabs(A[i][j])>ldn)
            {
                ldn=fabs(A[i][j]);
                index=i;
            }
        //Если ведущий элемент равен нулю
        if(!ldn)
            quit();//Выход
 
        //Если ведущий элемент - не на гл. диагонали
        //меняем строки местами
        if(index!=j)
        {
            ++rCnt;
            double temp=B[j];
            B[j]=B[index];
            B[index]=temp;
            for(size_t i=0; i<size; ++i)
            {
                temp=A[j][i];
                A[j][i]=A[index][i];
                A[index][i]=temp;
            }
        }
        //Обнуление элементов ниже гл. диагонали
        for(size_t i=j+1; i<size; ++i)
        {
            double coeff=-(A[i][j]/A[j][j]);
            for(size_t k=j+1; k<size; ++k)
                A[i][k]=A[i][k]+A[j][k]*coeff;
            B[i]=B[i]+B[j]*coeff;
        }
    }
 
    det=1;
    //Подсчет определителя матрицы
    for(size_t i=0; i<size; i++)
        det*=A[i][i];
    det*=(rCnt%2)? (-1) : 1;
 
    //Обратная подстановка
    for(int j=size-1; j>=0; --j)
    {
        x[j]=B[j]/A[j][j];
        if(j!=3)
            for(int i=size-1; i>j; --i)
                x[j]=x[j]-A[j][i]*x[i]/A[j][j];
    }
 
    //Вычисление вектора невязки
    for(size_t i=0; i<size; ++i)
    {
        //Вычисление вспомогательного вектора
        for(size_t j=0; j<size; ++j)
            asv[i]+=x[j]*A1[i][j];
        r[i]=B1[i]-asv[i];
    }
 
    //Вывод значений
    std::cout << "\tРешение системы линейных уравнений методом Гаусса"
                 "\n\tс частичным выбором ведущего элемента"
                 "\n\nРешение системы:" << std::endl;
    for(size_t i=0; i<size; ++i, std::cout << std::endl)
        std::cout << "x[" << i << "]=" << x[i];
    std::cout << "\nОпределитель равен " << det
              << "\n\nВектор невязки:" << std::endl;   
    for(size_t i=0; i<size; ++i, std::cout << std::endl)
        std::cout << "r[" << i << "]=" << r[i];
 
    system("pause");
    return EXIT_SUCCESS;
}
Программа решает систему линейных уравнений методом Гаусса с частичным выбором ведущего элемента, вычисляет определитель матрицы и вектор невязки. Ведущий элемент при частичном выборе - это максимальный по модулю элемент в непреобразованном столбце. Если ведущий элемент - не A[i][i], то перестановкой строк помещаем его в A[i][i]. Интересующий тебя здесь фрагмент (строки 50-88) - прямой ход метода (именно с его помощью матрица приводится к треугольному виду).
ЗЫ. Выбор ведущего элемента можешь опустить
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2010, 11:05
Помогаю со студенческими работами здесь

Массивы. Системы линейных уравнений
Нужна помощь с решение этой задачи с применением двумерного массива. Можно у кого что похожее есть\было? Не понимаю вообще как это...

Решение системы линейных уравнений
Не могу сделать прогу на С++. Кто сделает - огромное спасибо. Решить систему линейных уравнений 3x-5y+2z=2, 3x-7y+2z=0, x+5y-4z=-2

Решение системы линейных уравнений
Компилятор wxDev-c++. Ошибка:C:\Program Files\Dev-Cpp\çàäà÷è\ãëàâà1\Ïåðâàÿ çàäà÷à\Makefile.win Error 1 #include &lt;cstdlib&gt; ...

Решение системы линейных уравнений
Помогите решить на Си

Найти решение системы линейных уравнений
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что a1b2-a2b1 0.0001 и если верно, то найти решение системы...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru