lyj 发表于 2007-4-10 12:33

调用子函数问题

主函数
nr=8;
ns=5;
c=340;
f=200;
Lx=1.0;
Ly=1.5;
pa=[-1.307;
    -2.141;
    -2.141;
    -.284;
    .256e-2;
    -11.552;
    -.150e-5;
    -.266e-1;
    -.292e-7;
    -3.357;
    -.934e-10;
    .184;
    .671e-13;
    -2.404;
    .318e-13;
    .146;
    -.160e-14;
    -3.476;
    -1.133;
    -2.195;
    3.806;
    .730;
    .382;
    11.502;
    .655e-2;
    -4.081;
    .119e-2;
    6.886;
    .110e-3;
    -.815];    %pa为实部系数
pa1=[-1.117;                                    
      0.542;
      0.542;
      -7.569;
      -.364e-3;
      -1.984;
      -.131e-5;
      .448e-1;
      .689e-8;
      -.622;
      -721e-10;
      .696e-1;
      .239e-13;
      -.494;
      .415e-14;
      .338e-1;
      -.111e-15;
      -.707;
      -2.785;
      2.668;
      -10.015;
      10.489;
      .428e-1;
      2.206;
      .225e-3;
      -1.216;
      .252e-3;
      1.504;
      .171e-4;
      -.354;]                           %pa1为虚部系数

x=0:50;
y=-10:10;
=meshgrid(x,y);
zz=press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly);
=contour('v6',xx,yy,zz);
clabel(c,h);

子函数
function press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly);
k=2*pi*f/c;
z=zeros(size(x));
for r=0:nr
    krx=r*pi/Lx;
    kry=sqrt(k^2-krx^2);
    arx=pa(2*r+1)*cos(krx*x+kry*y)+pa(2*r+2)*cos(krx*x-kry*y)+pa1(2*r+1)*sin(krx*x+kry*y)+pa1(2*r+2)*sin(krx*x-kry*y);%压力函数的实部
    ary=pa1(2*r+1)*cos(krx*x+kry*y)+pa1(2*r+2)*cos(krx*x-kry*y)+pa(2*r+1)*sin(krx*x+kry*y)+pa(2*r+2)*sin(krx*x-kry*y);%压力函数的虚部
    zr=sqrt(arx^2+ary^2);
    z=z+zr;
end

for s=0:ns
    ksy=s*pi/Ly;
    ksx=sqrt(k^2-ksy^2);
    asx=pa(2*nr+2+2*s+1)*cos(ksx*x+ksy*y)+pa(2*nr+2+2*s+2)*cos(-ksx*x+ksy*y)+pa1(2*nr+2+2*s+1)*sin(ksx*x+ksy*y)+pa1(2*nr+2+2*s+2)*sin(-ksx*x+ksy*y);%压力函数实部
    asy=pa1(2*nr+2+2*s+1)*cos(ksx*x+ksy*y)+pa1(2*nr+2+2*s+2)*cos(-ksx*x+ksy*y)+pa(2*nr+2+2*s+1)*sin(ksx*x+ksy*y)+pa(2*nr+2+2*s+2)*sin(-ksx*x+ksy*y);%压力函数虚部
    zs=sqrt(asx^2+asy^2);
    z=z+zs;
end

帮忙看看哪错了?怎么改?老是运行错误,谢谢

eight 发表于 2007-4-10 13:26

原帖由 lyj 于 2007-4-10 12:33 发表
主函数
nr=8;
ns=5;
c=340;
f=200;
Lx=1.0;
Ly=1.5;
pa=[-1.307;
    -2.141;
    -2.141;
    -.284;
    .256e-2;
    -11.552;
    -.150e-5;
    -.266e-1;
    -.292e-7;
    -3.357;
   ...

你的子函数n多语法错误,建议先看看基础书

lyj 发表于 2007-4-10 16:06

function z=press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly);
还有哪错了,望指点,着急中!!!!!

eight 发表于 2007-4-10 16:27

原帖由 lyj 于 2007-4-10 16:06 发表
function z=press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly);
还有哪错了,望指点,着急中!!!!!


你好好修改一下 press 函数,按照你现在的定义,函数没有输出,而且有些输入变量没有使用

lyj 发表于 2007-4-10 17:01

什么意思啊?能多给点提示吗?

eight 发表于 2007-4-10 17:06

原帖由 lyj 于 2007-4-10 17:01 发表
什么意思啊?能多给点提示吗?

按照你的代码,及我的理解,子函数至少应该是:
把 function press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly); 改为 function z = press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly),即输出是 z 。另外该函数中所有 x 都应该换为 xx,因为你的输入是xx,x 根本没有定义


还是建议多看看书,如果没有一点基础,这样一来一回发问、回复更加浪费时间,而且你按照上述修改后,很可能又会出现新的问题,自己没有掌握的话就会处处碰壁

[ 本帖最后由 eight 于 2007-4-10 17:34 编辑 ]

lyj 发表于 2007-4-10 17:25

我也在看,也不是完全没基础,只是现在特别着急用,不能一下发现问题,还请您帮帮忙,本人不甚感激!!!!!!!

eight 发表于 2007-4-11 21:25


function z = press(x,y,pa,pa1,nr,ns,c,f,Lx,Ly)
k=2*pi*f/c;
z=zeros(size(x));
for r=0:nr
    krx=r*pi/Lx;
    kry=sqrt(k^2-krx^2);
    arx=pa(2*r+1)*cos(krx*x+kry*y)+pa(2*r+2)*cos(krx*x-kry*y)+pa1(2*r+1)*sin(krx*x+kry*y)+pa1(2*r+2)*sin(krx*x-kry*y);%压力函数的实部
    ary=pa1(2*r+1)*cos(krx*x+kry*y)+pa1(2*r+2)*cos(krx*x-kry*y)+pa(2*r+1)*sin(krx*x+kry*y)+pa(2*r+2)*sin(krx*x-kry*y);%压力函数的虚部
    zr=sqrt(arx.^2+ary.^2);
    z=z+zr;
end
for s=0:ns
    ksy=s*pi/Ly;
    ksx=sqrt(k^2-ksy^2);
    asx=pa(2*nr+2+2*s+1)*cos(ksx*x+ksy*y)+pa(2*nr+2+2*s+2)*cos(-ksx*x+ksy*y)+pa1(2*nr+2+2*s+1)*sin(ksx*x+ksy*y)+pa1(2*nr+2+2*s+2)*sin(-ksx*x+ksy*y);%压力函数实部
    asy=pa1(2*nr+2+2*s+1)*cos(ksx*x+ksy*y)+pa1(2*nr+2+2*s+2)*cos(-ksx*x+ksy*y)+pa(2*nr+2+2*s+1)*sin(ksx*x+ksy*y)+pa(2*nr+2+2*s+2)*sin(-ksx*x+ksy*y);%压力函数虚部
    zs=sqrt(asx.^2+asy.^2);
    z=z+zs;
end



以上代码保存为 press.m

eight 发表于 2007-4-11 21:29

原帖由 lyj 于 2007-4-10 17:25 发表
我也在看,也不是完全没基础,只是现在特别着急用,不能一下发现问题,还请您帮帮忙,本人不甚感激!!!!!!!


需要特别注意 点运算 和 矩阵运算 的区别,即 .^ 和 ^ 、.* 和 * 之间的区别
页: [1]
查看完整版本: 调用子函数问题