matlab中for循环为什么只运行了一次

a=0.89;b=0.6;alpha=4.1*pi/180;m=0.4;n=2.05;
h0=0.01:0.01:1.2;k=size(h0);
for i=1:k
h=h0(i);
if (2*b-m*tan(alpha))<h & h<2*b
x=0:0.00001:((2*b-h)/tan(alpha)+n);
y=h-(x-(2*b-h)./tan(alpha)).*tan(alpha);
s=(a/b).*(pi*b^2.*(1-1/pi.*acos((y-b)./b))+(y-b).*(b^2-(y-b).^2).^(1/2));
f=pi*a*b*(m-(2*b-h)/tan(alpha))+trapz(x,s);
elseif n*tan(alpha)<h & h<(2*b-m*tan(alpha))
x=0:0.00001:(m+n);
y=h-(x-m).*tan(alpha); s=(a/b).*(pi*b^2.*(1-1/pi.*acos((y-b)./b))+(y-b).*(b^2-(y-b).^2).^(1/2));
f=trapz(x,s);
else
x=0:0.00001:(m+h/tan(alpha));
y=h-(x-m).*tan(alpha);
s=(a/b).*(pi*b^2.*(1-1/pi.*acos((y-b)./b))+(y-b).*(b^2-(y-b).^2).^(1/2));
f=trapz(x,s);
end
v(i)=f;
end
v

v =
0.0035

感觉应该显出来的v是个1*120的向量呀,为啥结果就显示第一次循环的值

第1个回答  2015-08-06
把第二行的k=size(h0);换成k=length(h0);
因为size返回数组[1,120],在后面的for里变成了for i=1:1.追问

v =
Columns 1 through 4
0.0035 + 0.0000i 0.0063 + 0.0000i 0.0100 + 0.0000i 0.0148 + 0.000i
为什么运行的结果会是虚数啊,我单独运行当h0.001时结果显示为0.0035却不是虚数,理论上结果应该是实属的,这是为啥,求大神讲解

追答

虚部为零,你就用real去了吧,应该是计算误差的原因。

本回答被提问者采纳
第2个回答  2015-08-06
size()返回的是两个值,[行数,列数]=size(a),所以你代码里k其实等于行数1。把size改成length就可以。追问

v =
Columns 1 through 4
0.0035 + 0.0000i 0.0063 + 0.0000i 0.0100 + 0.0000i 0.0148 + 0.000i
为什么运行的结果会是虚数啊,我单独运行当h0.001时结果显示为0.0035却不是虚数,理论上结果应该是实属的,这是为啥,求大神讲解

matlab for循环为什么只执行1次
其实你的程序已经满足你的要求了,事实上,运行后workspace空间上反映的是最后一个x3,也就是x3循环到最后一个数值(100)后的x3值,当然他就是100了,如果你想要得到的是中间运算中的所有值,而非最终结果,那么请看下面的程序:a1 = 8.001;z3 = 10;k=0;x3 = -100:100 ;for x31=x3(1):...

matlab中for循环为什么只运行了一次
因为size返回数组[1,120],在后面的for里变成了for i=1:1.

有语句“for+k=[12;34]”引导的循环结构,其循环体为什么执行一次?
然而,在这个例子中,循环体中并没有使用k的值来进行任何操作,因此它只会执行一次,无论k的取值范围如何。循环体中的语句只会在for循环的第一次迭代时执行一次,然后for循环就会结束。因此,这个循环结构中的循环体只会执行一次。如果需要让循环体执行多次,可以在循环体中使用k的值来进行操作。例如,...

matlab for循环怎么只执行一次
循环能够运行,不是只运行了一次,肯定是运行完了 只是你的fprintf('i:%g j:%g tp:%g fp:%g fn:%g\\n',i,j,tp,fp,fn)语句 在判断条件elseif(label(i:1)==1 & predct(i:1)==-1)里面 所以只有符合条件label(i:1)==1 & predct(i:1)==-1才会显示 而你label(i:1)是返回label...

matlab中for循环只有一个结果是什么情况,下面是我的程序,可以帮忙看一...
我看到 xx 和 yy 是在循环内部定义的数组,而 XX 和 YY 是在循环结束后定义的数组,且是通过将 xx 和 yy 转置得到的。因此,在你的代码中,只能得到最后一次循环的结果。如果你想要得到所有循环的结果,需要将 XX 和 YY 改为矩阵形式的变量,并在循环中不断将每次的结果添加到这些矩阵中。

matlab编写.m文件,为什么循环不能进行,只进行一次就停止了呢?数组B怎 ...
不是循环一次,程序里面的B每次循环都重新赋值,之前的数据都没保存下来,你试下下面的程序 global A;B=[];[r,c]=size(A);for i=1:1:r;if A(i,4)<1;B=[B;A(i,:)];end end

matlab for循环如何画图?我的程序只能循环一次...
不是只循环一次,是您的判断条件有些苛刻!要求data1(j,6)==i成立,您看一下data1中第六列中的第j行的数字有对应i的吗?我的腾讯联系方式,散坝而要龄要伞流午

matlab: 为什么我的程序中for循环只执行了一次? 谢谢
试一下我的修改:work_3(nmat); %多行两列的矩阵 A_1 = A(:,1);A_2 = A(:,2);s1 = numel(unique(A_2)); % length(unique(A_2));count = hist(A_2,unique(A_2));p = 1; k = 1; q = count(1);D = work_5(A_1,p,q);for j = 1:(s1-1)if (length(D)...

matlab,for循环结果只有一个
matlab,for循环结果只有一个 n0=(4*beta*ap^2\/m\/V)^0.5; 这个语句更新n0变量,并没有对上一次生成的n0进行保存。所以建议程序做一点小小的改动。在for循环之前,初始化一个变量N=[];同时for循环中增加一条语句:

MATLAB中for循环变量值不增加
从代码看,循环后i和j没有不变的理由(除非m、n为1,循环体只执行一次,实际上没有循环)。顺便说一下,MATLAB的for循环是基于索引的,即使你在循环体里面修改控制变量i、j的值,也不会影响循环的执行次数(实际上在循环体里面修改的i、j可以看成临时创建的局部变量)。

相似回答