24小时热门版块排行榜    

查看: 647  |  回复: 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的回帖
相关版块跳转 我要订阅楼主 风雪孤客 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +11 yufeiwaner 2026-08-09 13/650 2026-08-12 08:17 by yufeiwaner
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +8 Tide man 2026-08-10 9/450 2026-08-11 20:39 by beefly
[基金申请] 有时候,自然基金真的不能太认真 (我的申报经验) +3 majunge000 2026-08-11 4/200 2026-08-11 20:13 by lch2012
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[硕博家园] 读博的好处 +3 lnee 2026-08-11 3/150 2026-08-11 18:10 by 希望我好好的
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] filecode +9 documentary 2026-08-10 9/450 2026-08-11 10:08 by wk7465
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +8 家与远方 2026-08-10 13/650 2026-08-11 09:49 by 家与远方
[基金申请] 基金中了 +15 laoda193707 2026-08-06 15/750 2026-08-11 00:11 by jiafei2190
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 静等基金结果 +5 gjjjzhong 2026-08-10 16/800 2026-08-10 17:19 by Tide man
[基金申请] 关于Filecode分析方法 +3 majunge000 2026-08-10 3/150 2026-08-10 15:46 by lch2012
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 2026国自然放榜时间 +9 布布和一二 2026-08-08 9/450 2026-08-10 11:22 by xxxx2020
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] filecode与中标关系的预测 +5 布布和一二 2026-08-07 5/250 2026-08-09 16:15 by 袁向阳007
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
[基金申请] 关于豆爷回答的JTJC与%2F数量 +5 yang182083 2026-08-06 7/350 2026-08-08 18:29 by zhanghaozhu
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
信息提示
请填处理意见