Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

#include <iostream> #include <cmath> #include <stdlib.

h> using namespace std; struct polinomio { int grado; double coeficiente [100]; }; typedef struct polinomio Polinomio; void rellenaCeros (Polinomio & r) { for(int i=r.grado;i>=0 ;i--) { r.coeficiente[i]=0; } } double factorial(int a) { int resultado=1; if(a!=0){ for(int i=1;i<=a;i++) { resultado*=i; }} return resultado; } double combinatorio(int m, int n) { return factorial(m)/(factorial(m-n)*factorial(n)); } double Cnl(int n, int l) { return factorial(n-l-1)/(2.0*n*(factorial(n+l))); } Polinomio laguerre (int a, int b) { Polinomio r; r.grado=a; for(int i=0;i<=a;i++) { r.coeficiente[i]=pow(-1,i)*(1/factorial(i))*combinatorio(a+b,a-i); } return r; } void escribePolinomio(Polinomio p) { for(int i=0;i<=p.grado;i++) {

cout<<p.coeficiente[i]<<" } }

";

Polinomio MultiplicaPolinomio (Polinomio p, Polinomio q) { Polinomio r; r.grado=p.grado+q.grado; rellenaCeros(r); for(int i=p.grado;i>=0;i--) { for(int k=q.grado;k>=0;k--) { r.coeficiente[i+k]+=p.coeficiente[i]*q.coeficiente[k]; } } return r; } Polinomio MultiplicaPxn (Polinomio p, int n) { Polinomio q; q.grado=n; rellenaCeros(q); q.coeficiente[n]=1; return MultiplicaPolinomio(q,p); } double integral (Polinomio p) { double resultado=0; for(int i=p.grado;i>=0;i--) { resultado+=p.coeficiente[i]*factorial(i); } return resultado; } double probabilidad(int n, int l) { Polinomio r; r=laguerre(n-l-1,2*l+1); r=MultiplicaPolinomio(r,r); r=MultiplicaPxn(r,2*l+2); return integral(r)*Cnl(n,l); } double radio(int n, int l) { Polinomio r; r=laguerre(n-l-1,2*l+1); r=MultiplicaPolinomio(r,r); r=MultiplicaPxn(r,2*l+3); return integral(r)*Cnl(n,l)*(n/2.0); } double potencial (int n, int l) {

Polinomio r; r=laguerre(n-l-1,2*l+1); r=MultiplicaPolinomio(r,r); r=MultiplicaPxn(r,2*l+1); return integral(r)*Cnl(n,l)*(-2.0/n); } void resultados(int n, int l,double & prob,double & rad,double & pot) { prob=probabilidad(n,l); rad=radio(n,l); pot=potencial(n,l); } void escribir(int n, int l,double prob,double rad,double pot) { cout << n << " " << l << "\t\t" << prob << "\t\t" << rad << "\t\t" << pot << endl; } int main() { double p,r,v; cout << "n l\t\tProb\t\t<r>\t\t<V>\n\n"; for (int n = 0; n<=5; n++) { for (int l=0; l<n; l++) { resultados(n,l,p,r,v); escribir(n,l,p,r,v); } cout << endl; } system("Pause"); return 0; }

You might also like