声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1911|回复: 8

[编程技巧] 调用子函数问题

[复制链接]
发表于 2007-4-10 12:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
主函数
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;
[xx,yy]=meshgrid(x,y);
zz=press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly);
[c,h]=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

帮忙看看哪错了?怎么改?老是运行错误,谢谢
回复
分享到:

使用道具 举报

发表于 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多语法错误,建议先看看基础书
 楼主| 发表于 2007-4-10 16:06 | 显示全部楼层
function z=press(xx,yy,pa,pa1,nr,ns,c,f,Lx,Ly);
还有哪错了,望指点,着急中!!!!!
发表于 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 函数,按照你现在的定义,函数没有输出,而且有些输入变量没有使用
 楼主| 发表于 2007-4-10 17:01 | 显示全部楼层
什么意思啊?能多给点提示吗?
发表于 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 编辑 ]
 楼主| 发表于 2007-4-10 17:25 | 显示全部楼层
我也在看,也不是完全没基础,只是现在特别着急用,不能一下发现问题,还请您帮帮忙,本人不甚感激!!!!!!!
发表于 2007-4-11 21:25 | 显示全部楼层

  1. function z = press(x,y,pa,pa1,nr,ns,c,f,Lx,Ly)
  2. k=2*pi*f/c;
  3. z=zeros(size(x));
  4. for r=0:nr
  5.     krx=r*pi/Lx;
  6.     kry=sqrt(k^2-krx^2);
  7.     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);%压力函数的实部
  8.     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);%压力函数的虚部
  9.     zr=sqrt(arx.^2+ary.^2);
  10.     z=z+zr;
  11. end
  12. for s=0:ns
  13.     ksy=s*pi/Ly;
  14.     ksx=sqrt(k^2-ksy^2);
  15.     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);%压力函数实部
  16.     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);%压力函数虚部
  17.     zs=sqrt(asx.^2+asy.^2);
  18.     z=z+zs;
  19. end
复制代码



以上代码保存为 press.m

评分

1

查看全部评分

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



需要特别注意 点运算 和 矩阵运算 的区别,即 .^ 和 ^ 、.* 和 * 之间的区别
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-24 15:24 , Processed in 0.057447 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表