Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 3
Регистрация: 12.10.2012
Сообщений: 150
1

ошибочки. как разобраться?найти точки перегиба

25.04.2013, 23:50. Просмотров 855. Ответов 2
Метки нет (Все метки)

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

Из школы знаю,что если для функции y = f (x) в некоторой точке xо f² (xo ) = 0 и при переходе через эту точку меняет свой знак на обратный, то точка М(хo,f(xo)) является точкой перегиба функции.

Для второй производной я программу составила, а как правильно поставить условие для точек перегиба не могу понять.. В том что написала в программке для условия по точкам, почему-то значения считает не те которые надо, или вообще не считает.. Объясните что не так, и как правильнее.
То что у меня наработано:
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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double   f1(double  x)/*vira*enie 1*/
 {return (x*cos(x))/(1+ pow(x,2));}
 
double   f2 (double  x) /*vira*enie 2*/
{return(exp(x)/x);}
 
double  f3 (double  x)/*vira*enie 3*/
{return (1/(3+2*cos(x)));}
 
/* pervaja proizvodnaja iz klassi4eskogo opredelenija eto f'(x)=(f(x0)-f(x))/(x-x0) */
/* opredelim proizvodnyjy s tochnost'jy h=x-x0=0.001 */
/* znachit x0=x-h */
/*polychaem znachenie dlja proizvodnoj (f(x-h)-f(x)/h */
double  proizv1(double (*f)(double ),double  x)
{ double   h;
h=0.001;
return(( (*f)(x-h)-(*f)(x))/h);      //dlja pervoj proizvodnoj: proizv1(f1) proizv1(f2) proizv1(f3)
}
 
 
/*vtoraja proizvodnaja iz klassi4eskogo opredelenija*/
/* f''(x)=(f'(x))' proizvodnaja ot proizvodnoj*/
double  proizv2( double  (*proizv)(double ),double   x)
{ double  h;
  h=0.001;
//mo*no vizvat' pervyjy proizvodnyjy: ff=proizv1(f1);ff=proizv1(f2);ff=proizv1(f3);//
return(( (*proizv)(x-h)-(*proizv)(x))/h);  //dlja vtoroj proizvodnoj ili return(( (proizv1)(x-h)-(proizv1)(x))/h); 
}
 
void tochki(double  (*t)(double ),double  xn,double   xk,double  dx)    //vizov bydet tochki(proizv2,xn,xk,dx)
{double  x1; int i,z; double  a[20];
 printf(" ____________________________\n");
 printf("|___i___|___x___|_____y______|\n");
 i=0;
  for (x1=xn;x1<=xk;x1+=dx)
   {proizv2(t,x1);
    i++;
    printf("|___%d___|__%.1f__|_%.5f___|\n",i,x1,proizv2(t,x1));
   }
  
  
  
  printf("\ntochka peregiba:");
       for(z=0;z<=i;z++) 
       { for(x1=xn;x1<=xk;x1+=dx)
            { a[z]=proizv2(t,x1);
             } 
        }
 /// zdes' 4toto ne tak
 
   for(z=0;z<=i;z++) /*yslovie syshestvovanija tochki peregiba*/
    { for(x1=xn;x1<=xk;x1+=dx)
          {if ( (a[z]*a[z+1])<0 )printf("\nx=%.1f y=%.5f",x1,a[z+1]);}
     }           //tochka peregiba tam, gde fynkcija menjaet znak:     
                 
           //v f1 tochki peregiba dol*nu but' x= -2 0 3 y=sootvetstvyjyshie
          //f2 tochki peregiba dol*nu but' x=0 y y=sootvetstvyjyshie
        // f3 tochki peregiba dol*nu but' x=0,5 è x=3,5 y=sootvetstvyjyshie
   
     
  
  
  
  
  
printf("\n");  
} 
 
void vibor(  )
{int n;
printf("S kakoj fynkciej bydem rabotat'?\n");
printf("1.  x*cos(x))/(1+ pow(x,2)\n");
printf("2. exp(x)/x\n");
printf("3. 1/(3+2*cos(x))\n");
printf("0. Vihod\n"); 
  scanf("%d",&n);
   switch(n)
            {case 1: tochki(f1,-4,4,1); break;//dlja pervoj fynkcii na intervale -4 4
             case 2: tochki(f2,-6,1,1); break;//dlja vtoroj fynkcii na intervale -6 1
             case 3: tochki(f3,0,4,1); break;//dlja tret'ej fynkcii na intervale 0 4
             case 0: break;    
             default:printf("Nevernij re*im");  
             }
}          
 int main()
  {vibor();
   system("pause");
   return 0;
   }
Могу изложить свои рассуждения по нахождению точек перегиба.Значения ведь идут последовательно при вычислении производной,значит их можно рассматривать как массив, где можно найти необходимые точки-значения.Если знаки сначала идут +++ ( (+)*(+) или (-)*(-) дают плюс)при произведении, а потом резко появится - при произведении( (+)*(-) или (-)*(+)дают минус), значит там где минус,то есть 1множитель*2множитель<0 нужно искать нужную точку ,второй множитель и будет искомым значением,ведь на нем меняется знак.Даже если потом будет +++ то при новом - будет еще одна точка..по моему логично..или не очень логичные и правильные рассуждения??если верные рассуждения,скажите что не правильно у меня в проге в этой части,или как правильнее записать..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2013, 23:50
Ответы с готовыми решениями:

