新浪博客

MATLAB微分方程参数拟合lsqcurvefit函数

2020-05-29 20:54阅读:
前面介绍过关于MATLAB微分方程参数拟合的例子,使用ode45函数+lsqnonlin函数来实现参数拟合。
这里使用ode45函数+lsqcurvefit函数来实现参数拟合,微分方程的转化形式见下面代码中KineticEqs部分。
代码如下:
完整代码请加文末企鹅号
function ODEfunction_lsqcurvefit
clear all;clc
format long
global tspan y0
tspan=[0 15 30 45 60 75 90 120]; % size=1*8
yexp=[4.826 4.206045728 3.081681077 2.582976758 2.368099268 2.296997119 2.259547446 2.221752483]'; % size=8*1,将第一个数据取出作为下面的初始值
k0=[0.002 0.003]; %猜测初值,可随机赋值,根据结果调整
y0=4.826; % 初始状态
lb=[0 0]; % 参数下限
ub=[1 1]; % 参数上限
%% ------------------
% 使用函数lsqcurvefit()进行参数估计
******************
fprintf('使用函数lsqcurvefit()估计得到的参数值为:')
fprintf('\tk1 = %.4f',k(1))
fprintf('\tk2 = %.4f',k(2))
fprintf('The sum of the squares
is: %.4e',resnorm)
%% ---------------------------------------------------------------------
************
figure
plot(ts,ys,'b',tspan,yexp,'or'),legend('计算值','实验值','Location','best');
xlabel('时间');ylabel('计算结果');
%% -------- 函数拟合后的统计量------------
fprintf('函数拟合后的统计量:')
% 计算相关系数
% 计算决定系数
% 计算均方根误差
% % 计算回归平方和 SSR(Sum of Squares for regression)
% 计算残差平方和 SSE(Sum of Squares for Error)
end
% ------------------------------------------------------------------
%% ---------------------------------------------------------
function f = ObjFunc4LNL(k,xdata) % 目标函数
********
end
%% ----------------------------------------------------------
function dydt = KineticEqs(t,y,k) % 微分方程
dydt = -k(1)*y*(2.413+y)+k(2)*(4.826-y)^2;
end
%-----------------------------------------
请不要做伸手党,示例完整代码收费10 RMB


MATLAB微分方程参数拟合lsqcurvefit函数

我的更多文章

下载客户端阅读体验更佳

APP专享