hancy 发表于 2011-4-19 16:59

循环语句的化简和工具箱调用的问题

本帖最后由 hancy 于 2011-4-19 17:51 编辑

下面是我写的一个半功率法求阻尼的小程序。对频谱数据用CFToolbox二次拟合后会得到p1、p2和p3的值,进而求出阻尼。
问题1:程序里循环语句部分是基于C语言基础写的,但看过eight前辈的一个帖子说的Matlab用矩阵运算更简便,想求助大神们我的程序里的循环语句能够怎么化简啊,我自己试了几次都不成功。
问题2:每次调用工具箱我都是点击左下角的Start,而且算得的参数p1、p2和p3都要复制到下面程序里才能使用,感觉很繁琐。有没有方法用程序调用工具箱然后直接输出参数呐?
先谢谢大家了~

<
x=5:0.001:15;
f(y) = p1*x^2 + p2*x + p3;      
=max(f);      %功率最大值及横坐标
vh=v0/sqrt(2);         %半功率点幅值
n=length(f);t=1:n;
plot(t,f);
%循环语句,求出半功率点的横坐标
j=0;
for i=1:n-1;
    a=f(i)-vh;
    b=f(i+1)-vh;
    if a*b<=0
       j=j+1;
       if abs(a)<abs(b)
          p(j)=t(i);
          v(j)=f(i);
       else
          p(j)=t(i+1);
          v(j)=f(i+1);
       end
    end
end


C=(p(2)-p(1))/(2*p0)   %求阻尼
>

qibbxxt 发表于 2011-4-19 17:26

1.你没有写注释,看起来比较麻烦,你还是自己向量化吧
2.cftool可以生成代码供重复调用的,点击file--->Generate code

hancy 发表于 2011-4-19 17:43

回复 2 # qibbxxt 的帖子

谢谢指导。
写注释要中英文切换,一直嫌麻烦就没写过。不过不写注释确实是个坏习惯,以后改正!

ChaChing 发表于 2011-4-20 00:29

回复 1 # hancy 的帖子

1.考量下使用find
2.求阻尼, 有需要一定先拟合吗?
3.求阻尼, 用二次多项式拟合, 合适吗?
不懂, 仅提个人疑问

hancy 发表于 2011-4-20 10:20

ChaChing 发表于 2011-4-20 00:29 static/image/common/back.gif
回复 1 # hancy 的帖子

1.考量下使用find


感谢你的关注~
1.确实试过find,不过没成功。于是尝试将连续函数变成向量,程序里f实际上是一个向量,而不是一个连续函数(程序开头部分没写完整。。)。
2.原始数据是离散点,经过FFT后得到频谱,频率幅值最大处两边不完全对称,甚至根本不对称,直接用半功率法得不到好的结果。现在流行的是拟合后得到光滑曲线,尽量使峰值两边对称。
3.频率到阻尼是二次关系,而且二次函数有对称轴。不过原来我为了拟合尽可能多的数据,尝试过用高次拟合,但拟合后波峰偏移的厉害,于是改成二次拟合了。现在也是困扰我的一个方面。

meiyongyuandeze 发表于 2011-4-20 23:23

还是建议楼主查阅些关于阻尼的资料,还是先确定阻尼的大概形式以后再选取拟合形式,数据拟合和你使用的拟合方程形式有很大关系。纯属自己的个人意见仅从数据拟合来考虑的!

ChaChing 发表于 2011-4-21 00:17

为何有这些疑问
2.求阻尼, 有需要一定先拟合吗?
不是採多次平均即可??
3.求阻尼, 用二次多项式拟合, 合适吗?
二次多项式可以拟合FRF那个尖尖的peak吗??
页: [1]
查看完整版本: 循环语句的化简和工具箱调用的问题