Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
#1

Метод ломаных нахождения минимума многоэкстремальной функции - C++

01.12.2012, 15:21. Просмотров 2679. Ответов 4
Метки нет (Все метки)

Здравствуйте! Помогите, пожалуйста, реализовать метод ломаных нахождения минимума многоэкстремальной функции f(x) на отрезке [a, b].
Алгоритм:
x1=a
x2=b
yi=f(xi)

1 итерация
t1(x)=max {yi-180*fabs(x-xi)}, i=1,2
x3=arg min t1(x), a<=x<=b

2 итерация
t2(x)= max {yi-180*fabs(x-xi)}, i=1,2,3
x4=arg min t2(x), a<=x<=b

k итерация
tk(x)= max {yi-180*fabs(x-xi)}, i=1,2,3,...,k+1
x(k+2)=arg min tk(x), a<=x<=b

N-1 итерация
t(N-1)(x)=max {yi-180*fabs(x-xi)}, i=1,2,3,...,N
x(N+1)=arg min t(N-1)(x), a<=x<=b


fmin=min f(xi), i=1,...,N
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 15:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Метод ломаных нахождения минимума многоэкстремальной функции (C++):

Шаблон функции нахождения максимума и минимума - C++
Пожалуйста кто хорошо осведомлён в теме Шаблоны Объясните как написать функцию с использованием классов для нахождения и минимального и...

Функция нахождения минимума - C++
Подскажите, где ошибка и почему программа не компилит то, что необходимо найти. #include &lt;iostream&gt; using namespace std; void...

Написать программу для нахождения минимума - C++
Здравствуйте, как написать программу для нахождения минимума из 4 или 5 введенных цифр. И именно используя, только функций.

Программа нахождения минимума из трех элементов - C++
Помогите разобраться с программой нахождения минимума из 3-х элементов. Т.к вводятся числа x,y,z и на выходе выводится значение...

Функция нахождения минимума и максимума в матрице - C++
Будете добры? Напишите программу .2. Функционал: написать функции нахождения минимума, максимума, наименьшего и наибольшего значения в...

