MATLAB实例:非线性曲线拟合

MATLAB实例:非线性曲线拟合

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

最小二乘法拟合非线性曲线,给出两种方法:(1)指定非线性函数,(2)用傅里叶函数拟合曲线

1. MATLAB程序

clear
clc
xdata=[0.1732;0.1775;0.1819;0.1862;0.1905;0.1949;0.1992;0.2035;0.2079;0.2122;0.2165;0.2208;0.2252;0.2295;0.2338;0.2384];
ydata=[-3.41709;-4.90887;-6.09424;-6.95362;-7.63729;-8.12466;-8.37153;-8.55049;-8.61958;-8.65326;-8.60021;-8.52824;-8.43502;-8.32234;-8.20419;-8.04472];
%% 指定非线性函数拟合曲线
X0=[1 1];
[parameter,resnorm]=lsqcurvefit(@fun,X0,xdata,ydata); %指定拟合曲线
A=parameter(1);
B=parameter(2);
fprintf(‘拟合曲线Lennard-Jones势函数的参数A为:%.8f,B为:%.8f‘, A, B);
fit_y=fun(parameter,xdata);
figure(1)
plot(xdata,ydata,‘r.‘)
hold on
plot(xdata,fit_y,‘b-‘)
xlabel(‘r/nm‘);
ylabel(‘Fe-C Ec/eV‘);
xlim([0.17 0.24]);
legend(‘观测数据点‘,‘拟合曲线‘)
% legend(‘boxoff‘)
saveas(gcf,sprintf(‘Lennard-Jones.jpg‘),‘bmp‘);
% print(gcf,‘-dpng‘,‘Lennard-Jones.png‘);
%% 用傅里叶函数拟合曲线
figure(2)
[fit_fourier,gof]=fit(xdata,ydata,‘Fourier2‘)
plot(fit_fourier,xdata,ydata)
xlabel(‘r/nm‘);
ylabel(‘Fe-C Ec/eV‘);
xlim([0.17 0.24]);
saveas(gcf,sprintf(‘demo_Fourier.jpg‘),‘bmp‘);
% print(gcf,‘-dpng‘,‘demo_Fourier.png‘);
function f=fun(X,r)
f=X(1)./(r.^12)-X(2)./(r.^6);

2. 结果

拟合曲线Lennard-Jones势函数的参数A为:0.00000003,B为:0.00103726
fit_fourier = 

     General model Fourier2:
     fit_fourier(x) =  a0 + a1*cos(x*w) + b1*sin(x*w) +
               a2*cos(2*x*w) + b2*sin(2*x*w)
     Coefficients (with 95% confidence bounds):
       a0 =       79.74  (-155, 314.5)
       a1 =       112.9  (-262.1, 487.9)
       b1 =       28.32  (-187.9, 244.6)
       a2 =        24.5  (-114.9, 163.9)
       b2 =       13.99  (-75.89, 103.9)
       w =       15.05  (3.19, 26.9)

gof = 

  包含以下字段的 struct:

           sse: 0.0024
       rsquare: 0.9999
           dfe: 10
    adjrsquare: 0.9999
          rmse: 0.0154

Fig 1. Lennard-Jones势函数拟合曲线

Fig 2. 傅里叶函数拟合曲线

原文地址:https://www.cnblogs.com/kailugaji/p/11839581.html

时间: 2024-10-09 06:53:25

MATLAB实例:非线性曲线拟合的相关文章

MATLAB实例:将批量的图片保存为.mat文件

MATLAB实例:将批量的图片保存为.mat文件 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 图片数据:horse.rar 1. MATLAB程序 clc; clear all; num = 17; for i = 1 : num IM = imread(sprintf('E:\\将批量的图片保存为mat\\horse\\horse%03d.jpg', i)); eval(sprintf('IM%d = IM;', i)); end str =

MATLAB实例:聚类初始化方法与数据归一化方法

MATLAB实例:聚类初始化方法与数据归一化方法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 聚类初始化方法:init_methods.m function label=init_methods(data, K, choose) % 输入:无标签数据,聚类数,选择方法 % 输出:聚类标签 if choose==1 %随机初始化,随机选K行作为聚类中心,并用欧氏距离计算其他点到其聚类,将数据集分为K类,输出每个样例的类标签 [X_num,

C++调用matlab实例

这段代码是C++调用matab引擎的过程,代码的目的很简单,在C++中创建一个vector数组,然后将这个vector数组单位化.写这个代码的目的是学些C++与matlab之间的数据交互,以供日后参考. #include <iostream> #include <cstdio> #include <vector> #include <math.h> #include <time.h> #include "engine.h" #

深度信任网络DBN的一个matlab实例

关于深度学习的一些个人浅见: 深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音.图像识别):深度网络 指是具有深层(多层)网络结构的神经网络. 深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力. 但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响. 采用限制玻尔兹曼机RBM对深度网络做逐层无监督训练,将各单层训练得到的参数作为深度网络各层神经元的初始参数,该参数是深度网络参数空间的一个较好位置

图像处理与matlab实例之图像平滑(一)

一.何为图像噪声?噪声是妨碍人的感觉器官所接受信源信息理解的因素,是不可预测只能用概率统计方法认识的随机误差. 举个例子: 从这个图中,我们可以观察到噪声的特点:1>位置随机 2>大小不规则.我们将这种噪声称为随机噪声(random noise),这是一种非常常见的噪声类型. 二.噪声的类型 噪声可以借用随机过程以及概率密度函数(Probability Density Function,PDF)来描述,通常可采用其数组特征,即均值,方差,相关函数等.按照概率密度函数分为高斯噪声.瑞利噪声.伽马

MATLAB实例路径与安装路径

仿真时出现问题:Your current working folder is:D:\Program Files\MATLAB\R2010b\binSimulink does not permit you to build programs in theMATLAB installation area. Please change to a working folder that is not in the MATLAB installation area. 解决方法:在MATLAB文件夹下建立w

基于MATLAB的多项式数据拟合方法研究-毕业论文

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M

【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)

转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取   (Matlab 程序详解) -----暨 小波包分解后解决频率大小分布重新排列问题 本人当前对小波理解不是很深入,通过翻阅网络他人博客,进行汇总总结,重新调试Matlab代码,实现对小波与小波包.小波包分解与信号重构.小波包能量特征提取,供大家参考,后续将继续更新! 本人在分析信号的过程中发现,按照网上所述的小波包分解方法理解

C#.Net与MATLAB集成

在数学分析工具方面,MATLAB无疑是佼佼者,除了作为软件工具外,MATLAB的自定义编程语言以及混合编程的支持,使其可以与Python.R之类数学分析语言媲美.尤其是在一些传统领域的研究,由于其研究领域的专业性,研究人员一般是该专业科班出身,而计算机则是副业,因此MATLAB的应用要远比Python和R广泛. MATLAB拥有众多的算法包,.Net平台下的F#是用于数据分析的语言,但相比较而言,MATLAB的算法更多,计算效率更高,而且MATLAB的绘图能力很强:另一方面,MATLAB在传统的