Está en la página 1de 16

Programas hechos con el lenguaje de programa C++.

Programas que aproximan la raíz de una función con los métodos.

Cerrados: Grafico, Bisección, Falsa Posición.


Abiertos: Iteración de Punto Fijo, Newton Raphson y secante.
// Programa que tabula una función codificada
// en la función f()

#include<iostream>
#include<windows.h>
#include<iomanip> // Manipuladores de flujo parametrizados
#include<cmath>
double f(double);

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision; // Asigna la precisión de la salida numérica.
using std::setw;

int main()
{
double xi, xf, Dx, x, y;

system("cls");
system("color F0");
gotoxy(15,2);
cout<<"Programa que tabula una funcion en el rango [xi, xf]"<<endl;
gotoxy(15,4);
cout<<"con incrementos Dx." << endl;
gotoxy(15,6);
cout<<"Escriba los datos que se solicitan."<<endl;
gotoxy(15,8);
cout<<"xi = "; cin>> xi;
gotoxy(15,10);
cout<<"xf = "; cin>> xf;
gotoxy(15,12);
cout<<"Dx = "; cin>> Dx;
cout<< endl << setw(18) << "x" << setw(8) << "|" << setw(8) << "y" <<
endl;
cout<< "\t -------------------------------" << endl;
while (xi <= xf)
{
y = f(xi);
cout<< setprecision(6) << fixed <<setw(20) << xi <<
setw(6)<<"|" << setw(13) << y << endl;
xi += Dx;
}
cout<<endl<<"\t\t";
system("pause");
return 0;
}

double f(double x)
{
return pow(x,4)-8.0*pow(x,3)-35.0*pow(x,2)+450*x-1001;
}
// Método de bisección para aproximar raíces de funciones no lineales
#include<iostream>
#include<windows.h>
#include<iomanip>
#include<cmath>

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision;

double biseccion(double, double, double);


double fx(double);

main ()
{
double x1, x2, a, b, Es, Ea;
system("cls");
system("color F0");
gotoxy(15,2);
cout<<"Metodo de la Bisección o Bolzano para";
gotoxy(15,3);
cout<<"aproximar raices de funciones no lineales.";
gotoxy(15,5);
cout<<"Escriba los datos que se solicitan.";
gotoxy(15,6);
cout<<"Limites del intervalo que encierra la raiz:";
gotoxy(15,8);
cout<<"a = "; cin>> a;
gotoxy(15,9);
cout<<"b = "; cin>> b;
if (fx(a)*fx(b) <= 0)
{
gotoxy(15,11);
cout<<"Escribe el error sujerido, Es = "; cin>>Es;
biseccion(a, b, Es);
}
else
{
gotoxy(15,12);
cout<<"Cuidado en el intervalo ["<< a <<", "<< b <<"] "<<"no hay ninguna raiz.";
gotoxy(15,13);
cout<<"Proponga un nuevo intervalo.";
}
gotoxy(15,17);
system("pause");
}

double biseccion(double a, double b, double Es)


{
double x1, x2, Ea;
x1 = (a+b)/2;
do
{
if (fx(a)*fx(x1) < 0)
b = x1;
if (fx(a)*fx(x1) > 0)
a = x1;
if (fx(a)*fx(x1) == 0)
{
gotoxy(15,13);
cout<<"La raiz exacta es: "<< setprecision(8)<< fixed <<x1;
gotoxy(15,15);
system("pause");
return 0;
}
x2 = (a+b)/2;
Ea = fabs((x2-x1)/x2)*100;
x1 = x2;
}
while (Ea > Es);
gotoxy(15,13);
cout<<"La raiz aproximada es: "<<setprecision(10)<<fixed<<x2;
gotoxy(15,15);
cout<<"El error aproximado porcentual alcanzado es:
"<<setprecision(10)<<fixed<<Ea<<endl<<endl;
return 0;
}

double fx(double x)
{
// Escriba aqu{i la función debidamente codificada.
return 9.0*exp(-x)*cos(2.0*M_PI*x)-3;
}
// Método de la Falsa Posicion o Regula Falsi o Interpolacion Lineal
// para aproximar raíces de funciones no lineales

#include<iostream>
#include<windows.h>
#include<iomanip>
#include<cmath>

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision;
double R_Falsi(double, double, double);
double fx(double);

