Está en la página 1de 6

//Programa del metodo de biseccion para optimizacion de una funcion de una variable

#include<stdio.h>
#include<math.h>
main()
{
int n=1;
double Xa,Xb,Xm,Xl,Xr,fXa,fXb,fXm,fXl,fXr,tol;
printf("\tPrograma que aproxima el optimo de la funcion (e^x^2)-Ln(x)+Sin(2x-1)\n\n\n");
printf("\tIntroduzca el intervalo [a,b] para buscar el optimo: \n\n\ta= ");
scanf("%lf",&Xa);
printf("\n\tb= ");
scanf("%lf",&Xb);
printf("\n\n\tIntroduzca la tolerancia: ");
scanf("%lf",&tol);
do
{
Xm=(Xa+Xb)/2;
Xl=(Xa+Xm)/2;
Xr=(Xm+Xb)/2;
fXa=exp(Xa*Xa)-log(Xa)+sin((2*Xa)-1);
fXb=exp(Xb*Xb)-log(Xb)+sin((2*Xb)-1);
fXm=exp(Xm*Xm)-log(Xm)+sin((2*Xm)-1);
fXl=exp(Xl*Xl)-log(Xl)+sin((2*Xl)-1);
fXr=exp(Xr*Xr)-log(Xr)+sin((2*Xr)-1);
printf("\n\nIteracion %d:\n\nXa= %lf\tf(Xa)= %lf",n,Xa,fXa);
printf("\nXl= %lf\tf(Xl)= %lf",Xl,fXl);
printf("\nXm= %lf\tf(Xm)= %lf",Xm,fXm);
printf("\nXr= %lf\tf(Xr)= %lf",Xr,fXr);
printf("\nXb= %lf\tf(Xb)= %lf",Xb,fXb);
n=n+1;
if( (fXa<fXb) || (fXl<fXr) )
{
Xb=Xm;
}
else
{
Xa=Xm;
}
}
while(fabs(Xb-Xa)>tol);
printf("\n\n\tOptimo: X = %lf\tf(x) = %lf\n\n",Xm,fXm);
system("PAUSE");
}

//Programa del metodo de fibonacci para optimizacion de una funcion de una variable
#include<stdio.h>
#include<math.h>
main()
{
int n,i=1,j=1;
double F[50],X1,X2,Xa,Xb,fXa,fXb,fX1,fX2,tol,L,z;
printf("\tPrograma que aproxima el optimo de la funcion x-4x-12\n\n");
printf("\tIntroduzca el intervalo [a,b] para buscar el optimo: \n\n\ta= ");
scanf("%lf",&Xa);
printf("\n\tb= ");
scanf("%lf",&Xb);
L=Xb-Xa;
printf("\n\tL= %.2lf",L);
printf("\n\n\tIntroduzca la tolerancia: ");
scanf("%lf",&tol);
z=L/tol;
F[0]=1;
F[1]=1;
do
{
i=i+1;
F[i]=F[i-1]+F[i-2];
}
while(F[i]<=z);
n=i;
F[n]=F[i]+F[i-1];
do
{
X1=Xa+(F[n-2]/F[n])*L;
X2=Xa+(F[n-1]/F[n])*L;
fXa=(Xa*Xa)-(4*Xa)-12;
fXb=(Xb*Xb)-(4*Xb)-12;
fX1=(X1*X1)-(4*X1)-12;
fX2=(X2*X2)-(4*X2)-12;

printf("\n\nIteracion %d:\n\n\tXa= %.10lf\tf(Xa)= %.10lf",j,Xa,fXa);


printf("\n\tX1= %.10lf\tf(X1)= %.10lf",X1,fX1);
printf("\n\tX2= %.10lf\tf(X2)= %.10lf",X2,fX2);
printf("\n\tXb= %.10lf\tf(Xb)= %.10lf",Xb,fXb);
n=n-1;
if( (fXa<fXb) || (fX1<fX2) )
{
Xb=X2;
}
else
{
Xa=X1;
}
L=Xb-Xa;
j++;
}
while(n>=2);
X1=Xa+(L/2);
fX1=(X1*X1)-(4*X1)-12;
printf("\n\n\tOptimo: X = %lf\tf(x) = %lf\n\n",X1,fX1);
}

