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

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

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

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

02.11.2012, 06:40. Просмотров 2004. Ответов 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
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 06:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод пассивного поиска (C++):

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

Метод случайного поиска - C++
в чем заключается метод? какой шаг и т д поясните плиз.

Функция / метод поиска - C++
У меня есть класс Person в который я ввожу информацию такую как: имя, фамилия, адрес, округ и тд. Мне нужно, функция, которая будет искать...

Метод поиска - последовательный с барьером - C++
Нужно найти в каждой строке матрицы координаты элемента, равного k( если таковые имеются). Метод поиска - последовательный с барьером. C++ ...

Адаптивный метод случайного поиска - C++
Всем здравствуйте. Прошу помощи. Нужно создать программу на С++ в которой реализуется адаптивный метод случайного поиска. Алгоритм...

Адаптивный метод случайного поиска - C++
Адаптивным методом случайного поиска, нужна помощь(( вообще не понимаю ...

4
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;
* *}
а шо ета странная штука делает оО
0
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
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.
0
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;
}
а такое вам нра?
2
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
03.11.2012, 15:23  [ТС] #5
Да! Спасибо))
0
03.11.2012, 15:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2012, 15:23
Привет! Вот еще темы с ответами:

Метод поиска документа с максимальным количеством позиций - C++
Метод поиска документа с максимальным количеством позиций; метод выводящий сведения о позициях, содержащихся в документах; метод...

Метод поиска по массиву уникальных чисел за один проход - C++
Подскажите какой-нибудь интересный метод поиска по массиву для данного случая: Есть массив {1, 1, 2, 3, 3}; Надо найти неповторяющееся...

Используя метод поиска в ширину, найти и вывести путь в ориентированном графе между двумя вершинами - C++
Ребята день добрый. Задание у меня вот такое: Используя метод поиска в ширину, найти и вывести путь в ориентированном графе между...

Дан типизированный файл с данными о росте. Используя метод двоичного поиска вывести фамилию по росту - C++
С++ дан типизированный файл с данными о росте 25 учеников.Используя метод двоичного поиска вывести фамилию по заданному росту.Помогите...


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

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

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