int main ()
{
double x1, x2, a, b, Es, Ea;
system("cls");
system("color F0");
gotoxy(15,2);
cout<<"Metodo de la Falsa Posicion para";
gotoxy(15,3);
cout<<"aproximar raices de funciones no lineales.";
gotoxy(15,5);
cout<<"Escriba los datos que se solicitan.";
gotoxy(15,6);
cout<<"Limites del intervalo que encierra la raiz:";
gotoxy(15,8);
cout<<"a = "; cin>> a;
gotoxy(15,9);
cout<<"b = "; cin>> b;
if (fx(a)*fx(b) <= 0)
{
gotoxy(15,11);
cout<<"Escribe el error sujerido, Es = "; cin>>Es;
R_Falsi(a, b, Es);
}
else
{
gotoxy(15,12);
cout<<"Cuidado en el intervalo ["<< a <<", "<< b <<"] "<<"no hay ninguna raiz.";
gotoxy(15,13);
cout<<"Proponga un nuevo intervalo.";
}
gotoxy(15,17);
system("pause");
return 0;
}

double R_Falsi(double a, double b, double Es)


{
double x1, x2, Ea;
x1 = b-fx(b)*(a-b)/(fx(a)-fx(b));
do
{
if (fx(a)*fx(x1) < 0)
b = x1;
if (fx(a)*fx(x1) > 0)
a = x1;
if (fx(a)*fx(x1) == 0)
{
gotoxy(15,13);
cout<<"La raiz exacta es: "<< setprecision(8)<< fixed <<x1;
gotoxy(15,15);
system("pause");
return 0;
}
x2 = b - fx(b)*(a-b)/(fx(a)-fx(b));
Ea = fabs((x2-x1)/x2)*100;
x1 = x2;
}
while (Ea > Es);
gotoxy(15,13);
cout<<"La raiz aproximada es: "<<setprecision(10)<<fixed<<x2;
gotoxy(15,15);
cout<<"El error aproximado porcentual alcanzado es:
"<<setprecision(10)<<fixed<<Ea<<endl<<endl;
return 0;
}

double fx(double x)
{
// Escriba aqu{i la función debidamente codificada.
return 9.0*exp(-x)*cos(2.0*M_PI*x)-3;
}

// Método de Punto Fijo o de las sustituciones Sucesivas,


// para aproximar raíces de funciones.

#include<iostream>
#include<conio.h>
#include<iomanip>
#include<math.h>
#include<windows.h>

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision;

double gx(double);

main ()
{
int i, ni;
double x0, x1, Es, Ea, fx1;
system("cls");
system("color F0");
gotoxy(15, 2);
cout<<"Metodo de Punto Fijo (Iteración de punto fijo)";
gotoxy(15,3);
cout<<"para dar solucion a una ecuación no lineal.";
gotoxy(15, 5);
cout<<"Escriba la primera aproximacion: ";
gotoxy(15,7);
cout<<"x0 = "; cin>>x0;
gotoxy(15,8);
cout<<"Escriba el Error sugerido:";
gotoxy(15, 9);
cout<<"Es = "; cin>>Es;
gotoxy(15,10);
cout<<"Escribe el número de iteraciones maximo:";
gotoxy(15,11);
cout<<"ni = "; cin>>ni;
Ea = 100;
i = 0;
while (Ea > Es && i < ni)
{
x1 = gx(x0);
Ea = fabs((x1 - x0)/x1)*100;
x0 = x1;
i++;
}
if (Ea <= Es)
{
gotoxy(15,13);
cout<<"Despues de " << i << " iteraciones.";
gotoxy(15,14);
cout<<"La raíz aproximada es: "<<setprecision(10)<<fixed<<x1<<endl;
}
else
{
gotoxy(15, 13);
cout<<"Despues de " << i <<" iteraciones no hay convergencia.";
gotoxy(15,14);
cout<<"El valor de x alcanzado es: "<<setprecision(10)<<fixed<<x1;
}
gotoxy(15, 16);
system("pause");
}

double gx(double x)
{
//Escriba aqui la función. g(x), debidamente codificada.
return 35*15/(9.8*(1.0-exp(-15.0/x*9.0)));
}

// Programa que resuelve un sistema no lineal de ecuaciones


// utilizando el Método de Nw de la matriz Jacobiana.
#include<iostream>
#include<windows.h>
#include<iomanip> // Manipuladores de flujo parametrizados
#include<cmath>

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision; // Asigna la precisión de la salida numérica.
using std::setw;

double fx(double);
void funcion(double, double&, double&);

const double pi = 3.14159265358;

main()
{
double x0, x1, fx, dfx, Es, Ea;
int i, ni;
system("cls");
system("color F0");
gotoxy(15, 2);
cout<<"Metodo de Newton-Raphson (o de las tangentes)";
gotoxy(15, 3);
cout<<"para dar solucion a una ecuación no lineal.";
gotoxy(15, 5);
cout<<"Escriba la primera aproximacion: ";
gotoxy(15, 6);
cout<<"x0 = "; cin>>x0;
gotoxy(15, 7);
cout<<"Escriba el Error sugerido:";
gotoxy(15, 8);
cout<<"Es = "; cin>>Es;
gotoxy(15, 9);
cout<<"Escribe el número de iteraciones maximo:";
gotoxy(15, 10);
cout<<"ni = "; cin>>ni;
Ea = 100;
i = 0;

while (Ea > Es && i < ni)


{
funcion(x0, fx, dfx);
x1 = x0 - fx/dfx;
Ea = fabs((x1 - x0)/x1)*100;
x0 = x1;
i++;
}
if (Ea <= Es)
{
gotoxy(15, 12);
cout<<"Despues de " << i << " iteraciones.";
gotoxy(15, 13);
cout<<"La raíz aproximada es: "<<setprecision(10)<<fixed<<x1;
}
else
{
gotoxy(15, 12);
cout<<"Despues de " << i <<" iteraciones no hay convergencia.";
gotoxy(15, 13);
cout<<"El valor de x alcanzado es: "<<setprecision(10)<<fixed<<x1;
}

gotoxy (15, 15);


system("pause");
}

double fx(double x)
{
return 9.0*exp(-x)*cos(2.0*M_PI*x)-3;;
}

void funcion(double x, double& f, double& df)


{
double fxh, h = 0.000000001;
f = fx(x);
x = x + h;
fxh = fx(x);
df = (fxh - f)/h;
}

// Método de la Secante,
// para aproximar raíces de funciones.

#include<iostream>
#include<conio.h>
#include<iomanip>
#include<math.h>
#include<windows.h>
void gotoxy(int column, int line)
{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision;

double fx(double);

main ()
{
int i, ni;
double x0, x1, x2, Es, Ea;
system("cls");
system("color F0");
gotoxy(15, 2);
cout<<"Metodo de la Secante";
gotoxy(15, 3);
cout<<"para dar solucion a una ecuacion no lineal.";
gotoxy(15, 5);
cout<<"Escriba la primera aproximacion: ";
gotoxy(15, 6);
cout<<"x0 = "; cin>>x0;
gotoxy(15, 7);
cout<<"Escriba la segunda aproximacion: ";
gotoxy(15, 8);
cout<<"x1 = "; cin>>x1;
gotoxy(15, 9);
cout<<"Escriba el Error sugerido:";
gotoxy(15, 10);
cout<<"Es = "; cin>>Es;
gotoxy(15, 11);
cout<<"Escribe el número de iteraciones maximo:";
gotoxy(15, 12);
cout<<"ni = "; cin>>ni;
Ea = 100;
i = 0;
while (Ea > Es && i < ni)
{
x2 = x1-fx(x1)*(x0 - x1)/(fx(x0) - fx(x1));
Ea = fabs((x1 - x0)/x1)*100;
x0 = x1;
x1 = x2;
i++;
}
if (Ea <= Es)
{
gotoxy(15, 14);
cout<<"Despues de " << i << " iteraciones.";
gotoxy(15, 15);
cout<<"La raíz aproximada es: "<<setprecision(10)<<fixed<<x1;
}
else
{
gotoxy(15, 14);
cout<<"Despues de " << i <<" iteraciones no hay convergencia.";
gotoxy(15, 15);
cout<<"El valor de x alcanzado es: "<<setprecision(10)<<fixed<<x1;
}
gotoxy(15, 17);
system("pause");
}

double fx(double x)
{
//Escriba aqui la función. g(x), debidamente codificada.
return 9.0*exp(-x)*cos(2.0*M_PI*x)-3;;
}

// Método de Newton-Raphson de segundo orden para aproximar,


// raíces de funciones con raices multiples e iguales.

#include<iostream>
#include<conio.h>
#include<iomanip>
#include<math.h>
#include<windows.h>

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision;

void fx_dfx_d2fx(double);

double fx, dfx, d2fx;

main ()
{
int i, ni;
double x0, x1, Es, Ea;
system("cls");
system("color F0");
gotoxy(15, 2);
cout<<"Metodo de Newton-Raphson de segundo orden";
gotoxy(15, 3);
cout<<"para aproximar raices multiples e iguales.";
gotoxy(15, 5);
cout<<"Escriba la primera aproximacion: ";
gotoxy(15, 6);
cout<<"x0 = "; cin>>x0;
gotoxy(15, 7);
cout<<"Escriba el Error sugerido:";
gotoxy(15, 8);
cout<<"Es = "; cin>>Es;
gotoxy(15, 9);
cout<<"Escribe el numero de iteraciones maximo:";
gotoxy(15, 10);
cout<<"ni = "; cin>>ni;
Ea = 100;
i = 0;
while (Ea > Es && i < ni)
{
fx_dfx_d2fx(x0);
x1 = x0 - fx*dfx/(pow(dfx, 2.0) - fx * d2fx);
Ea = fabs((x1 - x0)/x1)*100;
x0 = x1;
i++;
}
if (Ea <= Es)
{
gotoxy(15, 12);
cout<<"Despues de " << i << " iteraciones.";
gotoxy(15, 13);
cout<<"La raíz aproximada es: "<<setprecision(10)<<fixed<<x1;
}
else
{
gotoxy(15, 12);
cout<<"Despues de " << i <<" iteraciones no hay convergencia.";
gotoxy(15, 13);
cout<<"El valor de x alcanzado es: "<<setprecision(10)<<fixed<<x1;
}
gotoxy(15, 16);
system("pause");
}

void fx_dfx_d2fx(double x)
{
// Escriba aui la funcion, su primera derivada y su segunda derivada.
fx = pow(x, 3.0)-0.7543752*pow(x, 2.0)-6.566870414*x+8.44294381;
dfx = 3*pow(x, 2.0) - 1.5087504000111948698759078979492*x -
6.5668704140000000004165348066465;
d2fx = 6*x - 1.5087503999999999915182513632317;
}

// Método de la Secante Modificado para aproximar,


// raíces multiples e iguales de funciones.

#include<iostream>
#include<conio.h>
#include<iomanip>
#include<math.h>
#include<windows.h>

void gotoxy(int column, int line)


{
COORD coord;
coord.X=column;
coord.Y=line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::setprecision;
void fx_dfx(double, double&, double&);

main ()
{
int i, ni;
double x0, x1, x2, Es, Ea, fx0, dfx0, fx1, dfx1;
system("cls");
system("color F0");
gotoxy(15, 2);
cout<<"Metodo de la Secante modificado para aproximar";
gotoxy(15, 3);
cout<<"raices multiples e iguales de una ecuacion no lineal.";
gotoxy(15, 5);
cout<<"Escriba la primera aproximacion: ";
gotoxy(15, 6);
cout<<"x0 = "; cin>>x0;
gotoxy(15, 7);
cout<<"Escriba la segunda aproximacion: ";
gotoxy(15, 8);
cout<<"x1 = "; cin>>x1;
gotoxy(15, 9);
cout<<"Escriba el Error sugerido:";
gotoxy(15, 10);
cout<<"Es = "; cin>>Es;
gotoxy(15, 11);
cout<<"Escribe el numero de iteraciones maximo:";
gotoxy(15, 12);
cout<<"ni = "; cin>>ni;
Ea = 100;
i = 0;
while (Ea > Es && i < ni)
{
fx_dfx(x0, fx0, dfx0);
fx_dfx(x1, fx1, dfx1);
x2 = x1-fx1*dfx0*(x0 - x1)/(dfx1 * fx0 - dfx0*fx1);
Ea = fabs((x1 - x0)/x1)*100;
x0 = x1;
x1 = x2;
i++;
}
if (Ea <= Es)
{
gotoxy(15, 14);
cout<<"Despues de " << i << " iteraciones.";
gotoxy(15, 15);
cout<<"La raíz aproximada es: "<<setprecision(10)<<fixed<<x1;
}
else
{
gotoxy(15, 14);
cout<<"Despues de " << i <<" iteraciones no hay convergencia.";
gotoxy(15, 15);
cout<<"El valor de x alcanzado es: "<<setprecision(10)<<fixed<<x1;
}
gotoxy(15, 20);
system("pause");
}

void fx_dfx(double x, double& f, double& df)


{
f = pow(x, 3.0)-0.7543752*pow(x, 2.0)-6.566870414*x+8.44294381;
df = 3*pow(x, 2.0) - 1.5087504*x - 6.566870414;
}

También podría gustarte