/Programa que aproxima una funcion de una variable mediante el metodo de interpolacion cuadratica
#include<stdio.h>
#include<math.h>
main()
{
int j=1;
double X1,X2,X3,f1,f2,f3,fv,a0,a1,a2,v,tol,L;
printf("\tPrograma que aproxima el optimo de la funcion 2x+16/x\n\n");
printf("\tIntroduzca el intervalo [a,b] para buscar el optimo: \n\n\ta= ");
scanf("%lf",&X1);
printf("\n\tb= ");
scanf("%lf",&X3);
printf("\n\n\tIntroduzca la tolerancia: ");
scanf("%lf",&tol);
do
{
X2=(X1+X3)/2;
f1=2*(X1*X1)+(16/X1);
f2=2*(X2*X2)+(16/X2);
f3=2*(X3*X3)+(16/X3);

a0=f1;
a1=((f2-f1)/(X2-X1));
a2=(((f3-f1)/(X3-X1))-a1)/(X3-X2);
v=(a2*(X1+X2)-a1)/(2*a2);
fv=2*(v*v)+(16/v);
printf("\n\nIteracion %d:\n\n\tX1= %.10lf\tf(X1)= %.10lf",j,X1,f1);
printf("\n\tX2= %.10lf\tf(X2)= %.10lf",X2,f2);
printf("\n\tX3= %.10lf\tf(X3)= %.10lf",X3,f3);
printf("\n\tV = %.10lf\tf( V)= %.10lf",v,fv);
if( f1<f3 )
{
X3=X2;
}
else
{
X1=X2;
}
L=X3-X1;
j++;
}
while(L>tol);
printf("\n\n\tOptimo: X = %lf\tf(x) = %lf\n\n",v,fv);
}

//Programa que optimiza una funcion de una variable mediante el metodo de newton
#include<stdio.h>
#include<math.h>
main()
{
int j=1;
double X0,df,f,ddf,X,tol;
printf("\tPrograma que aproxima el optimo de la funcion (x-1)^4\n\n");
printf("\tIntroduzca una aproximacion al optimo X0 = ");
scanf("%lf",&X0);
printf("\n\n\tIntroduzca la tolerancia: ");
scanf("%lf",&tol);
do
{
f=pow((X0-1),4);
df=4*pow((X0-1),3);
ddf=12*(X0-1)*(X0-1);
X=(X0-(df/ddf));

printf("\n\n\tX%d = %.10lf\tf(X%d)= %.10lf",j,X,j,f);


j++;
X0=X;
}
while(fabs(df)>tol);
printf("\n\n\tOptimo: X = %lf\tf(x) = %lf\n\n",X,f);
}

//Programa que optimiza una funcion de una variable mediante el metodo de quasi-newton
#include<stdio.h>
#include<math.h>
main()
{
int j=2;
double X0,X1,df0,df1,f,X,tol;
printf("\tPrograma que aproxima el optimo de la funcion (x-1)^4\n\n");
printf("\tIntroduzca una aproximacion al optimo X0 = ");
scanf("%lf",&X0);
printf("\tIntroduzca una aproximacion al optimo X1 = ");
scanf("%lf",&X1);
printf("\n\n\tIntroduzca la tolerancia: ");
scanf("%lf",&tol);
do
{
df1=4*pow((X1-1),3);
df0=4*pow((X0-1),3);
X=(X1-(df1*(X1-X0)/(df1-df0)));
f=pow((X-1),4);
printf("\n\n\tX%d = %.10lf\tf(X%d)= %.10lf",j,X,j,f);
j++;
X0=X1;
X1=X;
}
while(fabs(df1)>tol);
printf("\n\n\tOptimo: X = %lf\tf(x) = %lf\n\n",X,f);
}

//Programa del metodo de la seccion dorada para optimizacion de una funcion de una variable
#include<stdio.h>
#include<math.h>

main()
{
int j=1;
double n,X1,X2,a,b,fXa,fXb,fX1,fX2,tol,L,z,k=0.618034;
printf("\tPrograma que aproxima el optimo de la funcion x+2x\n\n");
printf("\tIntroduzca el intervalo [a,b] para buscar el optimo: \n\n\ta= ");
scanf("%lf",&a);
printf("\n\tb= ");
scanf("%lf",&b);
L=b-a;
printf("\n\tL= %.2lf",L);
printf("\n\n\tIntroduzca la tolerancia: ");
scanf("%lf",&tol);
n=1+(log(tol/L)/log(k));
do
{
X1=a+(1-k)*L;
X2=a+(k*L);
fXa=(a*a)+2*a;
fXb=(b*b)+2*b;
fX1=(X1*X1)+2*X1;
fX2=(X2*X2)+2*X2;
printf("\n\nIteracion %d:\n\n\tXa= %.10lf\tf(Xa)= %.10lf",j,a,fXa);
printf("\n\tX1= %.10lf\tf(X1)= %.10lf",X1,fX1);
printf("\n\tX2= %.10lf\tf(X2)= %.10lf",X2,fX2);
printf("\n\tXb= %.10lf\tf(Xb)= %.10lf",b,fXb);
if( (fXa<fXb) || (fX1<fX2) )
{
b=X2;
}
else
{
a=X1;
}
L=b-a;
j++;
}
while(j<=n);
printf("\n\n\tOptimo: X = %lf\tf(x) = %lf\n\n",X1,fX1);
}

También podría gustarte