各位大神,我在matlab中用for循环求解一个方程,有时候方程会没有解,此时如何让for循环继续执行下去呢?
mip版 关注:194 答案:2 悬赏:10
解决时间 2021-01-26 10:22
已解决
2021-01-26 04:46
clear all
clc
syms E f w C k L1 lambada N x y A1
E=209*10^9;p=7.89*10^3;
f=24*10^3;
w=2*f*3.1415926;%圆频率
C=(E/p)^(1/2);%波在固体中的传播速度
k=w/C;
R1=0.040;R3=0.02;
lambada=C/f;
L1=2*lambada;
N=sqrt(R1^2/(R3^2));
A1=(N-1)/(N*x);
%R2=R1(1-A1*x);
B=[];
a=1;
p_num=0;
%for Mp=2.5:0.1:4
for Mp=3:0.1:4 %这里是一个for循环,每次Mp的值是可以变动的
eq=tan(k*y)-((1+1/2/(k*x)^2)*tan(k*x)-1/2/x/k)/(-1+tan(k*x)/2/k/x);
eq1=2*abs((sin(k*x)/2/x/k+cos(k*x))/cos(k*y))-Mp;
[x,y]=solve(eq,eq1,'x','y');
%If isempty(x) %%%%%就是在这里,哪条语句可以实现:当方程没有解的时候,继续返回for循环执行,换成下一个MP的值。现在的语句有问题%%%%
%Continue;
%end
if 1==isreal(y)
p_num=p_num+1;
B(a,1)=a
B(a,2)=Mp;
B(a,3)=x;
B(a,4)=y;
a=a+1;
end
end
最佳答案
2021-01-26 05:45
if isempty(x)
continue;
end
这个不行吗?
或者直接goto label?
全部回答
1楼
2021-01-26 07:12
clear
syms a1 a2 b1 b2 r1 r2 t41 t42
k=0.01
n=1;
for d=0:300
for q=1:10
eq1=a1+a2+b1+b2-sqrt(2)*(1+r1);
eq2=a1-a2+b1-b2-sqrt(2)*(1+r2);
eq3=1+r1-t41;
eq4=1+r2-t42;
eq5=a1*exp(i*(q-k)*d)+a2*exp(i*(q+k)*d)+b1*exp(-i*(q+k)*d)+b2*exp(-i*(q-k)*d);
eq6=a1*exp(i*(q-k)*d)-a2*exp(i*(q+k)*d)+b1*exp(-i*(q+k)*d)-b2*exp(-i*(q-k)*d);
eq7=t41*(k-q)+r1*(q+k)+(a1*(k-q)-a2*(q+k)+b1*(q+k)+b2*(q-k))/sqrt(2)+(k-q)*t41;
eq8=t42*(-k-q)+r2*(q-k)+(a1*(k-q)+a2*(q+k)+b1*(q+k)-b2*(q-k))/sqrt(2)-(k+q)*t42;
[a01(n),a02(n),b01(n),b02(n),r01(n),r02(n),t041(n),t042(n)]=solve(eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,a1,a2,b1,b2,r1,r2,t41,t42);
n=n+1;
end
end
disp(' a01 a02 b01 b02 r01 r02 t041 t042 ')
x=[double(a01);double(a02);double(b01);double(b02);double(r01);double(r02);double(t041);double(t042)]'
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看