Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int razmer; //размер матрицы
- double **a, // матрица с коэфицентами
- *x, // х
- *b; // свободные члены
- /* Здесь переменной razmer необходимо присвоить размер матрицы */
- // создание динамических переменных
- b = new double[razmer];
- x = new double[razmer];
- a = new double*[razmer];
- for(int i=0; i < razmer; i++){
- a[i] = new double[razmer];
- }
- /* Здесь нам надо присвоить значения матрице а, и заполнить свободные члены b */
- // начинаем решать)
- // частный случай, если размер матрицы == 1
- if(razmer == 1){
- if(a[0][0] != 0){
- cout << "x=" << b[0]/a[0][0] << endl;
- }else{
- cout << "Х любое" << endl;
- }
- getch();
- exit(0);
- }
- // прямой проход
- // идем слево на право по коэфицентам х
- for(int k=0; k < razmer-1; k++){
- // вычитаем по строкам
- for(int m=k+1; m < razmer; m++){
- // если на диагонали элемент = 0, то поменяем местами строки
- if(a[m][m] == 0) exchange(a, razmer, m, get_n_no_empty(a, razmer, m));
- double koeficent=a[m][k]/a[0][k];
- //вычисление новых коэфицентов уравнения
- b[m] = b[m] - b[0] * koeficent;
- for(int z=0; z < razmer; z++){
- a[m][z] = a[m][k] - a[0][k] * koeficent;
- }
- }
- }
- // ищем решения
- for(int m=razmer-1; m >= 0; m--){
- double sum=0;
- // идем по строке спаво налево, считая сумму корень*коэфицент, до текущего корня
- for(int i=razmer-1; i > m; i--){
- sum += x[i] * a[m][i];
- }
- x[m] = (b[m] - sum)/a[m][m];
- }
- // вывод решений
- cout << "###Решения:" << endl;
- for(int i=0; i < razmer; i++){
- cout << "x[" << i << "]=" << x[i] << endl;
- }
- pause();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement