在求time-averaged force
coefficients时开始"搜学",研究了如何用matlab和excel求rms的方法。虽然不知道这种方法所得的rms值是否就是time-averaged
(时间平均)值,但至少又学会了一种matlab的计算。
一。对于txt,dat类型文件:
先将目标文件file.txt导入matalbe,并赋值给矩阵X(此时file中应只有欲计算的一列数据):
X=load('f1exc.txt');
求解这列数据的rms值(注意X大小写与之前赋值要一致):
rms= sqrt(sum(X.^2)/length(X))
补充:将有多列数据的excel中的数据考入txt,成为有多列数据的
txt。此时赋值给矩阵X,则X也是多列矩阵。方法大致一样,只不过在求rms值时,需指明欲求的该列数据的列数。(如,欲求第一列数据的rms,则格式:X(:,1))
先将目标文件file.txt导入matalbe,并赋值给矩阵X(此时file中应有多列数据,则X为多列向量):
X=load('f1exc.txt');
求解这些数据中第一列(其他任何一列均方法类似)数据的rms值(注意X大小写与之前赋值要一致):
rms=
sqrt(sum(X(:,1).^2)/length(X(:,1)))
再补充一步,关于直接用matlab将数据写入excel中(只需要找到正确的欲写入的位置,合并后的KLM也没关系,指定为L就可以):
xlswrite('rms.xlsx',inlinerms,'sheet1','L3')
dat类型文件与txt读入相类似,如y2=load('CycleCm_f.dat');
二。对于excel(.xls,.xltx,xlsx类型)文件:
首先读入excel文件,命令为:
x=xlsread('f1.xltx');(x为名称,可随意设定)
将excel文件中的每一列赋值给某个列向量:
dataX=x(:,1);(dataX,dataY为名称,可随意设定)
dataY=x(:,2);
好了,接下来求解某列的rms值就可以了。:)
rms= sqrt(sum(dataX.^2)/length(dataX))
还有一点需要注意,欲写入的目标文件在执行命令期间应关闭,否则会出现错误提示:rror using
==> xlswrite at 253
The file C:\Documents and Settings\kyang\Desktop\rms.xlsx is not
writable. It may be locked by another
process.
final command:
x=xlsread('f1.xlsx');time=x(:,1);inline=x(:,2);lift=x(:,3);liftrms=sqrt(sum(lift.^2)/length(lift));inlinerms=sqrt(sum(inline.^2)/length(inline));xlswrite('rms.xlsx',inlinerms,'sheet1','F4');xlswrite('rms.xlsx',liftrms,'sheet1','I4');
one command can do it all!
至于在excel中,目前我用的是比较笨的方法,
首先,用一列(如I列)计算出目标列(如B列)数据的平方:
=B1^2, 之后拖动到列最后一个数据;
然后再基于此另起一列用命令计算B列数据的RMS值:
=SQRT((SUM(I:I)/26795)),其中26795是列B中所有元素的个数。
两者相比较之下,还是matlab更方便快捷一些。