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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.76
Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
#1

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

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

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

Очень прошу, помогите понять задачу. Я не могу понять алгоритма решения этой задачи..((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2010, 19:51     Коэффициенты системы линейных уравнений
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
25.03.2010, 20:17     Коэффициенты системы линейных уравнений #2
Преобразование матрицы к треугольному виду (для квадратной) или к трапециевидному (для прямоугольной) производится с помощью прямого хода метода Гаусса. Пусть применяется метод Гаусса без выбора ведущего элемента.
Алгоритм такой.
На i-том шаге непреобразованный столбец матрицы A - это часть столбца i, начиная с элемента a[i][i] (т.е. начиная с элемента главной диагонали для квадратной матрицы). Если a[i][i] равен нулю, то тебе нужно перестановкой строк добиться того, чтобы первый элемент непреобразованного столбца не равнялся нулю. Если все элементы непреобразованного столбца равны нулю, то переходишь к следующему столбцу, в противном случае обнуляешь остальные элементы непреобразованного столбца (делишь строку, которая содержит a[i][i] на a[i][i], умножаешь на элемент, который хочешь обнулить, и отнимаешь эту строку от строки, которая содержит элемент, который ты хочешь обнулить).
А вообще, если ты на вышке решал системы методом Гаусса, то тебе должен быть понятен алгоритм
Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
26.03.2010, 10:54  [ТС]     Коэффициенты системы линейных уравнений #3
Nameless One, а можно хотя бы фрагмент программы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2010, 11:05     Коэффициенты системы линейных уравнений
Еще ссылки по теме:

Численное решение системы линейных уравнений - C++
Решить систему линейных уравнений: -сформировать матрицу А коэффициентов и матрицу В правых частей (матрицы должны быть размещены в...

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

Системы линейных уравнений методом Гаусса - C++
День(ночь, утро, вечер) добрый(-ая, -ое) вопрос про метод Гаусса, как его реализовать на С++??? что-то совсем запутался... вот что...

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

Найти решение системы линейных уравнений - C++
привет всем, пожалуста помогите составить программу или испроваить ошибки в моей условие задачи даны действительные числа a,b,c,d,e,f....

Найти решение системы линейных уравнений - C++
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что |a1*b2-a2*b1|>=0.0001, и если верно, то найти решение системы...


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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
26.03.2010, 11:05     Коэффициенты системы линейных уравнений #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
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) - прямой ход метода (именно с его помощью матрица приводится к треугольному виду).
ЗЫ. Выбор ведущего элемента можешь опустить
Yandex
Объявления
26.03.2010, 11:05     Коэффициенты системы линейных уравнений
Ответ Создать тему
Опции темы

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