利用matlab面向对象编程实现数据非线性拟合
2019-05-22 本文已影响0人
快乐的夏天_eaf9
本实例展示了如何使用面向对象的方法对数据进行非线性拟合;涉及到的主要知识点为:
- 利用nlinfit进行非线性拟合;
- 利用Dependent关键词实现属性的实时更新;
- 使用get和set实现对属性的赋值(其实不需要,仅仅是为了示范其写法);
- 使用了局部函数;
具体的代码如下:
classdef Rate_cal<handle
properties
x;
y;
end
properties(Dependent)
Fit;
Rate;
Hfigure;
end
methods
function obj = Rate_cal(x,y)
obj.x=x;
obj.y=y;
end
function set.x(obj,val)
obj.x=val;
end
function set.y(obj,val)
obj.y=val;
end
function Fit=get.Fit(obj)
[Fit,~]=Rate_cal3(obj.x,obj.y);
end
function Rate=get.Rate(obj)
[~,Rate]=Rate_cal3(obj.x,obj.y);
end
function Hfigure=get.Hfigure(obj)
Hfigure= plot(obj.x,obj.y);
end
end
end
function [f,f3]=Rate_cal3(x,y)
% 本函数用于计算物质生成/消耗速率
%
% f为物质检测数据的拟合;f3为物质消耗速率方程
%
% see also:nlinfit,matlabFunction
f=@(b,x)(b(2) + (b(1)-b(2))./(1 + exp((x-b(3))./b(4))));
beta0=[63;7;14;3];
beta = nlinfit(x,y,f,beta0);
syms t;
f=f(beta,t);
f2=diff(f,t,1);
f3=matlabFunction(f2);
f=matlabFunction(f);
end