C语言编程计算斯托克斯五阶波波长#includestdio.h#includemath.h#includeconio.hconstdoublepi=3.1415926,g=9.8;intmain(){doubled=0,t=0,h=0,c=0,c_0=0,k=0,s=0,l=0,n=0,x=0,l_1=0,l_2=0,n_0=0,n_1=0,n_2=0;//c_0表示波速printf(请输入d,T,H(空格分隔):\n);scanf(%lf%lf%lf,&d,&t,&h);printf(请预估λ上限(越大运行时间越长.建议值取1):\n);scanf(%lf,&n_0);printf(请预估误差fabs(L_2-L_1)(过小可能无解,运行时间过长调大此值;解不唯一优先调小此值.建议值0.0001):\n);scanf(%lf,&n_1);printf(请预估误差fabs(L-L_1)(过小可能无解;解不唯一调小此值.建议值2):\n);scanf(%lf,&n_2);doubleB[6][6]={0};doubleC[3]={0};for(l=0;l=10000;l=l+0.01){k=2*pi/l;s=sinh(k*d);c=cosh(k*d);B[3][3]=3*(8*pow(c,6)+1)/(64*pow(s,6));B[3][5]=(88128*pow(c,14)-208224*pow(c,12)+70848*pow(c,10)+54000*pow(c,8)-21816*pow(c,6)+6264*pow(c,4)-54*pow(c,2)-81)/(12288*pow(s,12)*(6*pow(c,2)-1));B[5][5]=(192000*pow(c,16)-262720*pow(c,14)+83680*pow(c,12)+20160*pow(c,10)-7280*pow(c,8)+7160*pow(c,6)-1800*pow(c,4)-1050*pow(c,2)+225)/(12288*pow(s,10)*(6*pow(c,2)-1)*(8*pow(c,4)-11*pow(c,2)+3));C[1]=(8*pow(c,4)-8*pow(c,2)+9)/(8*pow(s,4));C[2]=(3840*pow(c,12)-4096*pow(c,10)+2592*pow(c,8)-1008*pow(c,6)+5944*pow(c,4)-1830*pow(c,2)+147)/(512*pow(s,10)*(6*pow(c,2)-1));for(n=0;nn_0;n=n+0.0001)//n的范围取得越大运行时间越久.n表示λ{l_1=(pi*h)/(n+pow(n,3)*B[3][3]+pow(n,5)*B[3][5]+pow(n,5)*B[5][5]);//超越方程l_2=(g*t*t*tanh(k*d)*(1+pow(n,2)*C[1]+pow(n,4)*C[2]))/(2*pi);if(fabs(l_2-l_1)n_1&&fabs(l_1-l)n_2&&fabs(l_2-l)n_2){printf(波长L=%lf系数λ=%lf\n,l_1,n);c_0=l_1/t;k=2*pi/l_1;printf(波速C=%lf波数k=%lf\n\n,c_0,k);}}}getch();return0;}运行效果如下: