Курсовая работа: Моделирование рассеяния плоской упругой продольной волны на упругом однородном изотропном цилиндрическом слое
a[2*i+1][4]=imag(A[i][2]); a[2*i+1][5]=real(A[i][2]);
a[2*i+1][6]=imag(A[i][3]); a[2*i+1][7]=real(A[i][3]);
a[2*i+1][8]=imag(A[i][4]); a[2*i+1][9]=real(A[i][4]);
a[2*i+1][10]=imag(A[i][5]); a[2*i+1][11]=real(A[i][5]);
a[2*i+1][12]=imag(A[i][6]);
a[2*i+1][13]=real(A[i][6]);
a[2*i+1][14]=imag(A[i][7]);
a[2*i+1][15]=real(A[i][7]);
f[2*i+1]=imag(F[i]);
}
Real_Gauss();
X[0]=complex(x[0],x[1]);
X[1]=complex(x[2],x[3]);
X[2]=complex(x[4],x[5]);
X[3]=complex(x[6],x[7]);
X[4]=complex(x[8],x[9]);
X[5]=complex(x[10],x[11]);
X[6]=complex(x[12],x[13]);
X[7]=complex(x[14],x[15]);
}
void grafic(double *k_1, double *k_2, double *k_3,
double *k_4, double a, double b, double c, double d, double col_x, double
col_y)
{
double h,hx,hy,dx,dy;
int i,maxx,maxy;
int borderx_left=0,borderx_right=0;
int bordery_up=0,bordery_down=0;
int gdriver=DETECT, gmode, errorcode;
clrscr();
initgraph(&gdriver,&gmode," ");
errorcode=graphresult();
if(errorcode!=grOk)
{
printf("Не
могу открыть графический экран!\n");
printf("Нажмите
любую клавишу!\n");
getch();
exit(1);
}
setfillstyle(SOLID_FILL,WHITE);
floodfill(0,0,WHITE);
maxx=getmaxx();
maxy=getmaxy();
h=(double)(maxx-(borderx_left+borderx_right));
hx=(b-a)/h;
h=(double)(maxy-(bordery_up+bordery_down));
hy=(d-c)/h;
setcolor(BLACK);
line(borderx_left,bordery_up,borderx_left,maxy-bordery_down);
line(borderx_left,maxy-bordery_down,maxx-borderx_right,maxy-bordery_down);
line(maxx-borderx_right,maxy-bordery_down,maxx-borderx_right,bordery_up);
line(maxx-borderx_right,bordery_up,borderx_left,bordery_up);
line(0,0,0,maxy);
line(0,maxy,maxx,maxy);
line(maxx,maxy,maxx,0);
line(maxx,0,0,0);
dx=(b-a)/col_x;
dy=(d-c)/col_y;
setcolor(BLACK);
for(i=1;i<col_x;i++)
line(borderx_left+i*dx/hx,bordery_up,borderx_left+i*dx/hx,maxy-bordery_down);
for(i=1;i<col_y;i++)
line(borderx_left,bordery_up+i*dy/hy,maxx-borderx_right,bordery_up+i*dy/hy);
setcolor(BLACK);
for(i=0;i<M;i++)
line(borderx_left+(k_1[i]-a)/hx, maxy-bordery_down-(k_2[i]-c)/hy,
borderx_left+(k_1[i+1]-a)/hx,
maxy-bordery_down-(k_2[i+1]-c)/hy);
setcolor(BLACK);
for(i=0;i<M;i++)
line(borderx_left+(k_3[i]-a)/hx,
maxy-bordery_down-(k_4[i]-c)/hy,
borderx_left+(k_3[i+1]-a)/hx,
maxy-bordery_down-(k_4[i+1]-c)/hy);
getch();
closegraph();
}
double F_rass(double fi)
{
complex sum;
int i;
sum=0.0;
for(i=-K;i<=K;i=i+1.0)
sum=sum+pow(iii,i)*A1_n[K-i]*exp(iii*i*fi);
sum=2.0/sqrt(M_PI*const_w)*module(sum);
return(module(sum));
}
void main(void)
{
int j;
double k,n;
double k_0,k_n,dk;
double k_1[M+1],k_2[M+1],k_3[M+1],k_4[M+1];
clrscr();
const_w=2.0;
r1=3.5;
r2=1.0;
for(j=0;j<(M+1);j++)
{
k_1[j]=0.0;
k_2[j]=0.0;
k_3[j]=0.0;
k_4[j]=0.0;
}
clrscr();
k_0=M_PI;
k_n=2.0*M_PI;
dk=(k_n-k_0)/M;
j=0;
zad=1;
mod_upr();
w=module(const_w*sqrt((L1+2.0*M1)/R1)/(r1-r2));
k1=w/sqrt((L1+2.0*M1)/R1);
k2=w/sqrt((L2+2.0*M2)/R2);
k3=w/sqrt((L3+2.0*M3)/R3);
xi1=w/sqrt(M1/R1);
xi2=w/sqrt(M2/R2);
xi3=w/sqrt(M3/R3);
for(n=-K;n<=K;n=n+1)
{
Matrix_A_F(n);
Complex_Gauss();
A1_n[K-n]=X[0];
B1_n[K-n]=X[1];
A2_n[K-n]=X[2];
B2_n[K-n]=X[3];
A3_n[K-n]=X[4];
A4_n[K-n]=X[5];
B3_n[K-n]=X[6];
B4_n[K-n]=X[7];
}
for(j=0,k=k_0;k<=k_n;k=k+dk,j++)
{
k_1[j]=-F_rass(k)*cos(k);
k_2[j]=-F_rass(k)*sin(k);
k_3[j]=-F_rass(k)*cos(k);
k_4[j]=F_rass(k)*sin(k);
}
grafic(k_1,k_2,k_3,k_4,-2.0,6.0,-2.0,2.0,8.0,4.0);
}
ПРИЛОЖЕНИЕ
2
ДИАГРАММЫ
РАССЕЯННОГО ПОЛЯ ПО АМПЛИТУДЕ

Алюминий (kr=2.0, N=7)

Алюминий (kr=3.0, N=9)

Алюминий (kr=4.0, N=11)
|