曲线拟合的应用场景非常丰富,几乎各行各业的统计分析中都会用到。图像处理中对各种线型拟合,机械工程中的振动与噪声数据,财务与销售数据预测,药物抑制剂计量诱导细胞变化数据,药物浓度与时间的关系,疾病疗效与疗程长短的关系,自然界物种的竞争数据等等,都会用到曲线拟合。此外,在结构有限元分析领域,各种非线性材料参数通常也是对测试数据进行参数拟合而得到。电磁分析中,磁芯损耗参数也是通过对功率损耗测试数据曲线拟合而来。
常见的曲线(方程)类型
这里介绍实际分析中常会遇到的曲线类型,包含线性与非线性的,我们知道 曲线拟合中的大部分模型都是非线性的 。WELSIM的CurveFitter工具基本都已经支持了这些曲线的拟合计算。
1. 直线
直线y=A+Bx是曲线拟合中最简单的回归模型之一。x为自变量,y为因变量,A和B为需要拟合的参数。其主要目标是寻找数据集中、数据增长的大致方向。
2. 多项式
多项式Y=A+B1*x+B2*x2+……+Bk*xk是实际工程中常用到的模型。其中x为自变量,y为因变量,k为级数,常用级数为1~9。当级数为1时,多项式即为直线方程。当级数大于1时,模型表现出非线性。阶数越高越能描述复杂的曲线,然而高阶多项式需要更多的测试数据点才能得到较为精确的解,同时也会导致计算量的增加。实际分析中会根据数据源与目标问题选择合适的阶数。
3. 对数
对数模型有一些不同的形式,大体上有半对数y = A lg(x) + B和全对数两类lg(y) = A lg(x) + B。x为自变量,y为因变量,A和B为需要拟合的参数。对数曲线形式常用于和浓度变化相关的模型。
4. 幂函数
常见的幂函数有两种:y=Ax^B和y=Ax^B+C。x为自变量,y为因变量,A、B和C为需要拟合的参数。幂函数的应用广泛,学者们发现动物的静息代谢率就和其体重成幂函数关系,肿瘤的大小和变化率也成幂函数关系。
5. 指数函数
常见的指数函数有:y=A*e^(B*x)和y=A*e^(Bx)+C*e^(D*x)。x为自变量,y为因变量,A、B、C和D为需要拟合的参数。人们发现营养与微量元素对人体健康会成指数关系。
6. 正态分布
正态分布的种类较多,比较常见和基础的是高斯模型y=Ae^[-(x-B)^2/C^2]。x为自变量,y为因变量,A、B和C为需要拟合的参数。统计学中大量的使用正态分布模型,如儿童升高与身体密度的关系,学生的考试成绩分布等等。
7. S型曲线
常见的S型曲线有对称型和非对称形的,又称作4参数和5参数拟合回归方程。数学表达式分别为y=D+(A-D)/[1+(x/C)^B]和y=D+(A-D)/[1+(x/C)^B]^M,x为自变量,y为因变量,A、B、C、D和M为需要拟合的参数。S型曲线相对通用,曲线的形状根据情况, 可能是一个单调上升的类似指数, 对数, 或双曲线的曲线, 可能是一个单调下降的上述曲线, 也可以是一条 S 形曲线。它要求 x 值不能小于0 (因为指数是实数)。由于其多用性,也成为科研或工程中常用的曲线模型之一。
8. 超d材料模型曲线
常见的超d模型曲线有Arruda-Boyce,Gent,Mooney-Rivlin,Neo-Hookean,Ogden,多项式(Polynomial),和Yeoh。自变量和因变量分别是应变和应力。根据超d模型不同,各种曲线也会有所不同。在有限元分析中,由于超d材料的多样性,很难从手册中直接获得用于有限元分析的材料参数,而材料的力学测试数据往往能从实验中获得,可以通过对测试数据进行曲线拟合从而得到用于有限元分析的材料常数。由于输入的数据有多种测试类型,需要对多种状态下的应力应变关系式进行计算拟合。有兴趣的读者可以在WELSIM的曲线拟合手册中获得更详细的信息。
9. 磁芯损耗模型曲线
电磁材料和设备大量的应用,使磁芯损耗问题也是一个热点。磁芯材料的损耗有一些经典的模型如电力钢的p=Kf*f*Bm^2+Kc*(f*Bm)^2+Ke*(f*Bm)^1.5,还有用于功率铁电的p=Cm*f^X*Bm^Y,
其中Bm为自变量,p为因变量,f为输入常数(电磁频率),Kf、Kc、Ke和Cm、X、Y是要拟合的参数。后者又称为著名的Steinmetz模型。和超d曲线拟合类似,磁芯损耗曲线的数据往往含有不同的工作频率,需要对每条频率下的曲线同时进行拟合得到参数。
曲线拟合工具CurveFitter
虽然曲线拟合在各行各业都有广泛的应用,但是还没有简单好用且免费的曲线拟合工具软件。有限元软件WELSIM最近发布一款免费的曲线拟合工具CurveFitter,作为一款专门用于曲线拟合的工具软件,CurveFitter不仅能拟合超d材料模型和磁芯损耗模型的参数,也具有许多通用领域所用的曲线模型,可用于更为广泛的科学与工程计算。
CurveFitter的使用步骤如下:
1. 选择需要进行拟合的曲线方程
2. 编辑添加表格数据,或者直接导入数据。
3. 在曲线窗口中检查输入的测试数据
4. 点击检查按钮可以检查测试数据(可选)。d出对话框会提示数据状态。
5. 点击求解按钮进行曲线拟合数值计算。如果求解成功,参数栏会自动显示拟合好的数值,曲线窗口会显示拟合好的曲线。
6. 至此曲线拟合计算已经完成。如果常查看不同参数下曲线的形态。可以调节参数栏的数值并点击更新按钮。
注意事项
在曲线拟合时,最好依据曲线的形状来选择函数模型。由于所选的拟合函数不同,会产生不同的拟合效果,需要我们按最优原则来选择最佳拟合函数。同时,给定数据点的多少和数据点的范围对曲线拟合也会产生影响。由于拟合数据存在误差,需要检验拟合好后的曲线与参数。尽量能将模型误差和测量误差对曲线拟合的影响减至最小。
最后,送上 *** 作视频,供大家参考。
已知好几个点的平面坐标,把它们连起来(连续曲线),可以用matlab、1stopt等软件计算这条曲线的函数方程f(x)。如用matlab软件来处理的话,可以按下列方法去实现:
1、首先我们给出将数据,分别赋值给x、y;
2、建立曲线的函数方程, fx=func(a,x),这里fx为y,a为函数方程的系数,例如 fx=a(1)+a(2)*x+a(3)*x^2
3、使用拟合函数(如,nlinfit函数,lsqcurvefit函数,regress 函数,前二个主要用于非线性函数,后一个用于多项式函数),求出拟合系数
4、计算拟合值 fx=func(a,x),此时a和x是已知
5、使用plot绘图函数,绘制图形
为了便于理解,特举例说明。可执行代码:
x=[0.1 0.3 0.6 1.0 2.4 4.0]
y=[21.43 41.65 60.35 72.42 80.34 85.13]
a0=[91.6682 -2.40840.9725];%拟合系数的初值
func=@(a,x)a(1)*(1-exp(a(2)/a(3)*(1-exp(-a(3)*x))))%函数定义
a=nlinfit(x,y,func,a0)%拟合系数
xi=x
yi=func(a,xi)%计算拟合值
plot(x,y,'*',xi,yi,'r-') %绘制图形
xlabel('x'),ylabel('y(x)') %设置坐标轴名称
A=[y' y1']
disp('原始数据y拟合数据y1')
disp(A)
执行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)