首页 > 解决方案 > 拟合曲线以找到传递函数的参数

问题描述

我有一对数据向量xy,定义如下:

data = [
     0    0; 
     0.05 1.108646244630E-01;
     0.10 2.217423074817E-01;
     0.15 3.325947375398E-01;
     0.20 4.434863433851E-01;
     0.25 5.543595496420E-01;
     0.30 6.652338361973E-01;
     0.35 7.761094191116E-01;
     0.40 8.869865144820E-01;
     0.45 9.978653384221E-01;
     0.50 1.108746107036E+00];

 x = data(:,1);
 y = data(:,2);

它们由等式相关

y = (cos(k*L)^2-(0.8194*k*cos(k*L)*sin(k*L))*x;

其中k=3是一个固定的数字。

现在我想找到L适合我的数据的上述等式的正确值。

尽管数据看起来是线性的,但我想找到L适合该传递函数正弦曲线初始线性部分的数据的正确值。

我该如何解决这种问题?

标签: matlabmathematical-optimizationcurve-fitting

解决方案


以下是使用曲线拟合工具箱的方法:

  1. 首先定义xand y,然后调用cftool

    命令窗口截图

  2. 您将看到以下屏幕,您需要在其中选择“X 数据”和“Y 数据”:

    cftool 开始屏幕截图

  3. 选择我们之前创建的xy向量后,将显示默认的线性拟合:

    cftool 默认适配截图

    (正如您已经看到的,这实际上非常适合 和 之间的x关系y

  4. cftool适合您所需的模型,请单击“多项式”下拉框并选择“自定义方程”选项,然后编写您的模型。如果选择了Auto fit复选框(默认情况下),您将立即获得一个适合:

    在此处输入图像描述

如您所见,我们得到了L = 0.7157,但我们也看到拟合并没有真正通过点,这意味着至少以下陈述之一是正确的:

  • 模型(即L出现的自定义方程)不正确。
  • 拟合问题设置不正确(例如,发现L的问题超出了预期范围等)。

找到问题的根源(模型中的括号可能放错了位置)并修复它取决于您。


推荐阅读