Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98

паралелльное определение детерминанта

10.04.2012, 23:37. Показов 1256. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вроде как полно в интернете как найти определитель, но не как пойму как же все это реализовать. Буду очень рад за готовый код ))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2012, 23:37
Ответы с готовыми решениями:

Паралелльное обновление нескольких JLabel
Добрый вечер! Пишу простой загрузчик файлов на JAVA. Программа принимает url и скачивает файл из интернета. Программа должна быть...

Нахождения детерминанта
Это функция для нахождения детерминанта 3 степени - double thre(double a,double x,double c,double a1,double x1,double c1,double...

Вычисление детерминанта
Вычислить определитель матрицы, пользуясь формулой разложения по первой строке, где матрица Bk получается из A вычеркиванием первой строки...

2
 Аватар для UFO94
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
11.04.2012, 00:33
Лучший ответ Сообщение было отмечено DexMipt как решение

Решение

Ну, смотри. Есть 3 варианта:
1) В лоб. Рекурсия. Некошерно. (Пишу сразу функцию, ей передашь матрицу float* *m и ее размер n). В моей номерации элемент матрицы задается как элемент[строка][столбец]
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
float det(float* *m,int n)
{
if(n==1)
return m[0][0];
float s=0;
for(int i=0; i<n; i++)
{
float k=m[0][i]*det(minor(i),n-1);
if(i%2==0)
s+=k;
else s-=k;
}
return s;
}
 
float* *minor(float* *m,int n, int i)//Возвращает матрицу-минор к элементу (0,i)
{
float* *min=new float*[n-1];
for(int j=0; j<n-1; j++)
{
min[j]=new float[n-1];
for(int k=0; k<n-1; k++)
{
if(k<i)
min[j][k]=m[j+1][k];
else if(k>i)
min[j][k]=m[j+1][k+1];
}
}
return min;
}
2) Сначала упростить задачу своим моском. Любая невырожденая матрица раскладывается на произведение нижней треугольной (L) и верхней треугольной с единицами на главной диагонали (U).
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
float* *l=new float*[n];
float* *u=new float*[n];
for(int i=0; i<n; i++)
{
    u[i]=new float[n];
    l[i]=new float[n];
    for(int j=0; j<n; j++)
    {
        u[i][j]=0;
        l[i][j]=0;
    }
}
for(int i=0; i<n; i++)
{
    u[i][i]=1;
    for(int j=i; j<n; j++)
    {
        l[j][i]=a[j][i];
        for(int k=0; k<i; k++)
            l[j][i]=l[j][i]-l[j][k]*u[k][i];
    }
    for(int j=i+1; j<n; j++)
    {
        u[i][j]=a[i][j];
        for(int k=0; k<i; k++)
            u[i][j]=u[i][j]-l[i][k]*u[k][j];
        u[i][j]=u[i][j]/l[i][i];
    }
Вот этот код делает разложение матрицы a [n на n] на L и U
3) И моском, и в лоб. Метод Гаусса
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
float det(float* *m1, int n, float tolerance)//tolerance -- точность
{
if(n==1)
return m1[0][0];
float* *m=new float*[n];
for(int i=0; i<n; i++)
{
m[i]=new float[n];
for(int j=0; j<n; j++)
m[i][j]=m1[i][j];
}//Копируем матрицу, чтобы не изменять то, что мы передавали функцию
if(abs(m[0][0])>tolerance)//Не 0 на главной диаг.
{
for(int i=1; i<n; i++)
{
float k=m[i][0]/m[0][0];
for(int j=0; j<n; j++)
m[i][j]-=k*m[0][j];
}
float* *m2=new float*[n-1];
for(int i=0; i<n-1; i++)
{
m2[i]=new float[n-1];
for(int j=0; j<n-1; j++)
m2[i][j]=m[i+1][j+1];
}
float s=m[0][0]*det(m2,n-1,tolerance);
delete m;
delete m2;
return s;
}
else//0 на главной
{
int flag=false;//Есть ли не 0 в первом столбце
for(int i=1; i<n; i++)
if(abs(m[i][0])>tolerance)//Нашли такую строку
{
if(i%2==0)
flag=-1;//Она четная
else
flag=1;
float tmp;//буффер
for(int j=0; j<n; j++)
{
tmp=m[0][j];
m[0][j]=m[i][j];
m[i][j]=tmp;
}//Поставили ее наверх -- теперь m[0][0]!=0
break;
}
if(flag==0)
return 0;
return flag*det(m,n,tolerance);
}
}
0
13 / 13 / 2
Регистрация: 13.03.2011
Сообщений: 98
11.04.2012, 23:33  [ТС]
Спасибо, но все таки есть у кого нить идеи как же все это распараллелить ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2012, 23:33
Помогаю со студенческими работами здесь

Нахождения детерминанта
Всю голову уже сломал и не могу понять в чем дело. Вот начало кода функции вычисляющей определитель матрицы методом Гаусса: int...

Нахождение детерминанта матрицы
Помогите написать прораму нахождения детерминанта матрицы

Поиск детерминанта матрицы
Здравствуйте! Нужно написать программу на Python для поиска детерминанта матрицы. Пользователь сам задает елементы матрицы и количество...

Вычисление детерминанта матрицы
Нужно написать вычисление детерминанта матрицы. Неправильно считает матрицы, размерность которых &gt;3. Заранее благодарен за помощь! ...

Функция: нахождение детерминанта матрицы
Возможно ли сделать функцию для нахождения определителя матрицы nxn(высоких n). Есть ли формула для нахождения определителя любого порядка ?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru