metoda najszybszego spadku


#include
#include
#include

using namespace std;

float f(float x1, float x2, float x3){
float funk;
funk=4*x1*x1+6*x2*x2+3*x3*x3-0.9*x1*x2-2.6*x1*x3-6.5*x2*x3-16*x1+36*x2+24*x3+644;
return funk;
};

int main(int argc, char *argv[])
{
float x1,x2,x3,eps,e,L1,a,b,xL,xR,k,poch1,
poch2,poch3,grad1,grad2,grad3,p,x10,x20,x30;
int i=0;
e=0.5;
printf ("podaj x1 x2 x3 E\n");
scanf("%f %f %f %f",&x1,&x2,&x3,&eps);

k=(sqrt(5)-1)/2;
p=10;
while( p > eps ){
i= i +1;
x10=x1;
x20=x2;
x30=x3;
a=-100; b=100;
poch1=8*x1-0.9*x2-2.6*x3-16;
poch2=12*x2-0.9*x1-6.5*x3+36;
poch3=6*x3-2.6*x1-6.5*x2+24;

grad1=-poch1;
grad2=-poch2;
grad3=-poch3;

while ((b-a)>e){

xL=b-k*(b-a); xR=a+k*(b-a);

if( f( x1+xL*grad1,x2+xL*grad2,x3+xL*grad3 ) > f(x1+xR*grad1 ,x2+xR*grad2,x3+xR*grad3) ){
a=xL;
}
else{
b=xR;
}

}
L1=(a+b)/2;
x1=x1+L1*grad1;
x2=x2+L1*grad2;
x3=x3+L1*grad3;

p = sqrt( (x10-x1)*(x10-x1) + (x20-x2)*(x20-x2) + (x30-x3)*(x30-x3) );

}
float wynik;
wynik=f(x1,x2,x3);
printf("%f, %f, %f\n wartosc=%f\ni=%d",x1,x2,x3,wynik,i);



system("PAUSE");
return EXIT_SUCCESS;
}

Wyszukiwarka

Podobne podstrony:
Wyznaczanie przyspieszenia ziemskiego metoda spadku swobodne
32 Wyznaczanie modułu piezoelektrycznego d metodą statyczną
całkowanie num metoda trapezów
OSWIADCZENIE O PRZYJECIU SPADKU Z DOBRODZIEJSTWEM INWENTARZA
Metoda kinesiotapingu w wybranych przypadkach ortopedycznych
D Kierzkowska Metoda na wagę złota
Badanie czystości metodą klasyczną
Metoda symboliczna
Metoda Hahna
Przystawka do spawania aluminium metoda TIG cz3
Metoda Rungego Kutty
PORÓWNANIE TECHNOLOGI ŁĄCZENIA MASZYN METODĄ KLEJENIA METODA
Metoda 10 10 10

więcej podobnych podstron