Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Metodos mejorado
#include<math.h> #include <iostream> #include <iomanip> #include<stdlib.h> #include<stdio.h> using namespace std; double error2(double,double,double,double); double error3(double,double,double,double,double,double); void funcion1(int, double); void funcion2(int, double); void funcion4(int, double); double max2(double, double); double max3(double, double,double); void menuNewton(); void menuInterpolacion(); void principal(); void Cuadrados(float *, float *, int); void Divididas(float *,float *, int); int gauss(float [4][4], float [4], float [4],int); int sol_sis(float [4][4], float [4], float [4], float [4], float [4]);//4-3-2 int mostrar_matriz(float [4][4], float [4],int); int copiar_matriz(float [4][4], float [4][4],int); //int gauss(float *,int n); float p1(float x,float b2,float b1); float p2(float x,float b3,float b2,float b1); float p3(float x,float b4,float b3,float b2,float b1); int main() { principal(); return 0; } void principal() { int i=0; do{ //system ("cls"); cout<<"Nava Vazquez Gpe. Zobeida"<<endl; cout<<"Ramirez Gonzalez Kathia Fabiola"<<endl; cout<<"Rodriguez Santiago Aaron"<<endl; cout<<"Escoge una opcion"<<endl; cout<<"1.-Newton"<<endl; cout<<"2.-Interpolacion"<<endl; cin>>i; switch(i) { case 1: menuNewton(); break; case 2: menuInterpolacion(); break; } }while(i!=4); } void menuInterpolacion() { int n,v=0,i=0; float *x,*y; do { //system ("cls"); cout<<"Teclea el numero de puntos de la funcion"<<endl; cin>>n; x=(float *)malloc(n*sizeof(float)); y=(float *)malloc(n*sizeof(float)); for (int i = 0; i < n; ++i) { cout<<"Teclea el dato x"<<i<<endl; cin>>x[i]; cout<<"Teclea el dato F(x)"<<i<<endl; cin>>y[i]; } //system ("cls"); cout<<"Verifica que los datos sean Correctos"<<endl; cout<<"X \t F(x)"<<endl; for (int i = 0; i < n; ++i) { cout<<x[i]<<"\t"<<y[i]<<endl; } cout<<"Si son correctos teclea un 1 sino un 0"<<endl; cin>>v; } while (v==0); //system("cls"); do{ cout<<"Escoge una opcion"<<endl; cout<<"1.-Diferencias Dividas"<<endl; cout<<"2.-Minimos Cuadrados"<<endl; cin>>i; switch(i) { case 1: Divididas(x,y,n); break; case 2: Cuadrados(x,y,n); break; } }while(v==0); } void menuNewton() { int i=0,x; double y; do{ //system ("cls"); cout<<"Metodo de Newton"<<endl; cout<<"Escoge una funcion"<<endl; cout<<"1.- f1(x,y)= x^2 + xy – 10 = 0 \t f2(x, y)= y + 3xy^2 – 57 = 0"<<endl; cout<<"2.- f1(x,y)= 4 – x^2 – y^2 = 0 \t f2(x, y)= 1 - e^x - y = 0"<<endl; cout<<"3.- f1(x,y)= 2x^2 – 4x + y^2 + 3z^2 + 6z + 2 = 0 \t f2(x, y)= x^2 + y^2 – 2y + 2z^2 – 5 = 0 \t f3(x, y)= 3x^2 – 12x + y^2 + 3z^2 + 8 = 0"<<endl; cout<<"4.- f1(x,y)= x^2 – 4x + y^2 = 0 \t f2(x, y)= x^2 - x – 12y + 1 = 0 \t f3(x, y)= 3x^2 – 12x + y^2 + 3z^2 + 8 = 0"<<endl; cout<<"5.- Salir"<<endl; cin>>i; switch(i) { case 1: cout<<"Ingresa el numero de iteraciones "<<endl; cin>>x; cout<<"Ingresa el numero de toleracia "<<endl; cin>>y; funcion1(x,y); break; case 2: cout<<"Ingresa el numero de iteraciones "<<endl; cin>>x; cout<<"Ingresa el numero de toleracia "<<endl; cin>>y; funcion2(x,y); break; case 3: cout<<"Ingresa el numero de iteraciones "<<endl; cin>>x; cout<<"Ingresa el numero de toleracia "<<endl; cin>>y; cout<<"Error estas funciones divergen no importando el metodo para calcularlas"<<endl; //system("pause"); break; case 4: cout<<"Ingresa el numero de iteraciones "<<endl; cin>>x; cout<<"Ingresa el numero de toleracia "<<endl; cin>>y; funcion4(x,y); break; case 5: cout<<"gracias por ocupar este programa vuelve pronto"<<endl; system("pause"); break; } }while(i!=5); } void funcion1(int iter, double tole) { double x, y, x_b, y_b, f1_a, f2_a, f1_b, f2_b, Df1, Df2; double tolActual=0,tolAnterior=0,error_espectral,error_anterior=100000000,error=0; int i=0,n=0,salida=10; cout<<"Ingresa x0 "<<endl; cin>>x; cout<<"Ingresa y0 "<<endl; cin>>y; cout<<"i "<<"x"<<"\t\t"<<"y"<<"\t\t"<<"f1_a"<<"\t\t"<<"f2_a"<<"\t\t"<<"Df1"<<"\t\t"<< "Df2\t\t"<<"Error"<<"\n"; f1_b=x*x+x*y-10; f2_b=x+3*x*y*y-57; do { f1_a=x*x+x*y-10; Df1=2*x+y; x_b=x-f1_a/Df1; f2_a=y+3*x_b*y*y-57; Df2=1+6*x_b*y; y_b=y-f2_a/Df2; cout<<i<<" "; cout<<fixed<<setprecision(6); cout<<x<<fixed<<setprecision(6); cout<<"\t"<<y<<fixed<<setprecision(6)<<"\t"<<f1_a<<fixed<<setprecision(6)<<"\t"<<f2_a<<fixed<<setprecision(6)<<"\t"; cout<<Df1<<fixed<<setprecision(6)<<"\t"<< Df2<<fixed<<setprecision(6)<<"\t"; error_espectral=10000000; if(i>0){ error_espectral=error2(f1_a,f2_a,f1_b,f2_b); cout<< error_espectral<<fixed<<setprecision(6)<<"\n"; }else printf("\n"); if(error_anterior<error_espectral) { error=1; break; } error_anterior=error_espectral; f1_b=f1_a; f2_b=f2_a; i++; x=x_b; y=y_b; }while(iter>i-1 and error_espectral>tole); if(error==1) cout<<"El error fue en aumento\n"; else cout<<"Las solucion fue: ("<<x<<","<<y<<")"; //system("pause"); } void funcion2(int iter, double tole) { double x, y, x_b, y_b, f1_a, f2_a, f1_b, f2_b, Df1, Df2; double tolActual=0,tolAnterior=0,error_espectral,error_anterior=100000000,error=0; int i=0,n=0,salida=10; cout<<"Ingresa x0 "<<endl; cin>>x; cout<<"Ingresa y0 "<<endl; cin>>y; cout<<"i "<<"x"<<"\t\t"<<"y"<<"\t\t"<<"f1_a"<<"\t\t"<<"f2_a"<<"\t\t"<<"Df1"<<"\t\t"<< "Df2\t\t"<<"Error"<<"\n"; f1_b=4-(x*x)-(y*y); f2_b=1-exp(x)-y; do { f1_a=4-(x*x)-(y*y); Df1=-2*x; x_b=x-f1_a/Df1; //cout<<"x:"<<x<<"y:"<<y<<"f1: "<<f1_a<<endl; f2_a=1-exp(x_b)-y; Df2=-1; y_b=y-f2_a/Df2; cout<<i<<" "; cout<<fixed<<setprecision(6); cout<<x<<fixed<<setprecision(6); cout<<"\t"<<y<<fixed<<setprecision(6)<<"\t"<<f1_a<<fixed<<setprecision(6)<<"\t"<<f2_a<<fixed<<setprecision(6)<<"\t"; cout<<Df1<<fixed<<setprecision(6)<<"\t"<< Df2<<fixed<<setprecision(6)<<"\t"; error_espectral=100000000; if(i>0){ error_espectral=error2(f1_a,f2_a,f1_b,f2_b); cout<< error_espectral<<fixed<<setprecision(6)<<"\n"; }else printf("\n"); f1_b=f1_a; f2_b=f2_a; if(error_anterior<error_espectral) { error=1; break; } error_anterior=error_espectral; //cout<<" Hola"<<error_espectral<<" "<<tole; i++; x=x_b; y=y_b; }while(iter>i-1 and error_espectral>tole); if(error==1) cout<<"El error fue en aumento\n"; else cout<<"Las solucion fue: ("<<x<<","<<y<<")"; //system("pause"); } void funcion4(int iter, double tole) { double x, y,z, x_b, z_b, y_b, f1_a, f2_a, f3_a, f1_b, f2_b, f3_b, Df1, Df2, Df3; double tolActual=0,tolAnterior=0,error_espectral,error_anterior=100000000,error=0; int i=0,n=0,salida=10; cout<<"Ingresa x0 "<<endl; cin>>x; cout<<"Ingresa y0 "<<endl; cin>>y; cout<<"i "<<"x"<<"\t\t"<<"y"<<"\t\t"<<"z"<<"\t\t"<<"f1_a"<<"\t\t"<<"f2_a"<<"\t\t"<<"f3_a"<<"\t\t"<<"Df1"<<"\t\t"<< "Df2\t\t"<<"Df3\t\t"<<"Error"<<"\n"; f1_b=x*x-4*x+y*y; f2_b=x*x-x-12*y+1; f3_b=3*x*x-12*x+y*y+3*z*z+8; do { f1_a=x*x-4*x+y*y; Df1=2*x-4; x_b=x-f1_a/Df1; f2_a=x_b*x_b-x_b-12*y+1; Df2=-12; y_b=y-f2_a/Df2; f3_a=3*x_b*x_b-12*x_b+y_b*y_b+3*z*z+8; Df3=6*z; z_b=z-f3_a/Df3; cout<<i<<" "; cout<<fixed<<setprecision(6); cout<<x<<"\t"; cout<<y<<"\t"; cout<<z<<"\t"; cout<<f1_a<<"\t"; cout<<f2_a<<"\t"; cout<<f3_a<<"\t"; cout<<Df1<<"\t"; cout<<Df2<<"\t"; cout<<Df3<<"\t"; error_espectral=10000000; if(i>0){ error_espectral=error3(f1_a,f2_a,f3_a,f1_b,f2_b,f3_b); cout<< error_espectral<<fixed<<setprecision(6)<<"\n"; }else printf("\n"); //cout<<" Hola"<<error_espectral<<" "<<error_anterior<<endl; if(error_anterior<error_espectral) { error=1; break; } error_anterior=error_espectral; f1_b=f1_a; f2_b=f2_a; f3_b=f3_a; i++; x=x_b; y=y_b; z=z_b; }while(iter>i-1 and error_espectral>tole); if(error==1) cout<<"El error fue en aumento\n"; else cout<<"Las solucion fue: ("<<x<<","<<y<<","<<z<<")"; //system("pause"); } double error2(double f1_a,double f2_a,double f1_b,double f2_b){ double f1,f2; f1=f1_a-f1_b; f2=f2_a-f2_b; return max2(f1,f2); } double error3(double f1_a,double f2_a,double f3_a,double f1_b,double f2_b,double f3_b){ double f1,f2,f3; f1=f1_a-f1_b; f2=f2_a-f2_b; f3=f3_a-f3_b; return max3(f1,f2,f3); } double max2(double n, double k) { if(n<0)n*=-1; if(k<0)k*=-1; if(n>=k) return n; else return k; } double max3(double n, double k,double l) { if(n<0)n*=-1; if(k<0)k*=-1; if(l<0)l*=-1; if(n>=k) {if (n>=l) return n;} else if (k>=l) return k; else return l; } void Divididas(float *x, float *y,int n) { float b[n][n],x1; float xt; float y1; int i=0,grado; do { cout<<"Por favor dame un punto para interpolar"<<endl; cin>>x1; if(x1>=x[0]&&x1<=x[n-1]) { cout<<"Por favor dame el grado para interpolar"<<endl; cin>>grado; if(grado<=n&&grado>=1) { //inicializa la tabla de diferencias for(int i=0;i<n;i++) b[i][0]=y[i]; //calcula la tabla de diferencias for(int j=1;j<grado;j++) for(int i=0;i<n-j;i++) b[i][j]=(b[i+1][j-1]-b[i][j-1])/(x[i+j]-x[i]); //interpola con el polinomio xt=1; y1=b[0][0]; for(int j=0;j<grado-1;j++) { xt=xt*(x1-x[j]); y1=y1+b[0][j+1]*xt; } cout<<y1; } } else cout<<"error, el punto no existe en el intervalo"<<endl; cout<<"Si quieres continuar teclea 0 sino 1"<<endl; cin>>i; }while(i==0); } void Cuadrados(float *x, float *y,int n) { cout<<fixed<<setprecision(6); float matriz[4][4]; float independiente[4]; float componentes[10]; float solucion_lineal[4]; float solucion_cuadratica[4]; float solucion_cubica[4]; float polinomio1; float polinomio2; float polinomio3; for(int i=0;i<10;i++){ componentes[i]=0; } cout<<"x\t\t"<<"y\t\t"<<"x^2\t\t"<<"x^3\t\t"<<"x^4\t\t"<<"x^5\t\t"<<"x^6\t\t"; cout<<"x*y\t\t"<<"(x^2)*y\t\t"<<"(x^3)*y\t\t\n"; for(int i=0;i<n;i++){ componentes[0]=componentes[0]+x[i]; componentes[1]=componentes[1]+y[i]; componentes[2]=componentes[2]+pow(x[i],2); componentes[3]=componentes[3]+pow(x[i],3); componentes[4]=componentes[4]+pow(x[i],4); componentes[5]=componentes[5]+pow(x[i],5); componentes[6]=componentes[6]+pow(x[i],6); componentes[7]=componentes[7]+(y[i]*x[i]); componentes[8]=componentes[8]+y[i]*pow(x[i],2); componentes[9]=componentes[9]+y[i]*pow(x[i],3); printf("%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t\n", x[i],y[i],pow(x[i],2),pow(x[i],3),pow(x[i],4),pow(x[i],5),pow(x[i],6),y[i]*x[i],y[i]*pow(x[i],2),y[i]*pow(x[i],3)); } for(int i=0;i<10;i++){ printf("%5.6lf\t",componentes[i]); }printf("\n");printf("\n"); matriz[0][0]=n; matriz[1][0]=componentes[0]; matriz[2][0]=componentes[2]; matriz[3][0]=componentes[3]; matriz[0][1]=componentes[0]; matriz[1][1]=componentes[2]; matriz[2][1]=componentes[3]; matriz[3][1]=componentes[4]; matriz[0][2]=componentes[2]; matriz[1][2]=componentes[3]; matriz[2][2]=componentes[4]; matriz[3][2]=componentes[5]; matriz[0][3]=componentes[3]; matriz[1][3]=componentes[4]; matriz[2][3]=componentes[5]; matriz[3][3]=componentes[6]; independiente[0]=componentes[1]; independiente[1]=componentes[7]; independiente[2]=componentes[8]; independiente[3]=componentes[9]; printf("A\t\t\t\t\t\t\t\t\tb\n"); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ printf("%5.6lf\t",matriz[i][j]); } printf("\t%5.6lf\t",independiente[i]); printf("\n"); } //printf("\nHola"); /////////////////////////////////////////////////////////////////////////////////////////////////////////// sol_sis(matriz,independiente,solucion_cubica,solucion_cuadratica,solucion_lineal); /////////////////////////////////////////////////////////////////////////////////////////////////////////// for(int i=0;i<10;i++){ componentes[i]=0; } cout<<"x\t\t"<<"y\t\t"<<"p1(x)\t\t"<<"p2(x)\t\t"<<"p3(x)\t\t"<<"|y-p1(x)|^2\t"<<"|y-p2(x)|^2\t"; cout<<"|y-p3(x)|^2\t\t\n"; for(int i=0;i<n;i++){ componentes[0]=componentes[0]+x[i]; componentes[1]=componentes[1]+y[i]; polinomio1=p1(x[i],solucion_lineal[1],solucion_lineal[0]); polinomio2=p2(x[i],solucion_cuadratica[2],solucion_cuadratica[1],solucion_cuadratica[0]); polinomio3=p3(x[i],solucion_cubica[3],solucion_cubica[2],solucion_cubica[1],solucion_cubica[0]); componentes[2]=componentes[2]+polinomio1; componentes[3]=componentes[3]+polinomio2; componentes[4]=componentes[4]+polinomio3; componentes[5]=componentes[5]+pow(y[i]-polinomio1,2); componentes[6]=componentes[6]+pow(y[i]-polinomio2,2); componentes[7]=componentes[7]+pow(y[i]-polinomio3,2); printf("%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t%5.6lf\t\n", x[i],y[i],polinomio1,polinomio2,polinomio3,pow(y[i]-polinomio1,2),pow(y[i]-polinomio2,2),pow(y[i]-polinomio3,2)); } for(int i=0;i<8;i++){ printf("%5.6lf\t",componentes[i]); }printf("\n");printf("\n"); printf("\n\n"); //system("pause"); } /*int gauss(float M*,int n){ V[0]=1; V[1]=2; V[2]=3; V[3]=4; }*/ float p1(float x,float b2,float b1){ float res; res=b2*x+b1; return res; } float p2(float x,float b3,float b2,float b1){ float res; res=b3*pow(x,2)+b2*x+b1; return res; } float p3(float x,float b4,float b3,float b2,float b1){ float res; res=b4*pow(x,3)+b3*pow(x,2)+b2*x+b1; return res; } int gauss(float matriz[4][4], float b[4], float sol[4],int t){ float div[4]; mostrar_matriz(matriz,b,t); for(int k=0;k<t;k++){ for(int i=0; i<t; i++) div[i]=matriz[i][k]; for(int i=0; i<t; i++) matriz[k][i]=matriz[k][i]/div[k]; b[k]=b[k]/div[k]; for(int i=k+1; i<t; i++){ for(int j=k; j<t; j++){ matriz[i][j]=matriz[i][j]-(div[i]*matriz[k][j])/matriz[k][k]; } b[i]=b[i]-(div[i]*b[k])/matriz[k][k]; } } for(int i=0; i<t; i++) div[i]=matriz[i][t-1]; for(int i=0; i<t; i++) matriz[t-1][i]=matriz[t-1][i]/div[t-1]; b[t-1]=b[t-1]/div[t-1]; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ for(int k=t-1; k>0; k--){ for(int i=0; i<t; i++) div[i]=matriz[i][k]; for(int i=0; i<k; i++){ matriz[i][k]=matriz[i][k]-matriz[k][k]*matriz[i][k]; b[i]=b[i]-b[k]*div[i]; } } //mostrar_matriz(matriz,b,t); for(int k=0;k<4;k++){ sol[k]=b[k]; } return 0; } int sol_sis(float matriz[4][4], float b[4], float sol_4[4], float sol_3[4], float sol_2[4]){ float matriz_respaldo[4][4]; float b_respaldo[4]; for(int i=0;i<4;i++) b_respaldo[i]=b[i]; copiar_matriz(matriz,matriz_respaldo,4); gauss(matriz_respaldo,b_respaldo,sol_4,4); mostrar_matriz(matriz_respaldo,b_respaldo,4); for(int i=0;i<4;i++) b_respaldo[i]=b[i]; copiar_matriz(matriz,matriz_respaldo,4); gauss(matriz_respaldo,b_respaldo,sol_3,3); mostrar_matriz(matriz_respaldo,b_respaldo,3); for(int i=0;i<4;i++) b_respaldo[i]=b[i]; copiar_matriz(matriz,matriz_respaldo,4); gauss(matriz_respaldo,b_respaldo,sol_2,2); mostrar_matriz(matriz_respaldo,b_respaldo,2); } int mostrar_matriz(float matriz[4][4],float b[4], int n){ printf("\n"); for(int i=0; i<n;i++){ for(int j=0; j<n; j++){ cout<<matriz[i][j]<<" "; } cout<<" "<<b[i]; printf("\n"); } return 0; } int copiar_matriz(float matriz[4][4],float matriz_c[4][4], int n){ for(int i=0; i<n;i++){ for(int j=0; j<n; j++){ matriz_c[i][j]=matriz[i][j]; } } return 0; }
run
|
edit
|
history
|
help
0
Microsoft - MaxEmployeeAttendence (R repititions - Semi Optimised DP)
Question 1
Полиморфизм. Простейшее ДЕМО.
Sieve Of Eratosthenes
Treap for spoj : MEANARR (we can use policy based data structures instead)
topological sort
Test 5(2020)
II-32bit
Flowchart segitiga
Test 15(2020)