Vous êtes sur la page 1sur 13

Mtodos Numricos.

Me todos Nume ricos.




Universidad Antonio Nario, 2014
Especializacin en Diseo Mecnico
Deiber Ruidiaz
Gustavo Barcasnegras
Solucin a ecuaciones de una variable
Un mtodo iterativo trata de resolver un problema (como una ecuacin o un sistema de
ecuaciones) mediante aproximaciones sucesivas a la solucin, empezando desde una
estimacin inicial.
Esta aproximacin contrasta con los mtodos directos, que tratan de resolver el problema
de una sola vez (como resolver un sistema de ecuaciones Ax=b encontrando la inversa de
la matriz A).
Los mtodos iterativos son tiles para resolver problemas que involucran un nmero
grande de variables (a veces del orden de millones), donde los mtodos directos tendran
un coste prohibitivo incluso con la potencia del mejor computador disponible.

Operacin Simple de punto Fijo

Los mtodos abiertos emplean una frmula para predecir una raz. Esta frmula puede
desarrollarse como una iteracin simple de punto fijo (tambin llamada iteracin de un
punto o sustitucin sucesiva o mtodo de punto fijo), al reordenar la ecuacin f(x) = 0 de
tal modo que x este del lado izquierdo de la ecuacin: x= g(x)

#include<iostream>
#include<complex>
int it,i,j,z,k,coe,l,f,n,u,op,sw,maxit;
int g[20],M[20],P[20];
double xi,xa,gxi,e,p,b,a,x,fa,fb,fp,tol,x0;
using namespace std;

void main()
{
system("color 17");
system("cls");
cout<<"\a POLINOMIO A DESARROLLAR \n ";
cout<<"Digite el Grado de la Ecuacion: ";cin>>n;
for(i=0;i<=n;i++)
{
cout<<"Digite el coeficiente " <<i<<": ";
cin>>g[i];
}
system("cls");
cout<<"El polinomio es:\n";
for(j=0;j<=n;j++)
{
cout<<g[j]<<"X^"<<j<<" + ";
}
cout<<("\nIngrese el valor de X0 ");
cin>>x0;
cout<<("\nIngrese Maxima Iteraciones: ");
cin>>maxit;
cout<<("\nIngrese Tolerancia: ");
cin>>tol;
sw=0;
it=0;
xa=0;

while((sw==0)&&(it<=maxit))
{
gxi=0;
for(j=0;j<=n;j++)
{
gxi=gxi+g[j]*pow(x0,j);
}
xi=gxi;
e=fabs(xi-x0);
if(e<=tol)
{
sw=1;
}
else{
it=it+1;
x0=xi;
}
cout<<it<<" "<<x0<<" "<<gxi<<" "<<e<<" "<<"\n";
}
if (sw==1)
{
cout<<"La raiz es: "<<xi;
}else{
cout<<"No Converge";
}
system("pause");
}

Mtodo de biseccin
Este mtodo es el ms sencillo de todos. Se basa en un sentido natural del hombre que
podra traducirse as: como el punto c esta entre a y b se podra decir que el punto c est
en el medio de a y b, es evidente que el punto ms sencillo de ubicar dentro del intervalo
a-b es exactamente en el punto medio.



Si bien la puesta en marcha de este mtodo es muy fcil de llevar a cabo, el nmero de
clculos que se debe realizar para alcanzar la precisin deseada suele ser muy elevado. El
nmero de iteraciones puede ser muy a priori evaluada a que en cada iteracin el valor
aproximado de la solucin cambia solamente en la cantidad
(n)
, en donde n representa el
nmero de iteraciones que se han realizado hasta este paso de clculo:



Esta expresin se deduce fcilmente que al constatar que en cada lazo, e intervalo [a,b],
se reduce a su mitad y luego a su mitad, etc.

#include<iostream>
#include<complex>
#include<math.h>

using namespace std;

void main()
{
int i,n,fx[10],sw;
double a,b,tol,acum,xant,xmedia,error,fxmedia;
sw=0;
xant=0;
xmedia=0;
fxmedia=0;
cout<<"Grado: ";
cin>>n;
for (i=0;i<=n;i++)
{
cout<<"Digite el valor de la funcin cuando x vale "<<i<<" ;";
cin>>fx[i];
}
cout<<"Digite el lmite inferior: ";
cin>>a;
cout<<"Digite el lmite superior: ";
cin>>b;
cout<<"Digite la tolerancia: ";
cin>>tol;
while (sw==0)
{
xmedia=((a+b)/2);
error=abs(xmedia-xant);
if (error<=tol)
sw=1;
else
{
acum=0;
for (i=0;i<=n;i++)
{
acum=acum+fx[i]*pow(xmedia, i);
}
fxmedia=acum;
if (fxmedia>0)
b=xmedia;
else
a=xmedia;
}
xant=xmedia;
cout<<a<<" "<<b<<" "<<xmedia<<" "<<error<<"\n";
}
cout<<"Raz: "<<xmedia<<"";
system("pause");
}

