Matlab如何根据一组数据拟合出包含三角函数的曲线?m程序:clear allxdata=[6.95 12.19 18.03 26.17 32.77 41.38 49.89 61 70.04 84.07 92.95 102.1 111.3 119.87];ydata=[0.6 0.9 1.92 4.1 5.52 7.6 9.52 11.33 11.56 9.32 8 5.59 3.2 1.39];f=@
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/13 18:28:13
Matlab如何根据一组数据拟合出包含三角函数的曲线?m程序:clear allxdata=[6.95 12.19 18.03 26.17 32.77 41.38 49.89 61 70.04 84.07 92.95 102.1 111.3 119.87];ydata=[0.6 0.9 1.92 4.1 5.52 7.6 9.52 11.33 11.56 9.32 8 5.59 3.2 1.39];f=@
Matlab如何根据一组数据拟合出包含三角函数的曲线?
m程序:
clear all
xdata=[6.95 12.19 18.03 26.17 32.77 41.38 49.89 61 70.04 84.07 92.95 102.1 111.3 119.87];
ydata=[0.6 0.9 1.92 4.1 5.52 7.6 9.52 11.33 11.56 9.32 8 5.59 3.2 1.39];
f=@(B,xdata)B(1)*(1-cos(B(2)*xdata));
[x,resnorm]=lsqcurvefit(f,[10,1],xdata,ydata);
用lsqcurvefit会出现提示
Local minimum possible.
lsqcurvefit stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.
用Curve Fitting Tool工具箱结果如下图所示
图中的黑点即是现有数据,很容易能看出它是一个三角函数半个周期的点截取下来的,实际上也是这样的,黑点数据取自y=5.8*(1-cos(0.0465*x)),为什么不能拟合出这条曲线的参数呢?
Matlab如何根据一组数据拟合出包含三角函数的曲线?m程序:clear allxdata=[6.95 12.19 18.03 26.17 32.77 41.38 49.89 61 70.04 84.07 92.95 102.1 111.3 119.87];ydata=[0.6 0.9 1.92 4.1 5.52 7.6 9.52 11.33 11.56 9.32 8 5.59 3.2 1.39];f=@
原因是对初值(主要是B(2))非常敏感,很容易陷入局部最优.
你可以取初值为[1,0.05]试一下,应该可以得到比较满意的结果.