美文网首页
利用matlab面向对象编程实现数据非线性拟合

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

作者: 快乐的夏天_eaf9 | 来源:发表于2019-05-22 17:31 被阅读0次

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

    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
    

    相关文章

      网友评论

          本文标题:利用matlab面向对象编程实现数据非线性拟合

          本文链接:https://www.haomeiwen.com/subject/lmnuzqtx.html