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

Вычислить евклидову норма вектора. Используя класс Task или Parallel. Параллельное программирование

19.10.2016, 17:16. Показов 4622. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ помогите!!!
Изображения
 
0
Лучшие ответы (1)
19.10.2016, 17:16
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2016, 17:16
Ответы с готовыми решениями:

Eвклидова норма вектора с помощью метода Parallel.For и Parallel.Invoke
Имеется прога (евклидова норма вектора) Преобразовать её, чтобы распараллеливание шло методом методом Parallel.For и Parallel.Invoke ...

Распараллеливание цикла используя класс Parallel
Есть код который перемножает две матрицы. Вот не знаю как распараллелить цикл именно с помощью класса Parallel. MultiplyMatrix.cs: ...

Параллельное программирование или потоки
Параллельное программирование или потоки , что выбрать xe10

5
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
20.10.2016, 00:05 2
Лучший ответ Сообщение было отмечено SancheZxZ как решение

Решение

Вот так с тасками:

На входа подается вектор и число параллельных задач (от 1 до длинны массива)

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
namespace CyberForum_ParallelVectorNorm
{
    class Program
    {
        static void Main(string[] args)
        {
            var vector = new double[] { 2, 2, 2, 2, 2 }; // Вектор
            var taskCount = 3; //Число параллельных задач
 
            var sum = CalculateSum(vector, taskCount); //Параллельный подсчет суммы
            var norm = Math.Sqrt(sum);
            Console.WriteLine("Сумма квадратов: "+sum+"; Норма вектора: "+norm);
            Console.ReadKey();
        }
 
        private static double CalculateSum(double[] vector, int taskCount)
        {
            var len = vector.Length;
 
            //Не может быть задач больше числа элементов вектора
            if (taskCount > len) 
                throw new ArgumentException(); 
 
            var step = (len + 1) / taskCount; //Интервал для суммы
            var tasks = new Task<double>[taskCount];
            for (var i = 0; i < taskCount; i++)
            {
                tasks[i] = Task<double>.Factory.StartNew((obj) => Sum(vector, (int)obj * step, ((int)obj + 1) * step - 1), i);
            }
            Task.WaitAll(tasks);
            var sum = tasks.Select(x => x.Result).Sum();
            return sum;
        }
 
        
 
        static double Sum(IEnumerable<double> vector, int index1, int index2) 
        {
            index2 = index2 >= vector.Count() ? vector.Count() : index2;
            return vector.Skip(index1).Take(index2 - index1+1).Select(x => x * x).Sum();
        }
    }
}
1
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
22.10.2016, 10:45  [ТС] 3
Благодарю
0
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
22.10.2016, 10:53 4
Я забыл корень извлечь :

C#
1
var sum = Math.Sqrt(tasks.Select(x => x.Result).Sum());
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
22.10.2016, 12:13  [ТС] 5
Ммммм.... всё и так работает
var vector = new double[] { 2, 3, 4, 5, 6 };
Сумма квадратов 90. норма вектора 9.48
норма это же извлеченный.
Или Вы имеете ввиду, что извлечение корня не указано в распараллеливании?

Добавлено через 34 секунды
mishau,
0
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
22.10.2016, 12:21 6
Да, я спутал слегка. )) У меня корень вне функции извлекается, все верно. Но можно извлечь его в return, тогда будет считаться норма прямо в функции. И чего я так сразу не сделал?

И вот тут исправить

if (taskCount < 1 || taskCount > len)
throw new ArgumentException();
0
22.10.2016, 12:21
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2016, 12:21
Помогаю со студенческими работами здесь

Отличия Task от Parallel
Добрый вечер, у меня теоретический вопрос по параллельным вычислениям... Интересуют сходства и отличие task и parallel. Знаю что task не...

Параллельное программирование: вычислить определенный интеграл методом прямоугольников
необходимо написать программу с использованием библиотеки mpi.h Вычислить определенный интеграл от функции f(x) на отрезке методом ...

Последовательное vs параллельное выполнение (sequential vs parallel)
Здравствуйте! Решил провести тесты на скорость выполнения между последовательным и параллельным выполнением. В качестве алгоритма -...

Получение данных из Parallel.For или Parallel.ForEach
Есть некоторый список с исходными данными (данные не зависят друг от друга). Исходя из этих данных необходимо провести некоторые вычисления...

Чем отличается норма вектора от модуля вектора?
В книгах встречаются темы где используется понятие нормы вектора. В чем её отличие, кроме ее обозначения, от модуля вектора ? Книг, в...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru