我最近在看文献时,看到到作者在用nlinfit进行非线性函数参数识别(拟合参数),文献中的非线性函数是一个方程组,里面有微分方程。(图1就是作者要拟合的函数,需要拟合的参数是δ0,δ1,δ2,Fc, Fs, vs. 自变量是v,因变量是Ff,v是t的函数,是已知的,α和β都是已知的),不知作者处于何种考虑,在构建拟合函数时并不是采用常规的数学表达式,而是用的simulink模型,然后在定义拟合函数时用sim令来调用该模型。我尝试过用他的方法来拟合,可是一直不成功,不知错在哪里。这里我贴上一个简单的例子来,请各位给看看。
这个简单的例子是用来拟合非线性函数y=1+2*x+3*x^2的
下面是用nlinfit拟合的主函数:(其中通过for循环产生一组原始数据用于拟合,myfun是定义的含有未知参数的函数,这里我想了解用simulink模型来进行参数拟合的原理,所以就利用sim指令来定义myfun了)
clc,clear,clf;
global b;
global c;
global d;
for ii=1:1:100
x(ii) = ii;
y(ii) = 2 + 3*ii + 4*ii^2;
end
plot(x,y,'.');
hold on;
a0=[1,1.2,3.4];
beta=nlinfit(x',y',@myfun,a0);
下面是自定义的myfun函数:(其中参数a是需要拟合的参数b,c,d的集合,m就是自变量了)
function [yout] = myfun(a,m)
global b;
global c;
global d;
b=a(1);
c=a(2);
d=a(3);
[t,x,y]=sim('ex_3',100);
yout=y;
end
图2是用simulink构建的y=b+c*x+d*x^2的模型
![在用nlinfit对非线性函数拟合时遇到的一些问题请教]()
图1.jpg
![在用nlinfit对非线性函数拟合时遇到的一些问题请教-1]()
图2.jpg |