matlab - 拟合曲线以找到传递函数的参数
问题描述
我有一对数据向量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
适合我的数据的上述等式的正确值。
尽管数据看起来是线性的,但我想找到L
适合该传递函数正弦曲线初始线性部分的数据的正确值。
我该如何解决这种问题?
解决方案
以下是使用曲线拟合工具箱的方法:
首先定义
x
andy
,然后调用cftool
:您将看到以下屏幕,您需要在其中选择“X 数据”和“Y 数据”:
选择我们之前创建的
x
和y
向量后,将显示默认的线性拟合:(正如您已经看到的,这实际上非常适合 和 之间的
x
关系y
)要
cftool
适合您所需的模型,请单击“多项式”下拉框并选择“自定义方程”选项,然后编写您的模型。如果选择了Auto fit复选框(默认情况下),您将立即获得一个适合:
如您所见,我们得到了L = 0.7157
,但我们也看到拟合并没有真正通过点,这意味着至少以下陈述之一是正确的:
- 模型(即
L
出现的自定义方程)不正确。 - 拟合问题设置不正确(例如,发现
L
的问题超出了预期范围等)。
找到问题的根源(模型中的括号可能放错了位置)并修复它取决于您。
推荐阅读
- tensorflow - TFOD 中的平均精度和平均召回率都始终为 0,并且不显示边界框
- c++ - 47515.cpp:11:10:致命错误:jni.h:没有这样的文件或目录
- javascript - 如何正确渲染 Chartjs 与条形数据之间的巨大差异?
- java - 如何摆脱ConstraintValidatorContext的标题属性错误响应中的propertyPath - SpringBoot自定义验证
- java - 在 CardLayout 中重绘字符串
- hyperledger-fabric - 升级/修改 Fabcar Chainicode 时出错
- mysql - Mysql - 加入标签和值表,并将未引用的标签包括为空
- javascript - 选择选项 onChange 仅更改一次
- perl - 如何在 Perl 散列中存储和使用变量和子例程名称?
- flutter - 未为类型“Type”定义运算符“[]”。尝试定义运算符'[]'