c#怎么拟合函数得到参数_数值计算(三十七)给定函数的参数拟合

c#怎么拟合函数得到参数_数值计算(三十七)给定函数的参数拟合_第1张图片

一、功能描述:

1、给定数据,函数拟合

2、数据程序放在同一文件夹下

3、调用函数方法:[P,D,C,T,resnorm]=Shen,返回值顺序一 一对应

4、给定函数形式

5、读取esr.txt数据

6、给定拟合参数的初值,返回拟合参数的近似结果。

二、拟合结果

c#怎么拟合函数得到参数_数值计算(三十七)给定函数的参数拟合_第2张图片

三、相关程序

function [P,D,C,T,resnorm]=Shen()
%{
  程序功能:
1、给定数据,函数拟合
2、数据程序放在同一文件夹下
3、调用函数方法:[P,D,C,T,resnorm]=Shen,返回值顺序一 一对应
4、给定函数形式
5、esr.txt数据
------------------
130	0.24359
140	0.2513
150	0.25564
160	0.25668
170	0.26176
180	0.26537
190	0.27184
200	0.27895
210	0.28618
230	0.30469
250	0.33537
270	0.3776
290	0.43333
310	0.48011
330	0.57816
350	0.67506
370	0.77885
390	0.90363
--------------------
data: 2019.12.15
%}
    clc
    clear
    close all
    
    str='esr.txt' ;  
    data=importdata(str) ; %导入文件数据
    xdata=data(:,1);
    ydata=data(:,2) ;
    figure
    scatter(xdata, ydata, 'linewidth',2)  %绘制散点图
    
    hold on 
    
    
%     f=fittype(s,  'independent',  't' , 'coefficients',  {'C' , 'D', 'P' ,'T'});
    
%     cfun=fit( x, y, f) ;%显示拟合函数
    P=0.01659 ;
    D=-1715.76262 ;
    C=24.63769 ;
    T=3.29012e-4 ; %给定初始值
    %给定函数的形式            
    f=@(a ,xdata )( a(3).*2./(3+exp(-a(2)./xdata )) ).*(1-a(1))+0.5.*a(3).*a(1)+a(4).*(1-a(1)).*xdata  ;
    
    a0=[P,D,C,T];
    [A ,resnorm]=lsqcurvefit(f, a0, xdata, ydata ); 
%     disp(A)  %显示所求参数
    
    
    xi=linspace( min(xdata) ,max(xdata) ,100); 
    yi=f(A, xi ); %测试拟合函数效果
    plot(xi, yi,'linewidth' ,3)
    
    P=A(1);
    D=A(2);
    C=A(3);
    T=A(4);
    
end
%     result=cfun;

你可能感兴趣的:(c#怎么拟合函数得到参数)