![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 19.02.2009
Сообщений: 5
|
![]()
нахождение ранга матрицы язык C
Задачи на работу с матрицами и метод Гаусса. Программа решения задачи должна состоять из двух файлов: файл с функциями, решающими поставленную задачу, и файл с функциями формирования матриц и вывода ответа. Формирование данных задачи(матрицы) выполняется а)вводом из файла; б)вычислением по заданным формулам a(ij)=max(ij)+1; Задачу выполнить в двух вариантах представления матрицы: а)как единого массива для всех элементов матрицы (функция получает аргумент double *matr) б)как набор массивов-строк с массивом указателей на каждую строку (функция получает аргумент double **matr) задача:найти ранг матрицы размера N*M нахождения ранга методом гаусс вроде понятен.на лекции был. проверьте,пожалуйста Код: // Приведение вещественной матрицы // к ступенчатому виду методом Гаусса с выбором // максимального разрешающего элемента в столбце. // Функция возвращает ранг матрицы int gaussMethod( int m, // Число строк матрицы int n, // Число столбцов матрицы double *a, // Адрес массива элементов матрицы double eps // Точность вычислений ) { int i, j, k, l; double r; i = 0; j = 0; while (i < m && j < n) { // Инвариант: минор матрицы в столбцах 0..j-1 // уже приведен к ступенчатому виду, и строка // с индексом i-1 содержит ненулевой эл-т // в столбце с номером, меньшим чем j // Ищем максимальный элемент в j-м столбце, // начиная с i-й строки r = 0.0; for (k = i; k < m; ++k) { if (fabs(a[k*n + j]) > r) { l = k; // Запомним номер строки r = fabs(a[k*n + j]); // и макс. эл-т } } if (r <= eps) { // Все элементы j-го столбца по абсолютной // величине не превосходят eps. // Обнулим столбец, начиная с i-й строки for (k = i; k < m; ++k) { a[k*n + j] = 0.0; } ++j; // Увеличим индекс столбца continue; // Переходим к следующей итерации } if (l != i) { // Меняем местами i-ю и l-ю строки for (k = j; k < n; ++k) { r = a[i*n + k]; a[i*n + k] = a[l*n + k]; a[l*n + k] = (-r); // Меняем знак строки } } // Утверждение: fabs(a[i*n + k]) > eps // Обнуляем j-й столбец, начиная со строки i+1, // применяя элем. преобразования второго рода for (k = i+1; k < m; ++k) { r = (-a[k*n + j] / a[i*n + j]); // К k-й строке прибавляем i-ю, умноженную на r a[k*n + j] = 0.0; for (l = j+1; l < n; ++l) { a[k*n + l] += r * a[i*n + l]; } } ++i; ++j; // Переходим к следующему минору } return i; // Возвращаем число ненулевых строк } есть проблема с написанием вывода и представления матрицы.. пожалуйста,помогите написать второй файл программы,содержащий main и прототипы функций из первого.. выведен должен быть ранг,норма матрицы и время.. сроки:хотелось бы числа до 29. оплата 200 мыло Angelnet06@yandex.ru заранее спасибо |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 03.03.2009
Сообщений: 29
|
![]()
уже сделал. icq:250018470
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Матрица СИ ++ | Pasha9 | Помощь студентам | 5 | 16.03.2009 01:41 |
Матрица | Chief | Помощь студентам | 1 | 30.01.2009 10:57 |
матрица | Verochka | Помощь студентам | 3 | 23.11.2008 22:42 |