📄 laba_11.cpp
字号:
#include <stdio.h>
#include <conio.h>
#include <math.h>
double eps=10e-4;
double tau=(sqrt(5)-1)/2.0;
void DIHOTOM(double,double);
void SEK_PARAB(double,double);
void GOLDEN_SECH(double,double);
double y(double,double,double,double);
double f(double);
double df(double);
void main()
{
DIHOTOM(-2,3);
SEK_PARAB(-2,3);
GOLDEN_SECH(-2,3);
getch();
}
double f(double x)
{
return (exp(x)-exp(-x))*(exp(x)-exp(-x))/(exp(x)+exp(-x))/(exp(x)+exp(-x)) + x*x*x*x + x + 1/(x*x + 1);
}
void DIHOTOM(double x_a,double x_b)
{
double a,b,c;
double xmin,ymin,ydev;
int counter=0;
a=x_a;
b=x_b;
do
{
c=(a+b)/2;
counter++;
if(f(c-eps)<=f(c+eps))
b=c+eps;
else
a=c-eps;
}while((b-a)>=3*eps);
xmin=(a+b)/2;
ymin=f(xmin);
ydev=(f(xmin+eps)-f(xmin))/eps;
printf(" >> MeToD DuxoToMuu");
printf("\n Xmin = %2.2f \n Ymin = %2.4f \n counter = %d \n Dev = %2.4f",xmin,ymin,counter,ydev);
}
double y(double x,double x0,double x1,double x2)
{
return f(x0)+(f(x1)-f(x0))*(x-x0)/(x1-x0)+((f(x2)-f(x0))/((x2-x0)*(x2-x1))-(f(x1)-f(x0))/((x1-x0)*(x2-x1)))*(x-x0)*(x-x1);
}
void SEK_PARAB(double x_a,double x_b)
{
double x0,x1,x2;
int counter=0;
double xmin,ymin,ydev;
x0=x_a;
x2=x_b;
do
{
x1=(x0+x2)/2;
counter++;
if(y(x1-eps,x0,x1,x2)<=y(x1+eps,x0,x1,x2))
x2=x1+eps;
else
x0=x1-eps;
} while ((x2-x0)>=3*eps);
xmin=(x0+x2)/2;
ymin=y(xmin,x0,(x2+x0)/2,x2);
ydev=(f(xmin+eps)-f(xmin))/eps;
ymin=f(xmin);
printf("\n\n >> MeToD ceKyLL|ux IIapa6oJI");
printf("\n Xmin = %2.2f \n Ymin = %2.4f \n counter = %d \n Dev = %2.4f",xmin,ymin,counter,ydev);
}
void GOLDEN_SECH(double x_a, double x_b)
{
double x0,x1,x2,x3,F1,F2,ymin,ydev;
double xmin=(x_a+x_b)/2.0;
x0 = x_a;
x3 = x_b;
x1=x3-tau*(x3-x0);
x2=x0+x3-x1;
F1=f(x1);
F2=f(x2);
int counter=0;
while ((x3-x0)>eps)
{
if (F1<=F2)
{
x3=x2;
x2=x1;
x1=x0+x3-x2;
F2=F1;
F1=f(x1);
}
else
{
x0=x1;
x1=x2;
x2=x0+x3-x1;
F1=F2;
F2=f(x2);
}
counter++;
}
if (f(((x0+x3)/2.0))<f(xmin))
xmin=(x0+x3)/2;
ymin = f(xmin);
ydev = (f(xmin+eps)-f(xmin))/eps;
printf("\n\n >> MeToD 3oJIoToro ce4eHu9I");
printf("\n Xmin = %2.2f \n Ymin = %2.4f \n counter = %d \n Dev = %2.4f",xmin,ymin,counter,ydev);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -