lyj 发表于 2007-3-17 23:10

循环程序问题

高手帮忙看下下面这个程序为什么运行不出结果?CPU使用都是100%,就是不出结果,大家给看看怎么回事?

syms x y
nr=3;
ns=2;
Lx=1.0;
Ly=1.5;
L=0.75;
c=340;
f=200;
k=2*pi*f/c;
% 建立波函数矩阵
fix(1)=exp(-j*k*y);
for r = 1:nr;
    krx=r*pi/Lx;                  %k r-x
    kry=sqrt(k^2-krx^2);          %k r-y
    fix(2*r)=cos(krx*x)*exp(-j*kry*y);
    fix(2*r+1)=cos(krx*x)*exp(j*kry*y);
end;
fiy(1)=exp(-j*k*x);
for s = 1:ns;
    ksy=s*pi/Ly;                  %k(s,y),y坐标
    ksx=sqrt(k^2-ksy^2);          %k(s,x),x坐标
    fiy(2*s)=exp(-j*ksx*x)*cos(ksy*y);
    fiy(2*s+1)=exp(j*ksx*x)*cos(ksy*y);
end;
fi=;                     %波函数矩阵
fit=transpose(fi);         %波函数矩阵的转置
pfipx = diff(fi,x);
pfipy = diff(fi,y);
x3=1.5;
y3=0.75;
x4=1.25;
y4=1;
s3=sqrt((x4-x3)^2+(y4-y3)^2);
cosa3=(x4-x3)/s3;
sina3=(y4-y3)/s3;
A3=;               %段3方向正弦和余弦
pfipn3=[];                        %段3方向导数
%
pfipn3=cosa3*pfipx+sina3*pfipy;   %波函数的方向导数矩阵
pfipn3t=transpose(pfipn3);            %波函数的方向导数矩阵的转置
Bx3=fit*pfipn3;
kr=(y4-y3)/(x4-x3);
Y=kr*(x-x3)+y3;               %段3的直线方程
B3=subs(Bx3,y,Y);             %Bx3中的y用x的表达式代替
B31=diff(B3,x);
B32=B31*B31;
B33=sqrt(1+B32);
B34=Bx3*B33;
IB3=int(B34,x,x3,x4)       %积分区间确定

xinyuxf 发表于 2007-3-18 10:49

建议弄不明白的时候,自己尽量尝试去调试一下,F10单步运行看看,到底是哪一行程序有问题。
你的程序里有符号运算,而符号运算是非常占用时间和资源的,尽量不要用。
刚试了一下你的程序,下面这几行程序占了大部分的时间:
    B31=diff(B3,x);
    B32=B31*B31;
    B33=sqrt(1+B32);
    B34=Bx3*B33;
    IB3=int(B34,x,x3,x4)       %积分区间确定
建议换一种方法来计算该积分

lyj 发表于 2007-3-18 20:56

我把B34=Bx3*B33;
IB3=int(B34,x,x3,x4)
改为B35=inline('B34','x');
IB3=quad(B35,x3,x4)了,怎么还是不出结果啊?

xjzuo 发表于 2007-3-20 09:35

回复

记得以前我已回复过,由于符号矩阵较大,建议改用数值计算.
将 syms x y 语句去掉,改用 x,y的数值向量运算试试.

lyj 发表于 2007-3-20 19:38

不好意思,请教下楼上如何改呢?谢谢

========================
改用 x,y的数值向量运算试试
自己先试试吧.
by xjzuo
========================

[ 本帖最后由 xjzuo 于 2007-3-20 23:12 编辑 ]
页: [1]
查看完整版本: 循环程序问题