Newton-Raphson
Tal vez, de las frmulas para localizar races, la frmula de Newton Raphson sea la mas
ampliamente utilizada. Si el valor inicial para la raz es xi, entonces se puede trazar una
tangente desde el punto [xi, f(xi)] de la curva. Por lo comn, el punto donde esta tangente
cruza al eje x representa una aproximacin mejorada de la raz.
El mtodo de Newton Raphson se deduce a partir de esta interpretacin geomtrica (un
mtodo alternativo basado en la serie de Taylor:



Que se arregla para obtener:



La cual se conoce como frmula de Newton Raphson.
#include<iostream>
#include<complex>
#include<math.h>
#include<conio.h>
using namespace std;
int i,j,z,k,coe,l,f,n,u,op,sw,maxit;
int t[20],w[20],P[20];
double xi,xa,fxi,fpxi,e,p,b,a,x,fa,fb,fp,tol,x0;
void main()
{
z=0;
do
{
do
{
system("cls");
cout<<"\n\n\t\t**************************************\n";
cout<<"\t\t\t*METODO DE NEWTON-RAPHSON\n";
cout<<"\n";
cout<<"\n";
cout<<"\t\t1.Creacion del polinomio\n";
cout<<"\n";
cout<<"\t\t2.Desarrollo\n";
cout<<"\n";
cout<<"\t\t3.Salir";
cout<<"\n\n";
cout<<"\t\tEscoja un opcion: ";
cout<<"\n\n\t\t**************************************\n";
cin>>op;
}while((op<1)&&(op>3));
switch(op)
{
case 1:
sw=1;
system("cls");
do{
system("cls");
cout<<"\aPOLINOMIO A DESARROLLAR \n ";
cout<<"Digite el Grado de la Ecuacion: ";
cin>> n;
}while((n<=0)||(n==1));
for(i=0;i<=n;i++)
{
cout<<"Digite el coeficiente " <<i<<": ";
cin>>t[i];

}
for(i=1;i<=n;i++)
{
w[i-1]=t[i]*i;

}
system("cls");
cout<<"El polinomio es:\n";
for(j=0;j<=n;j++)
{
cout<<t[j]<<"X^"<<j<<" + ";
}
cout<<"La derivada es:\n";
for(j=0;j<=n-1;j++)
{
cout<<w[j]<<"X^"<<j<<" + ";
}
break;
case 2:
system("cls");
cout<<("\nIngrese el valor de X0 ");
cin>>x0;
cout<<("\nIngrese Maxima Iteraciones: ");
cin>>maxit;
cout<<("\nIngrese Tolerancia: ");
cin>>tol;
sw=0;i=0;

while((sw==0)&&(i<=maxit))
{
cout<<i<<" "<<a<<" "<<b<<" ";

cout<<x0<<" ";
fxi=0;
for(j=0;j<=n;j++)
{
fxi=fxi+t[j]*pow(x0,j);
}

cout<<fxi<<" ";
fpxi=0;
for(k=0;k<=n-1;k++)
{
fpxi=fpxi+w[k]*pow(x0,k);
}

cout<<fpxi<<" ";
xi=x0-fxi/fpxi;

cout<<xi<<" ";
e=fabs(xi-x0);
cout<<e<<" "<<"\n";
if(e<=tol){
sw=1;
}
else{
i++;
x0=xi;
}


}
if (sw==1)
{
cout<<"La raiz es: "<<xi;
}else{
cout<<"No Converge";
}
getch();
break;
case 3:system("cls");
} /*fin case */
}while(op!=3);
system("pause");
}


Solucin de Sistemas de ecuaciones lineales
Se denomina ecuacin lineal a aquella que tiene la forma de un polinomio de primer
grado, es decir, las incgnitas no estn elevadas a potencias, ni multiplicadas entre s, ni
en el denominador. Por ejemplo, 3x+2y+6z=6 es una ecuacin lineal con tres incgnitas.
El mtodo de gauss, conocido tambin como de triangulacin o de cascada, nos permite
resolver sistemas de ecuaciones lineales con cualquier nmero de ecuaciones y de
incgnitas. La idea es muy simple; por ejemplo, para el caso de un sistema de tres
ecuaciones con tres incgnitas se trata de obtener un sistema equivalente cuya primera
ecuacin tenga tres incgnitas, la segunda dos y la tercera una. Se obtiene as un sistema
triangular o en cascada de la forma;
Ax+By+Cz=D
Ey+Fz=G
Hz=I
El mtodo jordan, o tambin conocido como el mtodo de Gauss-Jordan;
Este mtodo constituye una variacin del mtodo de eliminacin de Gauss, permite
resolver hasta 15 o 20 ecuaciones simultaneas, con 8 o 10 digitos significativos en las
operaciones aritmticas de la computadora. Este procedimiento se distingue del mtodo
gaussiano en que cuando se elimina una incgnita, se elimina de todas las ecuaciones
restantes, es decir, las que preceden a la ecuacin pivote as como de las que siguen.

#include<iostream>
#include<complex>
#include<math.h>
#include<conio.h>
int i,j,n,m,k,x,y,z;
float A[10][10],B[10][10],divisor,pv;
void imprimir();
using namespace std;
void main()
{
cout<<"\tDIGITE NUMERO DE FILAS===>>";
cin>>m;
cout<<"\n";
cout<<"\tDIGITE NUMERO DE COLUMNAS==>>";
cin>>n;
for (i=1;i<=m;i++){
for (j=1;j<=n+1;j++){
cout<<"\n";
cout<<"\tA["<<i<<","<<j<<"]=";

cin>>A[i][j];
cout<<"\n";
}
}
cout<<"\n\n\t\t* MATRIZ ORIGINAL *";
cout<<"\n\n\n";
imprimir();
for (i=1;i<=m;i++){
divisor=A[i][i];
for (j=1;j<=n+1;j++)
{
A[i][j]=A[i][j]/divisor;
}
cout<<"\n\n\t\t* MATRIZ DE GAUSS *";
cout<<"\n\n\n";
imprimir();
for (k=1;k<=m;k++)
{
if(k!=i){
pv=(-1)*A[k][i];
for (j=1;j<=n+1;j++)
{
A[k][j]=pv*A[i][j]+A[k][j];
}
}
cout<<"\n\n\t\t* MATRIZ DE JORDAN *";
cout<<"\n\n\n";
imprimir();
}
}
cout<<"\n\t * MATRIZ RESULTANTE DE JORDAN *\n\n";
imprimir();
for(int i= 1; i <= m; i++){
cout<<"\nX"<<i<<" = " << A[i][n+1]<<"\n" ;
}
system("pause");
}
void imprimir() {
for (int f = 1; f<=m; f++){
for(int l= 1; l <= n+1; l++){
cout<<"\t" << A[f][l] ;
}
cout<<"\n";
}
}



Ajuste de curvas
Mtodo de Lagrange
#include<iostream>
#include<complex>
#include<math.h>
#include<conio.h>
using namespace std;
void main()
{
int n,i,j;
float mult,sum=0,x[10],f[10],a;
cout<<"Digita el nmero de puntos ? ";
cin>>n;
cout<<"Digita los valores de x y el valor de la funcin: "<<endl;
for(i=0;i<n;i++)
cin>>x[i]>>f[i];

cout<<"\nDigita el valor de X : ";
cin>>a;

for(i=0;i<=n-1;i++)
{
mult=1;
for(j=0;j<=n-1;j++)
{
if(j!=i)
mult*=(a-x[j])/(x[i]-x[j]);
}
sum+=mult*f[i];
}
cout<<"\n f(x) = "<<sum;
system("pause");

}





Integracin nmerica.

Mtodo Simpson Compuesto
void Simpson_Compuesto(){
int tsicomp,i,j;
double
jsicomp,gsicomp,asicomp,bsicomp,hsicomp,fasicomp,fbsicomp,fsicomp,f1sicomp,xsicomp
,psicomp,vsicomp[100];
cout<<"SOLICITE EL # DE TRAPECIOS : ";
cin>>tsicomp;
if((tsicomp%2)==0){
cout<<"SOLICITE EL GRADO DEL POLINOMIO : ";
cin>>gsicomp;
cout<<"SOLICITE EL VALOR DE A :";
cin>>asicomp;
cout<<"SOLICITE EL VALOR DE B :";
cin>>bsicomp;
for (i=0;i<=gsicomp;i++){
cout<<"SOLICITE EL VALOR DEL COEFICIENTE DE X^"<<i;
cin>>vsicomp[i];
}
fasicomp = 0;
fbsicomp = 0;
for (i= 0;i<=gsicomp;i++)
{
fasicomp = fasicomp + (vsicomp[i] * pow(asicomp,i));
fbsicomp = fbsicomp + (vsicomp[i] * pow(bsicomp,i));
}
hsicomp = (bsicomp - asicomp) / tsicomp;
xsicomp = asicomp + hsicomp;
fsicomp = 0;
f1sicomp = 0;
i = 1;
while (i<tsicomp){

if((i%2)==0){
for (j=0;j<=gsicomp;j++){
fsicomp = fsicomp + (vsicomp[j] *
pow(xsicomp,j));
}
}else{
for (j=0;j<=gsicomp;j++){
f1sicomp = f1sicomp + (vsicomp[j] *
pow(xsicomp,j));
}
}
i=i+1;
xsicomp = xsicomp + hsicomp;
}
psicomp = (hsicomp / 3) * (fasicomp + (2 * fsicomp) + (4 * f1sicomp)
+ fbsicomp);
cout<<"La integral es : "<<psicomp;
}else{
cout<<"El trapecio digitado no converge a este metodo ya que el
valor de este debe ser un numero par";
}

}

Vous aimerez peut-être aussi