Beruflich Dokumente
Kultur Dokumente
uint n;
cout<<"Introduzca el tama
Ao del sistema"<<endl;
cin>>n;
functions (*F[n]);
F[0]=F1;
F[1]=F2;
functions (*Jacobiano[n]);
Jacobiano[0]=F1x; Jacobiano[1]=F1y; Jacobiano[2]=F2x;
Jacobiano[3]=F2y;
/*******************************VECTOR INICIAL*******************************/
double *x0=new double [n];
x0[0]=0.5; x0[1]=0.5;
/**************************************************************/
double *x=new double [n];
Newton(F,Jacobiano,x0,n,1.0e-20,40);
delete []x0;
return 0;
}
/*****************************DEFINICION DE FUNCIONES*********************************/
double F1(double x[])
{
return x[0]*x[0]+x[1]*x[1]-1;
}
double F2(double x[])
{
return x[1]-x[0];
}
/*****************************ELEMENTOS DEL JACOBIANO*********************************/
double F1x(double x[])
{
return 1;
}
double F1y(double x[])
{
return 1;
}
double F2x(double x[])
{
return -1;
}
2
";
if(err(Resultado,Xn,2)<error) break;
}
delete []Resultado; delete []Jacob_Evaluated;
delete []FXn; delete []xTemp;
}
/******************************FUNCION PARA EVALUAR LOS PUNTOS EN EL JACOBIANO**************
void Eval_Jacob(functions *Jacob[], const uint n, double x0[], double evaluated[])
{
for(uint i=0;i<n*n;i++) evaluated[i]=Jacob[i](x0);
3
}
/*************FUNCION PARA EVALUAR LOS PUNTOS EN LAS FUNCIONES DEL SISTEMA***********/
void Eval_Function(functions *F[],const uint n, double x0[],double FXn[])
{
for(uint i=0;i<n;i++) FXn[i]=F[i](x0);
}
/***************MULTIPLICAR MATRIZ POR VECTOR*************************/
void MatrixVector(double Matriz[],const double Vector[], const uint m,const uint n, double V
{
for(uint i=0;i<m;i++)
{Vector_Resultante[i]=0;
for(uint j=0;j<n;j++)
{
Vector_Resultante[i]+=Matriz[n*i+j]*Vector[j];
}
}
}
/**************************CALCULAR EL ERROR************************************/
double err(const double x0[],const double x[],const uint n)
{
double aux=0;
for(uint i=0;i<n;i++) aux+=(x0[i]-x[i])*(x0[i]-x[i]);
return sqrt(aux);
}
/**************************ELIMINACION GAUSS************************************/
void gauss_elimination(double A[], double resultado[], double b[], const uint n)
{
double factor;
double *factores=new double [n];
for(uint i=0;i<n-1;i++)
{
factor=1/A[(n+1)*i];
A[(n+1)*i]=1;
for(uint j=i+1;j<n;j++) A[n*i+j]=factor*A[n*i+j];
b[i]=factor*b[i];
for(uint j=i+1;j<n;j++)
{
for(uint k=i+1;k<n;k++) A[n*j+k]=-A[n*j+i]*A[n*i+k] +A[n*j+k];
4
b[j]=-A[n*j+i]*b[i]+b[j];
A[n*j+i]=0;
}
}
/**************************SUSTITUCION HACIA ATRAS************************************/
backward_substitution(A,b,resultado,n);
}
void backward_substitution(double A[], const double b[], double resultado[], uint n)
{
for(int i=n-1;i>=0;i--)
{
resultado[i]=b[i];
for(uint j=i+1;j<n;j++) resultado[i]=resultado[i]-resultado[j]*A[n*i+j];
resultado[i]=resultado[i]/A[(n+1)*i];
}