#include <stdio.h>
#include <math.h>
#define k 9.0e+9 /* N.m2/C2 */
#define Lambda 2.0e-10 /* C/m */
float L,Ex,Ey,x,y,xp;
float f1(float xp) { return (k*Lambda*(x-xp)/pow((pow(x-xp,2)+pow(y,2)),1.5)); }
float f2(float xp) { return (k*Lambda*( y )/pow((pow(x-xp,2)+pow(y,2)),1.5)); }
float integrate_Ex(float a,float b);
float integrate_Ey(float a,float b);
void main(void)
{
L = 2.0; /* Length of the wire in meter */
/* calculate electric filed at grid points */
for(x=-1.0;x<=1.0;x+=0.5)
for(y=-1.0;y<=1.0;y+=0.5)
{
if(y==0.0) continue;
Ex = integrate_Ex(-L/2,L/2);
Ey = integrate_Ey(-L/2,L/2);
printf("%f\t%f\t%f\t%f\n",x,y,Ex,Ey);
}
} /* main */
/* Returns integral of a function f1(x) between [a,b] by Simpson Method. */
float integrate_Ex(float a,float b)
{
float h,sum,x,integral;
int i,n;
n = 200; /* number of part */
h = (b-a)/n;
sum = f1(a)+f1(b);
for(i=1;i<n;i++){
x = a + i*h;
if( i%2 ) sum += 4.0*f1(x);
else sum += 2.0*f1(x);
}
integral = sum*h/3.0;
return integral;
}
/* Returns integral of a function f2(x) between [a,b] by Simpson Method. */
float integrate_Ey(float a,float b)
{
float h,sum,x,integral;
int i,n;
n = 200; /* number of part */
h = (b-a)/n;
sum = f2(a)+f2(b);
for(i=1;i<n;i++){
x = a + i*h;
if( i%2 ) sum += 4.0*f2(x);
else sum += 2.0*f2(x);
}
integral = sum*h/3.0;
return integral;
}