Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C by Dimka ( 15 years ago )
#include <stdio.h>
#include <math.h>

#define epsilon 0.000001f
#define shag 0.05f

double sqr(double p)
{
  return p*p;
}

double Y(double y, double a[])
{
  return (double)(a[0]*pow(y,6)+a[1]*pow(y,5)+a[2]*pow(y,4)+a[3]*pow(y,3)+a[4]*pow(y,2)+a[5]*y+a[6]);
}

double mod(double x)
{
  if (x>0.0f) return x; else return (-x);
}

double solve_range(double a[])
{
  double A,B,max,min;
  int i;
  A=0.0f;B=0.0f;
  for(i=0;i<7;i++)
    if (mod(a[i])>A) A=mod(a[i]);
  for(i=0;i<6;i++)
    if (mod(a[i])>B) B=mod(a[i]);
  max=1+A/mod(a[0]);
  min=mod(a[6])/(mod(a[6])+B);
  printf("Solve range:nmax %lf nmin %lf nn",max,min);
  return max;
}

double halfsolve(double a[],double aa,double bb)
{
  double cc;
  cc=(aa+bb)/2;
  if (mod(bb-aa)>epsilon)
  {
  if (Y(aa,a)*Y(cc,a)<0.0f)
      return halfsolve(a,aa,cc); else return halfsolve(a,cc,bb);
  } else return cc;  
}

int solve(double a[],double range,double sol[])
{
  int i;
  double c,b,solv;
  i=0;
  c=0.0f;
  while (b<range)
    {
     b=c;
     c+=shag;
     if (Y(c,a)*Y(b,a)<0.0f) 
       {
 printf("local %lf %lfn",b,c);
 solv=halfsolve(a,b,c);
 //printf("solve %lfn",solv);
 sol[i]=solv;
 i++;
       }
    }
    return (i-1);
}

int main()
{
double l0,p0,P0,U0;
double l3,p3,U3,P3;

double a[7],Y[7],j0,j3,X;
double C0,C3,e0,e3;
int i,solvz;
double P1,p1,p2,D0,D3,U1;

l0=5/3;
p0=2.71*pow(10,-3);
P0=5*pow(10,5);
U0=0.0f;

l3=7/5;
p3=2.219*pow(10,-4);
U3=1.587*pow(10,5);
P3=pow(10,6);

j0=(l0+1)/(l0-1);
j3=(l3+1)/(l3-1);
X=P3/P0;

C0=sqrt(l0*P0/p0);
C3=sqrt(l3*P3/p3);

printf("C0 %lf nC3 %lf nn",C0,C3);

e0=2*pow(C0,2)/(l0*(l0-1)*sqr(U3-U0));
e3=2*pow(C3,2)/(l3*(l3-1)*sqr(U3-U0));

printf("e0 %lf ne3 %lf nn",e0,e3); 

a[0]=sqr(j0*e3-j3*X*e0);
a[1]=2*((j0*e3-j3*X*e0)*(e3*(1-2*j0*X)-e0*X*(X-2*j3))-j0*j3*X*(j0*e3+j3*X*e0));
a[2]=sqr(e3)*(6*sqr(j0)*sqr(X)-8*j0*X+1)-2*e0*e3*X*(j0*j3*(X*X+4*X+1)-2*(X+1)*(j3+j0*X)+X)+sqr(e0)*sqr(X)*(6*sqr(j3)-8*j3*X+X*X)+sqr(j0*j3*X)-2*j0*X*e3*(j0*X-2*j0*j3*X+2*j3)-2*j3*X*X*e0*(j3+2*j0*X-2*j0*j3);
a[3]=-2*X*(2*e3*e3*(sqr(j0*X)-3*j0*X+1)+e0*e3*((j3+j0*X)*(X*X+4*X+1)-2*j0*j3*X*(X+1)-2*X*(X+1))+2*e0*e0*X*(X*X-3*j3*X+j3*j3)-j0*j3*X*(j0*X+j3)+e3*(j0*j0*j3*X*X-2*X*(2*j0*j3+j0*j0*X)+(2*j0*X+j3))+e0*X*(j0*j3*j3-2*j3*(j3+2*j0*X)+2*j3*X+j0*X*X));
a[4]=X*X*(e3*e3*(sqr(j0*X)-8*j0*X+6)-2*e0*e3*(j0*j3*X-2*(X+1)*(j3+j0*X)+X*X+4*X+1)+e0*e0*(j3*j3-8*j3*X+6*X*X)+(j3*j3+4*j0*j3*X+sqr(j0*X))-2*e3*((j0*j0*X+2*j0*j3)*X-2*(2*j0*X+j3)+1)-2*e0*(j3*(2*j0*X+j3)-2*X*(2*j3+j0*X)+X*X));
a[5]=2*X*X*X*(e3*e3*(j0*X-2)-e0*e3*(j0*X-2+j3-2*X)+e0*e0*(j3-2*X)+(j3+j0*X)-e3*(2*j0*X+j3-2)-e0*(2*j3+j0*X-2*X));
a[6]=pow(X,4)*(sqr(e3-e0)+1-2*(e3+e0));

for (i=0;i<7;i++)
   printf("a%i %f n",i,a[i]);
printf("n");

solvz=solve(a,solve_range(a),Y);

for (i=0;i<solvz+1;i++)
{
   printf("Y%i %f n Solv D for itn",i,Y[i]);
   P1=Y[i]*P0;
   p1=p0*((l0-1)+(l0+1)*P1/P0)/((l0+1)+(l0-1)*P1/P0);
   U1=U0-C0*sqrt(2)*(Y[i]-1)/(sqrt(l0*(l0-1))*sqrt(1+j0*Y[i]));
   D0=(p0*U0-p1*U1)/(p0-p1);
   p2=p3*((l3-1)+(l3+1)*P1/P3)/((l3+1)+(l3-1)*P1/P3);
   D3=(p2*U1-p3*U3)/(p2-p3);
   printf(" P1 %lfn p1 %lfn U1,2 %lfn D0 %lfn",P1,p1,U1,D0);
   printf(" p2 %lfn D3 %lfn",p2,D3);
}
printf("n");

return 0;
}

 

Revise this Paste

Your Name: Code Language: