matlab求非线性拟合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab求非线性拟合相关的知识,希望对你有一定的参考价值。

未定义与 'cell' 类型的输入参数相对应的函数 'mtimes'。这个错误是什么意思?要怎么修改?

在科学计算和工程应用中,经常会遇到需要拟合一系列的离散数据,最近找了很多相关的文章方法,在这里进行总结一下其中最完整、几乎能解决所有离散参数非线性拟合的方法
第一步:得到散点数据
根据你的实际问题得到一系列的散点
例如:
x=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';%加上一撇表示对矩阵的转置
y=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';
第二步:确定函数模型
根据上述的实际散点确定应该使用什么样的曲线,或者说是想要模拟的曲线

t=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';
tt=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';

plot(t,tt,'.');%得到散点图
散点图如下所示:

我们已知现存的几种典型的(也是绝大多数情况下的函数模型)

选定一个与散点图像相匹配的函数模型,在此例中我们选择典型的S型曲线模型y= 1/(a+b*e^(-x)),其实此处的函数模型可以任意。

第三步:确定选用函数模型中的未知参数

首先了解一下matlab中的inline函数,inline是用来定义内联函数的
比如说:

y=inline('sin(x)','x') %第一个参数是表达式,第二个参数是函数变量
y(0) %计算sin(0)的值
y(pi) %计算sin(pi)的值
q=quad(y,0,1); %计算sin(x) 在0到1上的积分
之后,我们在代码中进行函数的定义

x=[3.2,3.6,3.8,4,4.2,4.5,4.8,5,5.3,5.4,5.6,5.8,6,6.2,6.4,6.6,6.9,7.1]';
y=[0.38,0.66,1,0.77,0.5,0.33,0.66,0.83,0.33,1,0.33,0.5,0.33,0.71,0.71,1,0.87,0.83]';

my
参考技术A 那你就把X改为矩阵,别用cell

以上是关于matlab求非线性拟合的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何拟合光滑曲线

如何用matlab数据拟合函数?

matlab二元非线性拟合?

怎么用matlab进行非线性的多元函数拟合?

非线性曲线的matlab拟合?

想用matlab确定拟合函数的最佳次数?