Форум программистов, компьютерный форум CyberForum.ru

Метод пассивного поиска - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Simply me
 Аватар для Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 292
02.11.2012, 06:40     Метод пассивного поиска #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
double func(double x)
{
  double y;
  y=(x-131)/(x-1)+5* fabs(x-6);
  return y;
}
int main(int argc, char* argv[])
{
   const int N=26;
   int i, imin;
   double a=2.0,b=7.0, xPmin, yPmin;
   double x1, x2, y1, y2, x[N+2], y[N+2];
   printf ("Method passivnogo poiska:\n");
   const double d=0.1;
   x[0]=a;
   x[27]=b;
   for (int j=1; j<=N; j++)
   { 
       if ((j%2)==0)
          x[j]=a+(((b-a)*(j/2))/(k+1));
       else
          x[j]=x[j+1]-d;
   }
   for (int i=1; i<=N; i++)
     y[i]=func(x[i]);
   yPmin=y[1];
   for (i=1; i<=N; i++)
   {
    if (y[i]<=yPmin)
     {
                    yPmin=y[i];
           imin=i;
     }
     
   }
   xPmin=(x[imin-1]+x[imin+1])/2;
   printf("Tochka minimuma: %f\nNaim. znacheniye f: %f\n", xPmin,func(xPmin));
   getch();
   return 0;
}
Добавлено через 13 часов 23 минуты
Я забыла переменную k объявить. Вот так запускается, но неправильно находит наименьшее значение.
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
double func(double x)
{
  double y;
  y=(x-131)/(x-1)+5* fabs(x-6);
  return y;
}
int main(int argc, char* argv[])
{
   const int N=26;
   const int k=13;
   int i, imin;
   double a=2.0,b=7.0, xPmin, yPmin;
   double x1, x2, y1, y2, x[N+2], y[N+2];
   printf ("Method passivnogo poiska:\n");
   const double d=0.1;
   x[0]=a;
   x[27]=b;
   for (int j=1; j<=N; j++)
   { 
       if ((j%2)==0)
          x[j]=a+(((b-a)*(j/2))/(k+1));
       else
          x[j]=x[j+1]-d;
   }
   for (int i=1; i<=N; i++)
     y[i]=func(x[i]);
   yPmin=y[1];
   for (i=1; i<=N; i++)
   {
    if (y[i]<=yPmin)
     {
                    yPmin=y[i];
           imin=i;
     }
     
   }
   xPmin=(x[imin-1]+x[imin+1])/2;
   printf("Tochka minimuma: %f\nNaim. znacheniye f: %f\n", xPmin,func(xPmin));
   getch();
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 06:40     Метод пассивного поиска
Посмотрите здесь:

C++ вид поиска, метод поиска
Метод случайного поиска C++
Поиска в записанном ранее файле по фамилии или по группе с выбором параметра поиска C++
C++ адаптивный метод случайного поиска
Метод поиска документа с максимальным количеством позиций C++
C++ Адаптивный метод случайного поиска
C++ Метод поиска по массиву уникальных чисел за один проход
Нужно отредактировать код поиска в некоторых папках. Добавить функцию поиска в архивах C++
C++ Дан типизированный файл с данными о росте. Используя метод двоичного поиска вывести фамилию по росту
Функция / метод поиска C++
Организация поиска в списке. Исправить ошибку в методе поиска C++
C++ Не сходится теория и практика метод Шелла и метод простого выбора

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
02.11.2012, 09:10     Метод пассивного поиска #2
Цитата Сообщение от Simply me Посмотреть сообщение
for (int j=1; j<=N; j++)
* *{
* * * *if ((j%2)==0)
* * * * * x[j]=a+(((b-a)*(j/2))/(k+1));
* * * *else
* * * * * x[j]=x[j+1]-d;
* *}
а шо ета странная штука делает оО
Simply me
 Аватар для Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 292
02.11.2012, 19:34  [ТС]     Метод пассивного поиска #3
Это метод пассивного поиска. В данном цикле я присваиваю значения иксам.
x с индексом 2i= a+((b-a)*i)/(k+1)
x с индексом 2i-1= (x с индексом 2i) - d
Т. е. икс с нечетным индексом опрелеляется через предыдущий четный.
Потом нахожу yi от xi. Нахожу наименьший yi. Запоминаю индекс.
Точка минимума= (x[imin-1]+x[imin+1])/2.
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
03.11.2012, 14:01     Метод пассивного поиска #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
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
#include <conio.h>
#include <stdio.h>
 
using namespace std;
 
double func(double x)
{
  double y;
  y=(x-131)/(x-1)+5* fabs(x-6);
  return y;
}
int main(int argc, char* argv[])
{
   const int N=26;
   int i, imin;
   double a=2.0,b=7.0, xPmin, yPmin;
   double x1, x2, y1, y2, x[N+2], y[N+2];
   printf ("Method passivnogo poiska:\n");
   const double d=0.1;
   int j=0;
   for (double i=a; i<=b+ 2*((b-a)/N); i+=(b-a)/N)
     x[j++]=i;
   for (int i=0; i<N+2; i++)
       y[i]=func(x[i]);
   yPmin=y[1];
   for (i=1; i<N; i++)
   {
    if (y[i]<=yPmin)
     {
                    yPmin=y[i];
           imin=i;
     }
     
   }
   xPmin=(x[imin-1]+x[imin+1])/2;
   printf("Tochka minimuma: %f\nNaim. znacheniye f: %f\n", xPmin,func(xPmin));
   _getch();
   return 0;
}
а такое вам нра?
Simply me
 Аватар для Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 292
03.11.2012, 15:23  [ТС]     Метод пассивного поиска #5
Да! Спасибо))
Yandex
Объявления
03.11.2012, 15:23     Метод пассивного поиска
Ответ Создать тему
Опции темы

Текущее время: 17:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru