24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 620  |  回复: 1

风雪孤客

银虫 (初入文坛)

[求助] 请教兰姆波频散曲线问题

学过固体的超声波的高手,帮帮忙,你们谁有兰姆波频散曲线计算的程序,能够传给我看看吗?很着急。dzxukai@sina.cn  谢谢!

非高级版内容,请勿放入高级版中

[ Last edited by 华丽的飘过 on 2012-9-22 at 21:55 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wilde2540

木虫 (正式写手)

【答案】应助回帖

引用回帖:
1楼: Originally posted by 风雪孤客 at 2011-06-28 21:06:40:
学过固体的超声波的高手,帮帮忙,你们谁有兰姆波频散曲线计算的程序,能够传给我看看吗?很着急。dzxukai@sina.cn  谢谢!

#include
#include
#include
#include
#include
#include
#include

#define PI 3.1415926
//  double cd=5.8e3,ct=3.1e3;                //钢
// double cd=6.42e3,ct=3.04e3;                   //铝
double cd=2.68e3,ct=1.1e3;    //有机玻璃   

int BisectRoot(double a,double b,double h,double eps,double fb,double* x,int n,int *m);
double Func(double cp,double fb);

void main()
{
        int i,j,n=20,m,N=300;
        double a,b,h,eps,*x,*cp,*dcp,*cg,fb,D=1e-3,step=0.02e3;
        FILE *fp;
        char str[10],str1[10],cgfile[50][10];
    printf("Input the cg file name,please:\n";
        scanf("%s",str1);

        for(j=0;j         {
                sprintf(str,"%d.dat",j);
                strcpy(cgfile[j],str1);
                strcat(cgfile[j],str);
        }

    a=1.0e0;
        b=15.0e3;
        h=0.7;
        eps=1e-6;       
      
        for (j=0;j<10;j++)
        {
                if((fp=fopen(cgfile[j],"w")==NULL)
                { printf("cg file %s can't open.\n",cgfile[j]); exit(0);}
                else printf("file %s is written.\n",cgfile[j]);

        cp=(double*)calloc(N,sizeof(double));
            if(cp==NULL)        exit(1);
                dcp=(double*)calloc(N,sizeof(double));
            if(dcp==NULL)        exit(1);
        cg=(double*)calloc(N,sizeof(double));
            if(cg==NULL)        exit(1);

                m=0; i=0; fb=0.0;   
                do
                {
                        x=(double*)calloc(n,sizeof(double));
                if(x==NULL)                exit(1);
                       
                BisectRoot(a,b,h,eps,fb,x,n,&m);
                        cp=x[j];

                        if(cp>0 && i>2)
                        {
                                dcp=(cp-cp[i-1])/step;
                                cg=cp/(1.0-fb*dcp/cp);
                           fprintf(fp,"%6.3f %6.3f\n ",2*(fb-step)*D, cg*D); //fb*D is frequency with unit kHz
                                                            // c[j] is velocity with unit m/s
                                                           // and c[j]*D is velocity with unit km/s


                        }
            i++;
                fb+=step;             // fb is frequency with unit Hz, step=50
            free(x);
                }while(i
      printf("m=%d\n\n",m);
          fclose(fp);
          free(cp);free(dcp);free(cg);
        }
}


double Func(double cp,double fb)
{
        double ab,bt,kk,at,kd,kt;
        double fs,fa;
        ab=sqrt(fabs(cp*cp/(cd*cd)-1.0));
        bt=sqrt(fabs(cp*cp/(ct*ct)-1.0));
        kk=(cp*cp/(ct*ct)-2.0)*(cp*cp/(ct*ct)-2.0);
        at=4*ab*bt;
        kd=ab*PI*2*fb/cp;
        kt=bt*PI*2*fb/cp;

        if(cp>=cd)
        {
                fs=kk*sin(kt)*cos(kd)+at*sin(kd)*cos(kt);
                fa=kk*sin(kd)*cos(kt)+at*sin(kt)*cos(kd);
        }
        if(cp>ct && cp         {
        fs=kk*sin(kt)*cosh(kd)-at*sinh(kd)*cos(kt);
                fa=kk*sinh(kd)*cos(kt)+at*sin(kt)*cosh(kd);
        }
        if(cp         {
                fs=kk*tanh(kt)-at*tanh(kd);
                fa=kk*tanh(kd)-at*tanh(kt);
        }
//        return (fs);            // 对称模式         
        return (fa);             // 反对称模式
}

int BisectRoot(double a,double b,double h,double eps,double fb,double* x,int n,int *m)
{
        double z,z0,z1,y,y0,y1;

        *m=0;
        z=a;
        y=Func(z,fb);
        while(1)
        {
                if((z>b+h/2)||(*m==n))
                        return(1);
      
                if(fabs(y)                 {
                        *m+=1;
                        x[*m-1]=z;
                        z+=h/2;
                        y=Func(z,fb);
                        continue;
                }

                z1=z+h;
                y1=Func(z1,fb);
                if(fabs(y1)                 {
            *m+=1;
                        x[*m-1]=z1;
                        z=z1+h/2;
                        y=Func(z,fb);
                        continue;
                }
       
               if(y*y1>0)
                {
                        y=y1;
                        z=z1;
                        continue;
                }

                while(1)
                {
                        if(fabs(z1-z)                         {
               *m+=1;
                           x[*m-1]=(z1+z)/2;
                           z=z1+h/2;
                           y=Func(z,fb);
                           break;
                        }

                        z0=(z1+z)/2;
                        y0=Func(z0,fb);
                        if(fabs(y0)                         {
               *m+=1;
                           x[*m-1]=z0;
                           z=z0+h/2;
                           y=Func(z,fb);
                           break;
                        }

                       if(y*y0<0)
                        {
                                z1=z0;
                                y1=y0;
                        }
                        else
                        {
                                z=z0;
                                y=y0;
                        }
                }
        }
}

N年之前的代码,不负责对程序进行解释,仅供参考喔。图片也是N之前计算的一个例子


2楼2011-10-31 15:21:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 风雪孤客 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 265求调剂 +19 梁梁校校 2026-04-01 20/1000 2026-04-03 19:20 by 小男孩0911
[考研] 311求调剂 +17 zchqwer 2026-04-01 19/950 2026-04-03 18:29 by ls刘帅
[考研] 一志愿华中农业071010,总分320求调剂 +7 困困困困坤坤 2026-04-02 7/350 2026-04-03 17:26 by Yuena_Wang
[考研] 材料调剂 +6 吴棂颖! 2026-04-03 6/300 2026-04-03 16:25 by lijunpoly
[基金申请] esi高被引论文是不是能对中标有所加分和帮助呢 +5 redcom 2026-04-01 6/300 2026-04-03 15:15 by Howard28
[考研] 271分求调剂学校 +10 zph158488! 2026-04-02 10/500 2026-04-03 14:31 by 1753564080
[硕博家园] 求老师收留 +9 lllq123 2026-04-03 9/450 2026-04-03 13:48 by 呼吸都是减肥
[考研] 309求调剂 +4 刘刘刘1231 2026-04-02 5/250 2026-04-03 12:04 by 1753564080
[基金申请] 请问共同通讯和共同一作的认可度问题 10+4 psa1234 2026-04-01 10/500 2026-04-03 11:08 by Kittylucky
[考研] 抱歉 +5 田洪有 2026-03-30 5/250 2026-04-03 10:24 by linyelide
[考研] 289求调剂 +4 Acesczlo 2026-03-29 5/250 2026-04-03 10:09 by 不168
[考研] 调剂 +7 祉岷. 2026-04-02 7/350 2026-04-03 09:11 by 花呗还欠600
[考研] 求生物学调剂 +10 15172915737 2026-04-01 10/500 2026-04-02 18:53 by 哦哦嗯哈
[考研] 348求调剂 +11 zzzzyk123 2026-04-01 11/550 2026-04-02 16:52 by Wang200018
[考研] 0832食品科学与工程学硕282调剂 +4 鱼在水中游a 2026-04-02 7/350 2026-04-02 14:12 by baoball
[考研] 生物学327,求调剂 +5 书上的梅子 2026-04-01 6/300 2026-04-02 06:47 by ilovexiaobin
[考研] 301求调剂 +8 axibli 2026-04-01 8/400 2026-04-01 09:51 by 我的船我的海
[考研] 085601 329分调剂 +6 yzsa12 2026-03-31 6/300 2026-03-31 15:23 by yanflower7133
[考研] 调剂求院校招收 +7 鹤鲸鸽 2026-03-28 7/350 2026-03-31 11:21 by oooqiao
[考研] 323分 食品与营养调剂 +3 嘿ooo 2026-03-31 3/150 2026-03-31 09:38 by longlotian
信息提示
请填处理意见