Sie sind auf Seite 1von 12

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE TLÁHUAC

Sánchez Flores Victor Hugo


Vargas Sánchez Alejandro Isaac
Santiago Espinosa Jesús Armando

MÉTODOS NUMÉRICOS
M. EN C. JORGE MARTÍNEZ VALDEZ

GRUPO: 3M3

software utilizado: c++


tercer departamental
(PROGRAMAS)

1
Método de bisección
cout.setf(ios::fixed);
#include <iostream>
cout.setf(ios::showpoint);
#include <iomanip>
cout.setf(ios::showpos);
#include <math.h>
cout.precision(10);
#define f1(x)
raiz=biseccion(xi, xu ,es, iter);

cout<<"la raiz es:" <<setprecision(10)<<raiz;


double biseccion(double xi, double xu, double
es, int iter); return 0;

using namespace std; double biseccion(double xi, double xu,double


es, int iter)

int main()
{
{

int iter;
int contador=1;

double xr1, xr2, Ea, yi, yu ,yr;


double es, xi, xu, raiz ;

cout<<"------Programa para metodo de


cout<<"iteracion"<<setw(10)<<"xi"<<setw(10)
bisección-------- \n";
<<"xu"<<setw(10)<<"xr"<<setw(10)<<"Ea"<<s
cout<<"**nota : se especifica un nuemero de etw(10)<<"yi"<<
iteraciones para proteger\n";
setw(10)<<"yu"<<setw(10)<<"yr"<<endl;
cout<<"si el metodo converge antes el
do{
programa hara una notificación\n";

cout<<"intervalo inferio(xi):";
xr1=(xi+xu)/2;
cin>>xi; cout<<"\n";
yi=f1(xi);
cout<<"intervalo superio(xu)";
yu=f1(xu);
cin>>xu; cout<<"\n";
yr=f1(xr1);
cout<<"error de convergencia (dado por una
unidad): ";

cin>>es; cout<<"\n";

cout<<"Numero de iteraciones(de preferencia


use un número entre 100 y 150):";

2
Ea=fabs(double(xr2-xr1)/(xr2));
cout<<setw(5)<<contador<<setw(15)<<xi<<set
contador++;
w(10)<<xr1<<setw(10)<<Ea<<setw(10)<<yi<<
}while((Ea>es)&&(contador<=iter));
setw(10)<<yu<<setw(10)<<yr<<endl;

cout<<(5)<<contador<<setw(15)<<xi<<setw(1
if ((yi*yr)<0) 0)<<xu<<setw<<(10)<<xr2<<setw(10)<<yi<<

{ setw(10)<<yu<<setw(10)<<yr<<endl;

xu=xr1;

} if(contador>iter)

cout<<"el método no converge para


las"<<iter<<"iteraciones indicadas. Aumente
else if((yi+yr)>0)
el numero de \n"<<
{
"iteraciones, use un intervalo que cierre ala
raiz o en su defecto; use otro métdo númerico
\ n";
xi=xr1;

cout<<"el metodo converge


} a"<<contador<< "iteraciones. \n ";

return xr2;
else if(yr==0) }

{ }

return xr1;

Ea=0.0;

xr2=(xi*xu)/2;

3
Eliminación Gaussiana
cout<<"1)introduce el vector de terminos
#include<iostream>
independientes\n";
#include<iomanip>

#include<math.h>
leevec(vecinde,dimension);
const int M=3;

cout<<"2)introduce la matriz de terminos


void leevec(double vector[],int dimension); dependientes\n";

void leematriz(double matriz[][M],int N);

void eliminacio_gaussiana(double u[][M], leematriz(matdepend,dimension);


double y[], int N);

eliminacio_gaussiana(matdepend, vecinde,
dimension);

using namespace std;

int main() }

{ void eliminacio_gaussiana(double
u[][M],double y[],int N)

{
int dimension=M ;
for(int k=0; k<N-1;k++)
double vecinde[dimension],
matdepend[dimension][M], sol[dimension];
{

cout.setf(ios::fixed); for(int i=k+1;i<N;i++)

cout.setf(ios::showpoint);

cout.setf(ios::showpos); {

cout.precision(4); if(u[k][k]==0)

cout<<"-----programa de eliminacion {
gaussiana-----\n";

4
int p=k+1; ++p;

} while(p<M);

do{

if(u[p][k] !=0 ) if(p==M)

double aux[M], aux2; cout<<"no hay solucion, o hay multiples


soluciones, las variables son L.D\n";

for(int q=0;q<M;q++)
}

{
y[i]=(y[i])-((u[i][k])*(y[k])/u[k][k]);

aux[q]=u[k][q];
for (int j=N-1; j>=k;j--)
u[k][q]=u[p][q];
u[i][j]=(u[i][j]-u[i][j]*u[k][j])/u[k][k];
u[p][q]=aux[q];

}
}

}
aux2=y[k];
cout<<"la matriz triangular superior es :\n";
y[k]=y[p];
for(int i=0;i<N;i++)
y[p]=aux2;

{
cout<<"se intercambia la
fila"<<k+1<<"con la fila"<<p+1<<endl; for(int j=0;j<M;j++)

break; {

cout<<"u"<<"["<<i+1<<"]"<<"["<<j+1<<"]="<<
}
u[i][j]<<setw(3);

else

5
} {

cout<<endl;

cout<<"b"<<"["<<i+1<<"]"<<vector[i]<<endl;

} }

cout<<"vector independiente Y :\n";

for(int i=0;i<N;i++)

{ void leematriz(double matriz[][M],int N)

cout<<"y"<<"["<<i+1<<"]"<<y[i]<<endl;

} for(int i=0;i<N;i++)

void leevec(double vector[],int dimension) {

{ for(int j=0;j<M;j++)

for(int i=0;i<dimension;i++)

{ cout<<"A"<<"["<<i+1<<"]"<<"["<<j+1<<"]=";

cin>>matriz[i][j];

cout<<"b"<<"["<<i+1<<"]=";

cin>>vector[i];

cout<<"vector de termino independientes\n";

for(int i=0;i<<dimension;i++)

6
cout<<"matriz de terminos
dependedientes\n";

for(int i=0;i<N;i++)

for(int j=0;j<M;j++)

cout<<"A"<<"["<<i+1<<"]"<<"["<<j+1<<"]"<
<matriz[i][j]<<setw(3);

cout<<endl;

7
Derivación numérica de
tres puntos
#include <iostream>

#include <iomanip>

#include <math.h>

using namespace std;

int main()

double x0, x1, x2, h, resultado = 0;

cout<<"ingresa el valor x0"<<endl;

cin>>x0;

cout<<"ingresa el valor x1"<<endl;

cin>>x1;

cout<<"ingresa el valor x2"<<endl;

cin>>x2;

cout<<"ingresa el valor h"<<endl;

cin>>h;

cout.setf(ios::fixed);

cout.precision(6);

resultado=(-3*(x0)+4*(x1)-(x2))/(2*h);

cout<<"El valor aproximado es:


\n"<<resultado<<endl;

8
printf("Solucion aproximada P = %12.8f\n", P);
MÉTODO DE PUNTO
printf("Numero de iteraciones N = %d\n", i);
FIJO.
printf("Tolerancia TOL = %5.11f\n\n", TOL);
#include <stdio.h>
OK = 0;
#include <math.h>
}
#include <conio.h>
else{
#define e 2.718281828
//paso 5
double fun (double);
i++;
main (){
//paso 6
double P0,TOL,P,b;
P0 = P;
int i, N, OK;
}

}
printf ("Metodo Punto Fijo\n");
//paso 7
printf("Aproximacion inicial P0: ");
if(OK == 1)
scanf ("%lf", &P0);
printf("\n\nEl metodo fallo con un numero de
printf("Tolerancia TOL: "); iteraciones N = %d\n\n", N);
scanf("%lf", &TOL); return 0;
printf("Numero maximo de iteraciones: "); }
scanf("%d", &N); double fun(double x){
//paso 1 double a;
i = 1; a = (x*x*x)+4*pow (x,2)-10;
OK = 1; getch ();
//paso 2 return a;
printf("\n\nI\t\tP\n"); }
while(i <= N && OK == 1){ }
//paso 3 return 0 ;
P = fun (P0);

printf("%d\t%12.8f\n", i, P); }
//paso 4

b = fabs(P - P0);

if(b < TOL){

9
xn = xi - (F1dxn*Fxn / ((F1dxn-
Método de newton raphson Fxn),2)*F2dxn);
modificado. k += 1;
#include <stdio.h> printf( "\niteracion = %d", k );
#include <conio.h> printf( "\nxi = %f\nxn = %f", xi, xn, Fxn,
#include <cmath.h> F1dxn, F2dxn );

float Abs( float x ){ } while(Abs(Fxn) > E);

return x>=0? x:-x; printf( "\n\nxn +- xini = %f\n", xn -(xi) );

}; printf( "solucion final e: %f\n", xn );


getch();

int main(){ return 0;

float solucion = 0, xi = 0, xn = 0, Fxn = 0, }


F1dxn = 0,F2dxn=0, E = 0;
int k = 0;
printf("\t\tNEWTON RAPHSON
MODIFICADO:\n");
printf("para la
funcion:2*pow(xi,3)+3*pow(xi,2)\n");
printf( "Digite x inicial: " );
scanf( "%f", &xn );
printf( "Digite precision: " );
scanf( "%f", &E );

do{

xi = xn;
Fxn = 2*pow(xi,3)+3*pow(xi,2);
F1dxn = 6*pow(xi,2)+6*xi;
F2dxn = 12*xi+6;

10
Conclusión
Con este programas y con los métodos analizados dentro de las
clases ahora podemos realizar cada uno de los métodos aprendidos
pero de una manera mucho más fácil ya que como sabemos la
programación te resuelve tus problemas en pocos segundos, Con lo
poco aprendido de programación en lenguaje c++ realizamos
programas para facilitarnos los métodos de derivación numérica de
3 puntos Newton Raphson ,Bisección, Eliminación Gaussiana, Bueno
con eso también llegamos a la conclusión de comprobar si
verdaderamente realizamos los métodos de manera correcta pero
ahora sería mucho más rápido y eficaz paro obtener resultados más
exactos.

11
12