Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 1

Параллельное программирование

27.12.2020, 12:36. Показов 1363. Ответов 1

Студворк — интернет-сервис помощи студентам
Дописать в данную программу:
Запустить 4 параллельных процесса, в каждом разные начальные приближения
Желательно добавить мультистарт (сгенерировать кол-во однотипных независимых потоков)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
    //Программа демонстрирует поиск минимума функции нескольких переменных методом наискорейшего спуска
    #include <iostream>
    #include <cmath>
     
    //Структура вектор
    //Содержит количество переменных исходной функции
    struct vector
    {
       double x,y;
    };
     
    //Исходная функция
    double fx(vector x)
    {
       return 100*(x.x*x.x+x.y*x.y);
    }
     
    //Градиент исходной функции
    //Также для нахождения градиента можно использовать численные методы
    vector gradient(vector x)
    {
       vector grad;
     
       grad.x=200*x.x;
       grad.y=200*x.y;
     
       return grad;
    }
     
    //Вычисление одномерной функции для нахождения шага методом золотого сечения
    double MakeSimplefx(double x, vector grad, vector xj)
    {
       vector buffer;
     
       buffer.x=xj.x-x*grad.x;
       buffer.y=xj.y-x*grad.y;
     
       return fx(buffer);
    }
     
    //Метод золотого сечения для нахождения шага (lambda)
    double GoldenSelection(double a, double b, double eps, vector gradient, vector x)
    {
       const double fi=1.6180339887;
       double x1,x2;
       double y1,y2;
     
       x1=b-((b-a)/fi);
       x2=a+((b-a)/fi);
       y1=MakeSimplefx(x1,gradient,x);
       y2=MakeSimplefx(x2,gradient,x);
       while (std::abs(b-a)>eps)
       {
          if (y1<=y2)
          {
             b=x2;
             x2=x1;
             x1=b-((b-a)/fi);
             y2=y1;
             y1=MakeSimplefx(x1,gradient,x);
          }
          else
          {
             a=x1;
             x1=x2;
             x2=a+((b-a)/fi);
             y1=y2;
             y2=MakeSimplefx(x2,gradient,x);
          }
       }
     
       return (a+b)/2;
    }
     
    //Функция вычисления нового приближения
    vector Calculate(vector x, vector gradient, double lambda)
    {
       vector buffer;
     
       buffer.x=x.x-lambda*gradient.x;
       buffer.y=x.y-lambda*gradient.y;
     
       return buffer;
    }
     
    //Метод наискорейшего спуска
    vector GradDown(vector x, double eps)
    {
       vector current=x;
       vector last;
     
       do
       {
          last=current; //Запоминаем предыдущее значение
          vector grad=gradient(current); //Вычисляем градиент
          double lambda=GoldenSelection(0,0.05,eps,grad,current); //Находим шаг вычислений методом золотого сечения
          current=Calculate(current,grad,lambda); //Вычисляем новое приближение
       }while(std::abs(fx(current)-fx(last))>eps); //Проверяем условие
     
       return current; //Возвращаем результат
    }
     
    //Тело главной функции
    int main()
    {
       vector x;
       double eps;
     
       std::cout<<"Введите через пробел начальное приближение x и y (например: -1 1): ";
       std::cin>>x.x>>x.y;
       std::cout<<"\nВведите точность вычислений (например 0.000001): ";
       std::cin>>eps;
       vector result=GradDown(x,eps);
       std::cout<<"\nРезультат: x = "<<result.x<<" y = "<<result.y;
     
       return 0;
    };
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.12.2020, 12:36
Ответы с готовыми решениями:

Межпроцессное взаимодействие и параллельное программирование. Литература
Доброго времени суток. Собственно просьба видна из заголовка треда. Прошу порекомендовать хорошие книги по межпроцессному взаимодействию...

Расчёт значения функции, параллельное программирование
Добрый вечер! Требуется параллельно вычислить значение функции из третьего варианта. У меня был соблазн &quot;запихнуть&quot; шаг функции в...

Параллельное программирование openmp (Умножение матрицы на вектор)
Есть задание : написать программу умножения матрицы на вектор. Сравнить время выполнения последовательной и параллельной программы. В итоге...

1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2020, 13:05
Цитата Сообщение от ANST_24 Посмотреть сообщение
Дописать в данную программу:
А сам что, писать разучился?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2020, 13:05
Помогаю со студенческими работами здесь

Параллельное вычисление
Необходимо реализовать последовательный и параллельный алгоритм вычисления факториала N!. Есть только последовательный расчёт. Если кто...

Параллельное действие
Как сделать действие параллельным? Если например сделать что бы слово всегда меняло цвет, то программа зациклится на этом, и другие...

Параллельное программирование
Подскажите учебник с помощью которого можно научиться параллельному программированию

Параллельное программирование в С++
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна глобальная переменная, которая должна...

параллельное программирование
Подскажите, пожалуйста! Возвожу положительные числа в степень, а выдается отрицательный результат. Как быть? #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru