24小时热门版块排行榜    

查看: 644  |  回复: 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的回帖
相关版块跳转 我要订阅楼主 风雪孤客 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 面上项目filecode邪修 +4 西山十月 2026-08-09 6/300 2026-08-10 00:16 by liufeng0619
[基金申请] 2026国自然放榜时间 +4 布布和一二 2026-08-08 4/200 2026-08-09 22:24 by otj2008
[基金申请] 关于代码变化问题,想知道的进来 +15 且听虎啸 2026-08-07 22/1100 2026-08-09 22:13 by 布布和一二
[基金申请] 这样的filecode谁见过 +10 布布和一二 2026-08-08 21/1050 2026-08-09 17:21 by 天神眷顾
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 5/250 2026-08-08 21:54 by 13586093586
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +7 a089 2026-08-07 7/350 2026-08-08 18:05 by gltch
[基金申请] 好奇怪的filecode +3 布布和一二 2026-08-08 4/200 2026-08-08 17:46 by zhanghaozhu
[基金申请] 基金中了 +14 laoda193707 2026-08-06 14/700 2026-08-08 00:23 by 实验小白ha
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 化学口download_prp&amp;fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 7/350 2026-08-07 13:11 by 医学老男孩
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见