Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 23:25   #1
AlinAA
 
Регистрация: 19.02.2009
Сообщений: 5
По умолчанию матрица программа на c

нахождение ранга матрицы язык 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

заранее спасибо
AlinAA вне форума Ответить с цитированием
Старый 24.03.2009, 03:40   #2
d9m0n
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 29
По умолчанию

уже сделал. icq:250018470
d9m0n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица СИ ++ Pasha9 Помощь студентам 5 16.03.2009 01:41
Матрица Chief Помощь студентам 1 30.01.2009 10:57
матрица Verochka Помощь студентам 3 23.11.2008 22:42