Найти точки перегиба на графике
Доброго времени суток! У меня есть программа, которая строит график по числам из массива.(пример...

Определить точки перегиба функции на заданном интервале
x*cos(x))/(1+ pow(x,2) на интервале хочу разобраться по порядку понимаю что нужно считать...

Найти точки эктремума и точки перегиба и интервалы монотонности
y=x^4-2x^2+1 Помогите найти точки эктремума и точки перегиба и интервалы монотонности. Сижу решаю...

Найти точки экстремума и точки перегиба
Помогите пожалуйста. нужно найти точки экстремума и точки перегиба. y=\frac{4x}{4+{x}^{2}} ...

2
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
26.04.2013, 10:17 2
точка перегиба - это когда вторая производная меняет знак. бегите по точкам и проверяйте знак произведения второй производной в текущей точке на вторую производную в предыдущей точке. когда увидите минус или ноль (ну а вдруг) - зафиксирована точка перегиба.
0
0 / 0 / 3
Регистрация: 12.10.2012
Сообщений: 150
26.04.2013, 21:43  [ТС] 3
vxg, это я понимаю.. я не понимаю как програмно этот момент рассматривать...как в программе записать..перебирать значения второй производной как массив для этого условия или как??я вроде в программе , которую выше написала,поставила условие, но либо не выводятся результаты, либо выводятся все значения для второй производной по х..
что я в программе не так сделала?

Добавлено через 27 минут
как реализовать разобралась, переделала прогу.. но не все значения выводятся..только для второй функции.. а если выбирать первую или треть то нет, почему??
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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double   f1(double  x)/*vira*enie 1*/
 {return (x*cos(x))/(1+ pow(x,2));}
 
double   f2 (double  x) /*vira*enie 2*/
{return(exp(x)/x);}
 
double  f3 (double  x)/*vira*enie 3*/
{return (1/(3+2*cos(x)));}
 
/* pervaja proizvodnaja iz klassi4eskogo opredelenija eto f'(x)=(f(x0)-f(x))/(x-x0) */
/* opredelim proizvodnyjy s tochnost'jy h=x-x0=0.001 */
/* znachit x0=x-h */
/*polychaem znachenie dlja proizvodnoj (f(x-h)-f(x)/h */
double  proizv1(double (*f)(double ),double  x)
{ double   h;
h=0.001;
return(( (*f)(x-h)-(*f)(x))/h);      //dlja pervoj proizvodnoj: proizv1(f1) proizv1(f2) proizv1(f3)
}
 
 
/*vtoraja proizvodnaja iz klassi4eskogo opredelenija*/
/* f''(x)=(f'(x))' proizvodnaja ot proizvodnoj*/
double  proizv2( double  (*proizv)(double ),double   x)
{ double  h;
  h=0.001;
//mo*no vizvat' pervyjy proizvodnyjy: ff=proizv1(f1);ff=proizv1(f2);ff=proizv1(f3);//
return(( (*proizv)(x-h)-(*proizv)(x))/h);  //dlja vtoroj proizvodnoj ili return(( (proizv1)(x-h)-(proizv1)(x))/h); 
}
 
void tochki(double  (*t)(double ),double  xn,double   xk,double  dx)    //vizov bydet tochki(proizv2,xn,xk,dx)
{double  x1; int i,z; double  a[20];
 printf(" ____________________________\n");
 printf("|___i___|___x___|_____y______|\n");
 i=0;
  for (x1=xn;x1<=xk;x1+=dx)
   {proizv2(t,x1);
    i++;
    printf("|___%d___|__%.1f__|_%.5f___|\n",i,x1,proizv2(t,x1));
   }
  printf("\ntochka peregiba:");
  
  if ((proizv2(t,x1-1))*(proizv2(t,x1))<=0)
         printf("x=%.1f y=%.5f",x1-1,proizv2(t,x1-1));
  
   //tochka peregiba tam, gde fynkcija menjaet znak:     
                 
           //v f1 tochki peregiba dol*nu but' x= -2 0 3 y=sootvetstvyjyshie
          //f2 tochki peregiba dol*nu but' x=0 y y=sootvetstvyjyshie
        // f3 tochki peregiba dol*nu but' x=0,5 è x=3,5 y=sootvetstvyjyshie
 printf("\n");  
} 
 
void vibor(  )
{int n;
printf("S kakoj fynkciej bydem rabotat'?\n");
printf("1.  x*cos(x))/(1+ pow(x,2)\n");
printf("2. exp(x)/x\n");
printf("3. 1/(3+2*cos(x))\n");
printf("0. Vihod\n"); 
  scanf("%d",&n);
   switch(n)
            {case 1: tochki(f1,-4,4,1); break;//dlja pervoj fynkcii na intervale -4 4
             case 2: tochki(f2,-6,1,1); break;//dlja vtoroj fynkcii na intervale -6 1
             case 3: tochki(f3,0,4,1); break;//dlja tret'ej fynkcii na intervale 0 4
             case 0: break;    
             default:printf("Nevernij re*im");  
             }
}          
 int main()
  {vibor();
   system("pause");
   return 0;
   }
Добавлено через 9 минут
или это не правильно??

Добавлено через 18 минут
разобралась..все работает.. извините дурную за глупые вопросы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 21:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти точки перегиба функции
Помогите найти точки перегиба функции \sqrt{(x^2+4x)^2}

Найти промежутки выпуклости и точки перегиба.
выпуклости и точки перегиба функции

Найти точки перегиба графика функции
Найти точки перегиба графика функции

найти промежутки выпуклости и точки перегиба функции
Помогите решить!Завтра сдать надо! Y(X)=-\frac{1}{3}{x}^{3}+\frac{7}{2}{x}^{2}-6X+2


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

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

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