Está en la página 1de 7

Análisis Numérico

Código
#include <iostream>

#include <cstdlib>

#include <cmath>

#include <iomanip>

#include <sstream>

using namespace std;

void coeficientes(double *x,double *y,double **matriz,int grado,int nDatos);

void recorrido(double **matriz, int n,bool &op);

void reduccion (double **matriz, int i, int j,int n);

bool mdiagonal(double **matriz, int n);

void rauno(double **matriz,int n);

void pedirdatos(double *x,double *y,int nDatos);

void imp(double **matriz, int n,bool op);

void coeficientes(double *x,double *y,double **matriz,int grado,int nDatos)

double *s=new double[(2*grado)+1];

double suma;

for(int k=0; k < 2*grado+1; k++){

suma=0.0;

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

suma+=pow(x[i], k);

s[k]=suma;

}
Análisis Numérico

for(int k=0; k<grado+1; k++){

suma=0.0;

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

suma+=pow(x[i], k)*y[i];

matriz[k][grado+1]=suma;

for(int i=0; i < grado+1; i++){

for(int j=0; j < grado+1; j++)

matriz[i][j]=s[i+j];

void recorrido(double **matriz, int n,bool &op)

int i,j,k=0;

for (j = 0; j < n-1; ++j){ for (i = n-1; i >k ; --i){

if(mdiagonal(matriz,n))

rauno(matriz,n);

reduccion(matriz,i,j,n);

k++;

for (j = n-1; j> 0; j--){

for (i = 0; i < k; ++i){

if(mdiagonal(matriz,n))

rauno(matriz,n);

reduccion(matriz,i,j,n);

k--;
Análisis Numérico

for (i = 0; i < n; ++i){

if(matriz[i][i]==0)

op=true;

if (!op&&mdiagonal(matriz,n))

rauno(matriz,n);

void reduccion(double **matriz,int i,int j,int n)

double *ra=new double[n+1];

int k;

for (k = 0; k < n+1; ++k)

ra[k]=((matriz[i][k]*matriz[j][j])-(matriz[j][k]*matriz[i][j]));

for (int k = 0; k < n+1; ++k)

matriz[i][k]=ra[k];

bool mdiagonal(double **matriz, int n)

bool op=false;

int i;

for (i = 0; i < n; ++i){

if(matriz[i][i]!=1)

op=true;

for (i = 0; i < n; ++i){

if (matriz[i][i]==0)
Análisis Numérico

op=false;

return op;

void rauno(double **matriz,int n)

int i,j;

double aux;

for (i = 0; i < n; ++i){

aux=matriz[i][i];

for (j = 0; j < n+1; ++j)

matriz[i][j]=(matriz[i][j]/aux);

void pedirdatos(double *x,double *y,int nDatos)

string entrada;

system("cls");

cout<<"\n\tTeclea los datos x."<<endl;

for (int i = 0; i < nDatos; ++i){

while(true){

cout<<"\n\tx"<<i+1<<": "; getline(cin,entrada); stringstream


mystream(entrada); if (mystream>>x[i])

break;

cout<<"\n\tError."<<endl;

}
Análisis Numérico

system("pause");

cout<<"\n\tIntroduce los datos yi."<<endl;

for (int i = 0; i < nDatos; ++i){

while(true){

cout<<"\n\ty"<<i+1<<": "; getline(cin,entrada); stringstream


mystream(entrada); if (mystream>>y[i])

break;

cout<<"\n\tError."<<endl;

system("pause");

system("cls");

void imp(double **matriz, int n,bool op)

system("cls");

if (op)

cout<<"\n\n\tLos datos tecleados no generan un sistema de ecuaciones con


solucion."<<endl;

else{

cout<< "\n\n\tLos coeficientes son:\n"<<endl;

for (int i = 0; i < n; ++i) if (matriz[i][n]>=0)

cout<<setw(10)<<"a"<<i<<" = "<<matriz[i][n]<<endl;

else

cout<<setw(10)<<"a"<<i<<" = "<<matriz[i][n]<<endl;

system ("pause");

}
Análisis Numérico

int main(int argc, char const *argv[])

cout<<"\n\n =minimos cuadrados polinomial="<<endl<<"\n ";

system("pause");

do{

system ("cls");

int nDatos,grado;

bool op=false;

string entrada;

while(true){

cout<<"\n\tTeclea la cantidad de puntos que vas a ingresar: "; getline(cin,entrada);


stringstream mystream(entrada); if (mystream>>nDatos)

break;

cout<<"\n\tError."<<endl;

double *X=new double[nDatos];

double *Y=new double[nDatos];

pedirdatos(X,Y,nDatos);

while(true){

cout<<"\n\tTeclea el grado del polinomio: "; getline(cin,entrada); stringstream


mystream(entrada); if (mystream>>grado)

break;

cout<<"\n\tError."<<endl;

double **matriz=new double*[grado+1];

for (int i = 0; i < grado+1; ++i)

matriz[i]=new double[grado+2];

coeficientes(X,Y,matriz,grado,nDatos);

recorrido(matriz,grado+1,op);

imp(matriz,grado+1,op);
Análisis Numérico

}while(1);

return 0;

También podría gustarte