0 / 0 / 0
Регистрация: 28.09.2012
Сообщений: 6
1

Написать программу которая находит решение СЛАУ методом Гаусса

28.09.2012, 23:48. Показов 2611. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите найти ошибку в коде.
Нужно написать программу которая находит решение СЛАУ методом Гаусса.
Получаются неверные ответы.

Блок-схема:

Написать программу которая находит решение СЛАУ методом Гаусса


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
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define N 5
#define Q -2.23
#define D 2
 
int main()
{
  double a[5][5]={Q, 1, 0, 0, 0,     //исходная матрица
                   1, -2, 1, 0, 0,
                   0, 1, -2, 1, 0,
                   0, 0, 1, -2, 1,
                   0, 0, 0, 1, Q};
 
   double b[5]={0, D, D, D, 0};    //вектор свободных коофициэнтов
   double x[5]={0};
   double k, m, p, j, i;  //счётчики
   double r, c, s;
 
   for(k=0;k<N-1;k++)
      {
       p=k;
       //printf("%f\n\n", p);
          //printf("k=%f\n\n", k);
       for(m=k+1;m<N;m++)
          {
           //printf("%f and %f\n\n", a[p][k], a[m][k]);
         // printf("m=%f\n\n",m );
           if(fabs(a[p][k])<fabs(a[m][k]))
              {
               p=m;
               //printf("%f and %f\n\n", a[p][k], a[m][k]);
              }
          }
 
       for(j=k;j<N;j++)
          {
           //printf("j=%f\n\n", j);
           r=a[k][j];
           //printf("%f\n\n", a[k][j]);
           a[k][j]=a[p][j];
           //printf("%f\n\n", a[p][j]);
           a[p][j]=r;
          }
 
      /*printf("\n\n\n\n");
      for(i=0;i<n;i++)
         {
         printf("\n");
         for(j=0;j<n;j++)
            {
             printf("%10f", a[i][j]);
            }
          }*/
 
 
       r=b[k];
       b[k]=b[p];
       b[p]=r;
      /* printf("\n\n\n");
       for(i=0;i<n;i++)
          printf("%10f", b[i]); */
 
       for(m=k+1;m<N;m++)
          {
           c=a[m][k]/a[k][k];
          // printf("c=%10f\n", c);
           b[m]=b[m]-c*b[k];
 
           for(i=k;i<N;i++)
              {
               a[m][i]-=c*a[k][i];
              }
          }
        }
      x[N-1]=b[N-1]/a[N-1][m-1];
 
      for(k=N-2;k!=0;k--)
         {
          s=0;
 
          for(i=k-1;i<N-1;i++)
             {
              s=s+a[k][i]*x[i];
             }
 
          x[k]=(b[k]-s)/a[k][k];
         }
    //printf("s=%f", s);
    printf("\n\n\n");
   for(i=0;i<N;i++)
      printf("%f  ", x[i]);
 
   getch();
   return 0;
}
Судя по онлайн решению ответы должны быть такими.
x 1 = -4.5
x 2 = -9
x 3 = -10.5
x 4 = -9
x 5 = -4.5
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2012, 23:48
Ответы с готовыми решениями:

Решение СЛАУ методом Гаусса
Задание 7. Алгоритм Гаусса. Реализовать алгоритм решения СЛАУ методом Гаусса. Ограничения:...

Решение СЛАУ методом Гаусса
помогите, пожалуйста! надо создать программу, которая считает систему линейных уравнений методом...

Решение СЛАУ методом Гаусса для 3 уравнений с 2-мя неизвестными
Нужно создать функцию для решения СЛАУ методом Гаусса для 3 уравнений с 2-мя неизвестными ...

Решение СЛАУ методом гаусса с помощью матрицы вращения
помогите пожалуйста!!!!!!!!!напишите кто нибудь программу матод гаусса решения слу с помощью...

1
7 / 7 / 1
Регистрация: 23.03.2012
Сообщений: 40
29.09.2012, 11:01 2
Доброго времени суток!!! Вот имеется рабочий вариант, но на C++. Также реализован ввод матрицы динамически.

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
#include<iostream>
#include <math.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
   int i, j, n, m;
//создаем массив
   cout << "введи число уравнений: ";
         cin >> n;
         cout << "введи число неизвестных: ";
         cin >> m;
         m+=1;
    float **matrix = new float *[n];
         for (i=0; i<n; i++)
             matrix[i] = new float [m];
 
//инициализируем
 
    for (i = 0; i<n; i++)
 
        for (j = 0; j<m; j++)
        {
            cout << "Элемент " << "[" << i+1 << " , " << j+1 << "]: "  ;
 
            cin >> matrix[i][j];
}
 
 //выводим массив
    cout << "matrix: " << endl;
      for (i=0; i<n; i++)
       {
          for (j=0; j<m; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
       }
    cout << endl;
 
//Метод Гаусса
//Прямой ход, приведение к верхнетреугольному виду
    float  tmp, xx[m];
    int k;
 
    for (i=0; i<n; i++)
     {
       tmp=matrix[i][i];
         for (j=n;j>=i;j--)
             matrix[i][j]/=tmp;
           for (j=i+1;j<n;j++)
          {
             tmp=matrix[j][i];
               for (k=n;k>=i;k--)
             matrix[j][k]-=tmp*matrix[i][k];
          }
      }
  /*обратный ход*/
    xx[n-1] = matrix[n-1][n];
     for (i=n-2; i>=0; i--)
       {
           xx[i] = matrix[i][n];
           for (j=i+1;j<n;j++) xx[i]-=matrix[i][j]*xx[j];
       }
 
//Выводим решения
       for (i=0; i<n; i++)
           cout << xx[i] << " ";
       cout << endl;
 
    delete[] matrix;
 
   return 0;
}
Добавлено через 26 минут
И некоторые замечания по Вашему коду. Ошибки искать проще если код достаточно понятно комментирован.
Хотя бы просто по блокам, что тот или иной блок делает.
0
29.09.2012, 11:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2012, 11:01
Помогаю со студенческими работами здесь

Вылетает borland при решение СЛАУ методом Гаусса.
Написал программу по алгоритму(приложен к теме), но при запуске borland вылетает. :( Помогите,...

Разработать программу для решения СЛАУ методом Гаусса
Разработать программу для решения СЛАУ методом Гаусса есть код, но во первых он не работает во...

Решение СЛАУ методом Зейделя (Гаусса-Зейделя) с заданной матрицей
ребята, помогите написать на си, решение слау методом Зейделя(Гаусса-Зейделя) с заданной матрицей

Написать программу которая находит максимум a, b и c
помогите написать программу которая находит максимум a, b и c.Спасибо


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru