夏娜的真命h:matlab里的if程序段的问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 05:13:44
在matlab中有下面这个小程序:
function [mean,stdev]=stat(x)
[m,n]=size(x);
if m==1
m=n;
end
mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2);

他的运行结果为
>> x=[1 2 3 4 5 6 7 8 9];
[mean,stdev]=stat(x)

mean =

5

stdev =

2.5820
我对这个程序中的if语句的作用不是很了解因次,在程序中去掉了if段语句,即:
function [mean,stdev]=stat(x)
[m,n]=size(x);

mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2);

改完后,其运行结果为:
x=[1 2 3 4 5 6 7 8 9];
[mean,stdev]=stat(x)

mean =

45

stdev =

0 +41.7133i

请朋友们帮我解释一下,在这段程序中if其什么作用,谢谢

对函数sum,如果输入是矩阵,则对列求和,是向量,则直接求和。
你给的这个函数是利用sum求均值和标准差的,同时适用于矩阵和向量,当输入是矩阵或者列向量的时候没有问题,如果输入是行向量,在mean=sum(x)/m这一行,sum是对同一行的不同列求和,而m是行数1,如果不加if语句,由于m是1,相当于直接让mean等于向量的和,当然会出错,进而造成下面那个stdev=sqrt(sum(x.^2)/m-mean.^2)出错。