Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Иллюстрирующий пример ⇐ ПредыдущаяСтр 2 из 2
Пусть дана система уравнений
или в матричной форме
Выбираем строку с максимальным коэффициентом ai1 и меняем ее с первой.
Вычитаем 1 уравнение из 2 и 3:
Выбираем строку с наибольшим коэффициентом при ai2 (уравнение 1 не рассматривается) и перемещаем ее на место 2.
Нормируем 2 и 3 уравнения относительно коэффициента при x2
Вычитаем уравнение 2 из 3
Нормируем уравнение 3 относительно коэффициента при x3
Откуда получаем x3 =2. Подставляем полученное значение в уравнения 2 и 1 получаем
Подставляя полученное значение x2 =5 в уравнение 1, найдем
Таким образом, решением системы уравнений будет вектор
Блок схема:
Код программы: #include <iostream> for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++){ cout << a[i][j] << "*x" << j; if (j < n - 1) { cout << " + "; } } cout << " = " << y[i] << endl; } return; double * gauss(double **a, double *y, int n) { double *x, max; int k, index; const double eps = 0.00001; // точность x = new double[n]; k = 0; while (k < n) { // Поиск строки с максимальным a[i][k] max = abs(a[k][k]); index = k; for (int i = k + 1; i < n; i++) { if (abs(a[i][k]) > max) { max = a[i][k]; index = i; } } // Перестановка строк if (max < eps) { // нет ненулевых диагональных элементов cout << "Решение получить невозможно из-за нулевого столбца "; cout << index << "матрицы A" << endl; return 0; } for (int j = 0; j < n; j++) { double temp = a[k][j]; a[k][j] = a[index][j]; a[index][j] = temp; temp = y[k]; y[k] = y[index]; y[index] = temp; } // Нормализация уравнений for (int i = k; i < n; i++) { double temp = a[i][k]; if (temp < eps) continue; // для нулевого коэффициента пропустить
for (int j = 0; j < n; j++) { a[i][j] = a[i][j] / temp; } y[i] = y[i] / temp; if (i == k) continue; // уравнение не вычитать само из себя for (int j = 0; j < n; j++) { a[i][j] = a[i][j] - a[k][j]; } y[i] = y[i] - y[k]; } k++; } // обратная подстановка for (k = n - 1; k >= 0; k--) { x[k] = y[k]; for (int i = 0; i < k; i++) { y[i] = y[i] - a[i][k] * x[k]; } } return x; int main() { double **a, *y, *x; int n; system("chcp 1251"); system("cls"); cout << "Введите количество уравнений: "; cin >> n; a = new double*[n]; y = new double[n]; for (int i = 0; i < n; i++) { a[i] = new double[n]; for (int j = 0; j < n; j++) { cout << "a[" << i << "][" << j << "]= "; cin >> a[i][j]; } } for (int i = 0; i < n; i++) { cout << "y[" << i << "]= "; cin >> y[i]; } sysout(a, y, n); x = gauss(a, y, n); for (int i = 0; i < n; i++){ cout << "x[" << i << "]=" << x[i] << endl; } cin.get(); cin.get(); return 0;
|