利用matlab面向对象编程实现数据非线性拟合

2019-05-22  本文已影响0人  快乐的夏天_eaf9

本实例展示了如何使用面向对象的方法对数据进行非线性拟合;涉及到的主要知识点为:

  1. 利用nlinfit进行非线性拟合;
  2. 利用Dependent关键词实现属性的实时更新;
  3. 使用get和set实现对属性的赋值(其实不需要,仅仅是为了示范其写法);
  4. 使用了局部函数;
    具体的代码如下:
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
上一篇下一篇

猜你喜欢

热点阅读