C/Visual C - integral doble

 
Vista:

integral doble

Publicado por ros (17 intervenciones) el 28/03/2009 00:05:48
buenas noches,

os escribo porque ya me duele la cabeza de darle vueltas y seguro que alguien con mas experiencia que yo, puede que vea el error rápido.
A ver estoy intentando hacer una integral doble, se trata de la potencia radiada por una antena, que si no os conoceis la formula, se trata de la integral entre 0 y 2PI y 0 yPI del patron de radiacion de esta...pues bueno, ps pongo mi codigo y no me da error ni de memoria ni de compilacion...solo es error de resultado, vamos que calculo mal la integral...

este es mi codigo, se trata de un dipolo y el resultado de la integral deberia ser 8.y ahora mismo no me acuerdo de los decimales pero la ganancia tiene que ser 1.77dB aprox.

aki esta;

float pattern(void)
{

float G=ZERO;
int nargin=ZERO;
int i=ZERO;
double *punt_C=NULL;

double C[181][361];

dipole_ant(C);
if(NULL!=C)
{
nargin++;
}
nargin++;

G=CalcGain(C,nargin);

return G;
}

void dipole_ant(double patt[181][361])
{
double single=ZERO;
int k=ZERO;
int l=ZERO;
double theta[180];


for(k=ZERO;k<180;k++)
{
theta[k]=k*d2r;
single=fabs(sin(theta[k]));
for(l=ZERO;l<360;l++)
{

patt[k][l]=single;
}
}

return;
}

float CalcGain(double C[181][361],int nargin)
{
double g[181][361];
float G=ZERO;
double Prad=ZERO;
int k=ZERO;
int l=ZERO;


if(TWO==nargin)
{
for(k=ZERO;k<180;k++)
{
for(l=ZERO;l<360;l++)
{

g[k][l] = fabs(C[k][1]);
g[k][l] = pow(g[k][l],2);

}
}

Prad=integral(g);

}
else
{
mexErrMsgTxt("Illegal number of arguments");

}

G =(float) 10*log10(4*PI/Prad);

return G;
}

double integral(double f[181][361])
{
int l=ZERO;
int k=ZERO;
double result=ZERO;
double delta_psi=ZERO;
double delta_phi=ZERO;

delta_psi=2*PI/360;
delta_phi=PI/180;


for(l=ZERO;l<361;l++)
{
for(k=ZERO;k<181;k++)
{
result=result+f[k][l]*sin(k*d2r)*delta_psi*delta_phi;
}
}

return result;
}


gracias y buenas noches!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder