拟合曲线以找到传递函数的参数

时间:2018-05-17 13:01:24

标签: matlab mathematical-optimization curve-fitting

我有一对数据向量public class ReasonsViewModel : ViewModel { private IEnumerable<string> m_Names; public IEnumerable<string> Names { get { return m_Names; } set { if (m_Names != value) { m_Names = value; OnPropertyChanged(() => Names); } } } private string m_SelectedName; public string SelectedName { get { return m_SelectedName; } set { if (m_SelectedName != value) { m_SelectedName = value; OnPropertyChanged(() => SelectedName); } } } public DelegateCommand SelectCommand { get; private set; } public ReasonsViewModel() { SelectCommand = new DelegateCommand(p => SelectCommandExecute(p)); } private bool m_Processing; private void SelectCommandExecute(object item) { if (m_Processing) return; try { m_Processing = true; var name = item as string; if (name == null) return; SelectedName = name; } finally { m_Processing = false; } } } x,定义如下:

y

它们与等式相关

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的正确值,其数据符合此传递函数的正弦曲线的初始线性部分。

我该如何解决这类问题?

1 个答案:

答案 0 :(得分:1)

以下是curve fitting toolbox

的使用方法
  1. 首先定义appErrorChannelx,然后调用y

    Command window screenshot

  2. 您将看到以下屏幕,您需要在其中选择&#34; X数据&#34;和你的&#34; Y数据&#34;:

    cftool start screen screenshot

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

    cftool default fit screenshot

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

  4. 要使y符合您所需的型号,请点击下面的#34; Polynomial&#34;并选择选项&#34;自定义方程&#34;,然后编写您的模型。如果选中自动适合复选框(默认情况下),您将立即获得合适:

    enter image description here

  5. 正如您所看到的,我们得到了cftool,但我们也看到拟合并没有真正通过这些点,这意味着至少有以下一种陈述是正确的:

    • 模型(即出现L = 0.7157的自定义等式)不正确。
    • 拟合问题设置不正确(例如找到的L超出预期范围等。)。

    您可以找到问题的根源(可能是模型中的错误括号)并修复它。