While(cin>>i) и эффективный алгоритмн нахождения максимума и минимума - C++
В строках &quot;while (cin &gt;&gt; i) { if (i != 666) { money.push_back(i);&quot; не могла остановить считывания, ради эксперимента прописала ...

4
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
02.12.2012, 09:52  [ТС] #2
Может, кто-нибудь посмотрит? Я попыталась проиллюстрировать метод.
Сам метод хорошо понимаю, x[3] нашла.
x[3]=(y[2] - y[1] + 180*(x[2] + x[1])) / (2*180);
В частном случае (конкретно по графику моей функции) можно дальше выбрать x[4].
x41=(y[1]-y[3]+M*(x[1]+x[3]))/(2*M);
x42=(y[3]-y[2]+M*(x[2]+x[3]))/(2*M);
if ((y[3]-M*fabs(x41-x[3])) <(y[3]-M*fabs(x42-x[3])))
x[4]=x41;
else
x[4]=x42;
А в общем случае непонятно, как выбирать следующие точки.
0
Миниатюры
Метод ломаных нахождения минимума многоэкстремальной функции   Метод ломаных нахождения минимума многоэкстремальной функции   Метод ломаных нахождения минимума многоэкстремальной функции  

Метод ломаных нахождения минимума многоэкстремальной функции   Метод ломаных нахождения минимума многоэкстремальной функции  
ek2
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 8
28.05.2018, 23:27 #3
Добрый вечер!
У вас осталось решение этой задачи?
0
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
29.05.2018, 02:35  [ТС] #4
Нет
0
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
29.05.2018, 05:08  [ТС] #5
Нашла

А во вложении на фортране

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
118
119
120
121
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------
const int N=26;
const double M=180;
double func(double x)
{
double y;
y=pow(x,4)-8*pow(x,3)-8*pow(x,2)+96*x-3;
return y;
}
int minpos(double a[N+1], int n)
{
  int imin;
  double min;
  imin=1;
  min=a[1];
  for (int i=2; i<=n; i++)
  {
     if (a[i]<min)
     {
       min=a[i];
       imin=i;
     }
  }
  return imin;
}
double min(double a[N+1],int n)
{
  double min;
  min=a[1];
  for (int i=2; i<=n; i++)
  {
     if (a[i]<min)
     {
       min=a[i];
     }
  }
  return min;
}
double InterPoint(double InterPoint[3],double x1, double y1, double x2, double y2)
{
 double Temp;
 Temp = (y1 - y2)/(2*M) + (x1 + x2)/2;
 InterPoint[1] = Temp;
 InterPoint[2] = y1 + M*x1 - M*Temp;
 return *InterPoint;
}
 
int main(int argc, char* argv[])
{
 double a=-3, b=7;
 double x[N+1];
 double y[N+1];
 double ymin;
 int i, imin, j;
 printf ("Metod perebora:\n");
 for (i=1;i<=N;i++)
 {
  x[i]=a+(2*i-1)*(b-a)/(2*N);
 }
 for (i=1; i<=N; i++)
 y[i]=func(x[i]);
 ymin=y[1];
 for (i=1; i<=N; i++)
 {
    if (y[i]<=ymin)
     {
         ymin=y[i];
     imin=i;
     }
 
 }
 printf("Naim. znacheniye f: %f\n\n", ymin);
 printf ("Metod lomanyh:\n");
 double Theor, Fact;
 double Inter[3];
 double minPhix[N], minPhiy[N];
 int minNum;
 x[1] = a;
 x[2] = b;
 y[1] = func(x[1]);
 y[2] = func(x[2]);
 InterPoint(Inter,x[1], y[1], x[2], y[2]);
 minPhix[1] = Inter[1];
 minPhiy[1] = Inter[2];
 for( i = 3; i<=N;i++)
 {
   minNum = minpos(minPhiy,i-2);
   for(j = 1;j<=(i-minNum-1);j++)
   {
     x[i-j+1] = x[i-j];
     y[i-j+1] = y[i-j];
   }
   x[minNum+1] = minPhix[minNum];
   y[minNum+1] = func(x[minNum+1]);
   for (j = 1; j<=(i-minNum-1); j++)
   {
     minPhix[i-j] = minPhix[i-j-1];
     minPhiy[i-j] = minPhiy[i-j-1];
   }
   InterPoint(Inter,x[minNum], y[minNum], x[minNum+1], y[minNum+1]);
   minPhix[minNum] = Inter[1];
   minPhiy[minNum] = Inter[2];
   InterPoint(Inter,x[minNum+1], y[minNum+1], x[minNum+2], y[minNum+2]);
   minPhix[minNum+1] = Inter[1];
   minPhiy[minNum+1] = Inter[2];
 }
 ymin = min(y,N);
 Fact = fabs(ymin-(-147));
 Theor = ymin - min(minPhiy,N);
 printf("Naim. znacheniye f: %f\n", ymin);
 printf("Theor. precision is: %f\n", Theor);
 printf("Fact. precision is: %f\n", Fact);
 getch();
 return 0;
}
0
Вложения
Тип файла: txt лаба 2 в82.txt (2.8 Кб, 0 просмотров)
29.05.2018, 05:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2018, 05:08
Привет! Вот еще темы с ответами:

Как ускорить данный алгоритм нахождения минимума на отрезке? - C++
Здравствуйте, подскажите, пожалуйста, почему решение не проходит по времени на нескольких тестах? Как исправить это? Рассмотрим...

Порядковые статистики. Алгоритм нахождения k-ого минимума в массиве - C++
Порядковые статистики. Алгоритм нахождения k-ого минимума в массиве. Добавлено через 19 минут ап, помогите кто может Добавлено...

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд - C++
Разработать программу нахождения корней уравнения f(x) =0 на интервале с точностью e = 0,001 (интервал или подобрать самостоятельно). При...

Класс vector (поля: координаты, 2 конструктора, метод нахождения длины вектора и метод вывода координат на экран) - C++
Здравствуйте , помогите пожалуйста с заданием. Организовать класс Вектор на плоскости – поля: координаты, 2 конструктора, метод...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru