matlab for循环为什么只执行1次

来源:百度知道 编辑:UC知道 时间:2024/06/30 14:16:34
哪位大大能告诉我这个循环错在哪,为什么只执行1次,急用,谢谢!
a1 = 8.001;
z3 = 10;
for x3 = -100:100
if x3>=-8 &x3<=8
th1=pi+atan(z3./(x3-a1));
else
th1 = atan(z3./(x3-a1));
end
th2 = atan(z3./(x3+a1));
end
我要表达的意思是当X3从-100递增到100,每次递增1,然后当X3在-8到8之间时TH1的角度+个PI值,其他的时候不加,但是我发现他只有1个X3的值是100,谁能告诉我错哪了,谢谢,急用,或者哪位大大能给我编1个能达到这种要求的程序,谢谢了!

其实你的程序已经满足你的要求了,事实上,运行后workspace空间上反映的是最后一个x3,也就是x3循环到最后一个数值(100)后的x3值,当然他就是100了,如果你想要得到的是中间运算中的所有值,而非最终结果,那么请看下面的程序:

a1 = 8.001;
z3 = 10;
k=0;
x3 = -100:100 ;
for x31=x3(1):1:x3(end)
k=k+1;
if x31>=-8 &x31<=8
th1(k)=pi+atan(z3./(x31-a1));
else
th1(k) = atan(z3./(x31-a1));
end
th2(k) = atan(z3./(x31+a1));
end

这个条件语句是不是有问题
if x3>=-8 &x3<=8
LZ 是不是想表达 大于 -8 同时小于 +8
应该是或的关系,而不是 与的关系
请纠正

可以百度 HI 我解决

这个比循环的效率高多了。

clc;clear
a1 = 8.001;
z3 = 10;
x3 = -100:100
th=-sign(x3).*(x3>=-8&x3<=0).*(pi+atan(z3./(x3-a1)))+sign(x3).*(x3>0&x3<8).*(pi+atan(z3./(x3-a1))) +atan(z3./(x3-a1));
plot(x3,th)