循环程序问题
高手帮忙看下下面这个程序为什么运行不出结果?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) %积分区间确定 建议弄不明白的时候,自己尽量尝试去调试一下,F10单步运行看看,到底是哪一行程序有问题。
你的程序里有符号运算,而符号运算是非常占用时间和资源的,尽量不要用。
刚试了一下你的程序,下面这几行程序占了大部分的时间:
B31=diff(B3,x);
B32=B31*B31;
B33=sqrt(1+B32);
B34=Bx3*B33;
IB3=int(B34,x,x3,x4) %积分区间确定
建议换一种方法来计算该积分 我把B34=Bx3*B33;
IB3=int(B34,x,x3,x4)
改为B35=inline('B34','x');
IB3=quad(B35,x3,x4)了,怎么还是不出结果啊?
回复
记得以前我已回复过,由于符号矩阵较大,建议改用数值计算.将 syms x y 语句去掉,改用 x,y的数值向量运算试试. 不好意思,请教下楼上如何改呢?谢谢
========================
改用 x,y的数值向量运算试试
自己先试试吧.
by xjzuo
========================
[ 本帖最后由 xjzuo 于 2007-3-20 23:12 编辑 ]
页:
[1]