|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.12.2012, 00:00 | #1 |
Новичок
Джуниор
Регистрация: 24.12.2012
Сообщений: 3
|
Не работает метод Гаусса
Здравствуйте. Извините за беспокойство, но не могли бы разъяснить, почему программа не работает?
Всё работает как надо. Только программа выдаёт нулевой результат. Я думаю, ошибка в самом методе Гаусса с переменными. Программа компилируется без ошибок. Введённая матрица размера m=3, её элементы: 2 -3 6 5 8 -9 1 1 7 Столбец свободных членов: 4 5 8 Код: [C] FILE *f; int m, i, j; int **matrix; f = fopen("input.txt", "r"); if (!f) exit(1); fscanf(f, "%d", &m); matrix = (int**)calloc (m, sizeof(int*)); if (matrix == NULL) exit(2); for (i=0; i < m; i++) { matrix[i] = (int*)calloc (m+1, sizeof(int)); if (matrix[i] == NULL) exit(2); for (j=0; j < m && fscanf(f, "%d", &matrix[i][j]); j++) printf("%d ", matrix[i][j]); printf("\n"); } for(int pp=0; pp < m; pp++) fscanf(f, "%d", &matrix[pp][m+1]); // Печать расширенной матрицы системы printf("Rashirennaya matritsa sistemi imeet vid:\n"); for (i = 0; i < m; i++) { for(j=0;j<m;j++) printf("%d ",matrix[i][j]); printf("= %d \n",matrix[i][m+1]); } //Прямой ход метода Гаусса //1.Поиск ведущего элемента for(k=0;k<m;k++) { im=k;am=fabs(a[k][k]); for(l=k;l<m;l++) if(fabs(a[l][k])>am) { im=l;am=fabs(a[l][k]); } //2. Ведущий элемент найден. Переставляем строки for(j=0;j<=m+1;j++) { p=matrix[k][j]; matrix[k][j]=matrix[im][j]; matrix[im][j]=p; } //3.Исключаем k-е неизвестное из уравнений с номерами, большими k for(i=k+1;i<m;i++) { p=matrix[i][k]/matrix[k][k]; for(j=k+1;j<m+1;j++) matrix[i][j]-=p*matrix[k][j]; } } //Обратный ход метода Гаусса for(k=m;k;k--) { for(j=k+1;j<m;j++) matrix[k][m+1]-=matrix[k][j]*matrix[j][m+1]; } //Вывод результатов printf("Reshenie sistemi:\n"); for(i=0;i<m;i++) printf("%10.4f",matrix[i][m+1]); return 0; } [/C] |
25.12.2012, 00:47 | #2 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 639
|
Код:
ICQ: 677936656 Gmail: ekEmbed@gmail.com
|
25.12.2012, 01:44 | #3 |
Новичок
Джуниор
Регистрация: 24.12.2012
Сообщений: 3
|
Т.е., что мне нужно сделать?
|
25.12.2012, 02:06 | #4 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 639
|
1. Осознать, что в ходе метода в матрице могут появится нецелые элеметы - матрица должна быть не целая.
2. Если р будет целым, то результат обрежится - р тоже должна быть не целой. По-моему, это простейшая логика...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
|
25.12.2012, 02:22 | #5 |
Новичок
Джуниор
Регистрация: 24.12.2012
Сообщений: 3
|
Я имела ввиду, как мне это в коде реализовать?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
метод простых операций и метод гаусса зейделя | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 23.09.2012 14:46 |
Метод Гаусса | TMTGamer | Visual C++ | 4 | 25.12.2011 15:02 |
метод Гаусса | aank10 | Общие вопросы C/C++ | 0 | 22.06.2011 16:25 |
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. | Хомяк!!!!! | Помощь студентам | 4 | 08.07.2009 10:08 |