//---------------------------------------------------------------------------
#include<math.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
//---------------------------------------------------------------------------
double fun (double);
double mkv (double, double, double, double &);
//---------------------------------------------------------------------------
void main ()
{
double xm, e, h, x,z;
printf ("Nachal'nyi shag poiska h: "); scanf ("%lf", &h);
printf ("kolichestvo shagov poiska z: "); scanf ("%lf", &z);
printf ("Tochnost' e : "); scanf ("%lf", &e);
printf ("Nachal'noe znachenie x : "); scanf ("%lf", &x);
printf ("F(x)= %12.5lf \n",mkv(h,x,e,xm));
printf ("x= %12.5lf ",xm);
getch();
}
//---------------------------------------------------------------------------
double fun(double x)
{
return(x*x*x - 10*x - 5);// функция может быть любая, конкретно у этой нет экстремума.
}
//---------------------------------------------------------------------------
double mkv(double h, double x, double e, double& xm)
{
xm = x;
do {
x = xm;
double f0 = fun(x - h);
double f1 = fun(x);
double f2 = fun(x + h);
double c = (f0 - 2*f1 + f2) / (2*h*h);
double b = ((-1)*f0*(2*x + h) + 4*f1*x - f2*(2*x-h)) / (2*h*h);
xm = (-1) * b / 2/ c;
}
while ((xm - x) < e);
return fun(xm);
}
//---------------------------------------------------------------------------
нахождение экстремума функции F(x)
Код:
нужно сделать на выходе из цикла счетчик чтобы чтобы он прекращался либо по достижению точности либо по количеству шагов что быстрее наступит. Подскажите пожалуйста.
Код:
while ((xm - x) < e);
Это отвечает за точность.
Дополним код на количество итераций
Код:
#define ITERATIONS 1000 // Здесь можешь изменять количество итераций
...
int am=0;
do {
if(am>ITERATIONS)
break;
...
am++;
}
while ((xm - x) < e);
...
...
int am=0;
do {
if(am>ITERATIONS)
break;
...
am++;
}
while ((xm - x) < e);
...
[QUOTE=Snowman]x*x*x - 10*x - 5 // функция может быть любая, конкретно у этой нет экстремума.[/QUOTE]Матан-то точно сдал?
эмм..вообще то я представления не имею как вручную проделать эти вычисления, у меня есть алгоритм, вот пытаюсь сделать. Скорее всего там при определенных входных данных она не имеет экстремума. И ещё нас учили что define это плохо? хотя главное смысл
Цитата: Snowman
эмм..вообще то я представления не имею как вручную проделать эти вычисления, у меня есть алгоритм, вот пытаюсь сделать. Скорее всего там при определенных входных данных она не имеет экстремума. И ещё нас учили что define это плохо? хотя главное смысл
Уже производную не могут посчитать в уме. БИДА!
Код:
void main ()
{
double xm, e, h, x,z;
...
printf ("F(x)= %12.5lf \n",mkv(h,x,e,z,xm));
...
}
...
double mkv(double h, double x, double e, double z, double& xm)
{
int am=0;
xm = x;
do {
am++;
...
if(am>z)
break;
}
while ((xm - x) < e);
return fun(xm);
}
{
double xm, e, h, x,z;
...
printf ("F(x)= %12.5lf \n",mkv(h,x,e,z,xm));
...
}
...
double mkv(double h, double x, double e, double z, double& xm)
{
int am=0;
xm = x;
do {
am++;
...
if(am>z)
break;
}
while ((xm - x) < e);
return fun(xm);
}
Я сегодня добрый:rolleyes:
Код:
//---------------------------------------------------------------------------
#include<math.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
//---------------------------------------------------------------------------
double fun (double);
double mkv (double, double, double, double &,double);
//---------------------------------------------------------------------------
void main ()
{
double xm, e, h, x,z;
printf ("Nachal'nyi shag poiska h: "); scanf ("%lf", &h);
printf ("vvedite kol-vo shagov z: "); scanf ("%lf", &z);
printf ("Tochnost' e : "); scanf ("%lf", &e);
printf ("Nachal'noe znachenie x : "); scanf ("%lf", &x);
printf ("F(x)= %12.5lf \n",mkv(h,x,e,xm,z));
printf ("x= %12.5lf ",xm);
getch();
}
//---------------------------------------------------------------------------
double fun(double x)
{
return(x*x*x - 10*x - 5);
}
//---------------------------------------------------------------------------
double mkv(double h, double x, double e, double& xm,double z)
{
int am=0;
xm = x;
do { am++;
x = xm;
double f0 = fun(x - h);
double f1 = fun(x);
double f2 = fun(x + h);
double c = (f0 - 2*f1 + f2) / (2*h*h);
double b = ((-1)*f0*(2*x + h) + 4*f1*x - f2*(2*x-h)) / (2*h*h);
xm = (-1) * b / 2/ c;
if(am>z) break;
}
while ((xm - x) < e);
if (xm<-100||xm>100||am==z)
{
cprintf("Reshenie poluchit' nevozmozhno \n\r");
if (am==z)
cprintf("extremum funkcii otsutstvuet \n\r");
else
cprintf("vishli iz predela poiska \n\r");
}
else
{
return fun(xm);
}
}
#include<math.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
//---------------------------------------------------------------------------
double fun (double);
double mkv (double, double, double, double &,double);
//---------------------------------------------------------------------------
void main ()
{
double xm, e, h, x,z;
printf ("Nachal'nyi shag poiska h: "); scanf ("%lf", &h);
printf ("vvedite kol-vo shagov z: "); scanf ("%lf", &z);
printf ("Tochnost' e : "); scanf ("%lf", &e);
printf ("Nachal'noe znachenie x : "); scanf ("%lf", &x);
printf ("F(x)= %12.5lf \n",mkv(h,x,e,xm,z));
printf ("x= %12.5lf ",xm);
getch();
}
//---------------------------------------------------------------------------
double fun(double x)
{
return(x*x*x - 10*x - 5);
}
//---------------------------------------------------------------------------
double mkv(double h, double x, double e, double& xm,double z)
{
int am=0;
xm = x;
do { am++;
x = xm;
double f0 = fun(x - h);
double f1 = fun(x);
double f2 = fun(x + h);
double c = (f0 - 2*f1 + f2) / (2*h*h);
double b = ((-1)*f0*(2*x + h) + 4*f1*x - f2*(2*x-h)) / (2*h*h);
xm = (-1) * b / 2/ c;
if(am>z) break;
}
while ((xm - x) < e);
if (xm<-100||xm>100||am==z)
{
cprintf("Reshenie poluchit' nevozmozhno \n\r");
if (am==z)
cprintf("extremum funkcii otsutstvuet \n\r");
else
cprintf("vishli iz predela poiska \n\r");
}
else
{
return fun(xm);
}
}