Скачиваний:
14
Добавлен:
01.05.2014
Размер:
1.85 Кб
Скачать
#include <iostream.h>
#include <math.h>
#include <conio.h>

double function(double x) {
	return (2*x*x+3*exp(-x));
}
double proizv(double x){
	return (4*x-3*exp(-x));
}


double SWANN(double& a, double& b,double& c) {
	double	shag=0.001,np=1;
	a=np;
	b=np+shag;
	if (function(a)<function(b)) {           //dvigenie nalevo
		shag=-shag;
		while (function(a)<function(b)) {
			shag=2*shag;
			np=np+shag;
			c=b;
			b=a;
			a=np;
		};

	} else
	if (function(a)>function(b)) {           //dvigenie napravo
		while (function(b)<function(a)) {
			shag=2*shag;
			np=np+shag;
			c=a;
			a=b;
			b=np;
			if (function(a)<function(b)) {
				a=c;
				c=b;
			};
		};

	}  //if


	return(0);
}
double dihotom(double& a,double& b){
		double min;
		double e=0.001;
		double d=0.999*e;
		int k=1;
		while (fabs(b-a)>e) {
			if (function(a+(b-a)/2-d/2)<function(a+(b-a)/2+d/2)) {
					b=a+(b-a)/2+d/2;
			}
				else {
						a=a+(b-a)/2-d/2;
				}
			k++;
		}

return ((a+b)/2);
}
double cubinterpol(double &a,double &b){
	double min,e,z,w,g;
	e=0.01;
	min=(a+b)/2;
	while (fabs(proizv(min))>e){
			z=proizv(a)+proizv(b)+3*(function(a)-function(b))/(a-b);
			w= sqrt(z*z-proizv(a)*proizv(b));
			g=(z-proizv(a)+w)/(proizv(b)-proizv(a)+2*w);
			if ((0<g)&&(g<1)) min=a+g*(b-a);
					else
							if (g<=0) min=a;
									else
											if (g>=1) min=b;
			if (fabs(proizv(min))>e) {
					if (proizv(min)>0) b=min;
						else
						if (proizv(min)<0)	a=min;
							else  cout<<"proizv=0";
			}
	}

	return min;
}

main(){
	double x,a,b,c;
	clrscr();
	SWANN(a,b,c);
	cout<<"SWENN:      "<<a<<"..."<<c<<"\n";
	b=c;
	dihotom(a,b);
	cout<<"Dihotomii:  "<<a<<"..."<<b<<"\n";
	cout<<"     Cubinterpol:\n";
	cout<<"minimum:    "<<cubinterpol(a,b)<<"\n";
			return(0);
}
Соседние файлы в папке all