Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2012, 17:20   #1
Symple me
Пользователь
 
Аватар для Symple me
 
Регистрация: 09.10.2012
Сообщений: 47
Вопрос Метод пассивного поиска

Подскажите, пожалуйста, почему неправильно находятся точка минимума и наименьшее значение функции.

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;
}
There are 10 types of people: those who understand binary and those who don't.
Symple me вне форума Ответить с цитированием
Старый 01.11.2012, 17:35   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Оформляйте код тегом CODE, пожалуйста.

1) Поиск места объявления переменной k результата не принёс. Так что лично у меня эта программа не то что неправильно работает, а совсем не работает.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2012, 06:32   #3
Symple me
Пользователь
 
Аватар для Symple me
 
Регистрация: 09.10.2012
Сообщений: 47
По умолчанию

Да, просто в моей проге несколько методов, а сюда я ее частями копировала и забыла, что в пассивном поиске использую переменную k Исправила. Теперь запустится, но значение неправильно считает.

Код:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
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, ch=26;
 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;
}
There are 10 types of people: those who understand binary and those who don't.
Symple me вне форума Ответить с цитированием
Старый 02.11.2012, 10:35   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

2) На первой же итерации первого цикла производится обращение к x[2]. Но значение x[2] до этого не было инициализировано, там находится произвольный мусор.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2012, 19:10   #5
Symple me
Пользователь
 
Аватар для Symple me
 
Регистрация: 09.10.2012
Сообщений: 47
По умолчанию

Точно! Косяк. Спасибо))
There are 10 types of people: those who understand binary and those who don't.
Symple me вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод перебора, Метод дихотомии, Метод золотого сечения Delphi !!! OneBri Помощь студентам 0 03.10.2012 08:42
Метод бинарного поиска Ксения Юрьевна Помощь студентам 10 16.06.2012 19:18
Метод поиска в открытом и закрытом хешировании dizelxxx Общие вопросы C/C++ 0 01.04.2011 12:04
Java ME Рекурсивный метод поиска в подпапках Клык Помощь студентам 0 31.07.2009 16:06