MATLAB实例:多元函数拟合(线性与非线性)
MATLAB实例:多元函数拟合(线性与非线性)
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
更多请看:随笔分类 - MATLAB作图
之前写过一篇博文,是关于一元非线性曲线拟合,自定义曲线函数。
现在用最小二乘法拟合多元函数,实现线性拟合与非线性拟合,其中非线性拟合要求自定义拟合函数。
下面给出三种拟合方式,第一种是多元线性拟合(回归),第二三种是多元非线性拟合,实际中第二三种方法是一个意思,任选一种即可,推荐第二种拟合方法。
1. MATLAB程序
fit_nonlinear_data.m
function [beta, r]=fit_nonlinear_data(X, Y, choose)
% Input: X 自变量数据(N, D), Y 因变量(N, 1),choose 1-regress, 2-nlinfit 3-lsqcurvefit
if choose==1
X1=[ones(length(X(:, 1)), 1), X];
[beta, bint, r, rint, states]=regress(Y, X1)
% 多元线性回归
% y=beta(1)+beta(2)*x1+beta(3)*x2+beta(4)*x3+...
% beta—系数估计
% bint—系数估计的上下置信界
% r—残差
% rint—诊断异常值的区间
% states—模型统计信息
rcoplot(r, rint)
saveas(gcf,sprintf('线性曲线拟合_残差图.jpg'),'bmp');
elseif choose==2
beta0=ones(7, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta, r, J]=nlinfit(X, Y, @myfun, beta0)
% 非线性回归
% beta—系数估计
% r—残差
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)
% 非线性回归预测置信区间
% Ypred—预测响应
% delta—置信区间半角
plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
saveas(gcf,sprintf('非线性曲线拟合_1.jpg'),'bmp');
elseif choose==3
beta0=ones(7, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta,resnorm,r, ~, ~, ~, J]=lsqcurvefit(@myfun,beta0,X,Y)
% 在最小二乘意义上解决非线性曲线拟合(数据拟合)问题
% beta—系数估计
% resnorm—残差的平方范数 sum((fun(x,xdata)-ydata).^2)
% r—残差 r=fun(x,xdata)-ydata
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)
plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
saveas(gcf,sprintf('非线性曲线拟合_2.jpg'),'bmp');
end
end function yy=myfun(beta,x) %自定义拟合函数
yy=beta(1)+beta(2)*x(:, 1)+beta(3)*x(:, 2)+beta(4)*x(:, 3)+beta(5)*(x(:, 1).^2)+beta(6)*(x(:, 2).^2)+beta(7)*(x(:, 3).^2);
end
demo.m
clear
clc
X=[1 13 1.5; 1.4 19 3; 1.8 25 1; 2.2 10 2.5;2.6 16 0.5; 3 22 2; 3.4 28 3.5; 3.5 30 3.7];
Y=[0.330; 0.336; 0.294; 0.476; 0.209; 0.451; 0.482; 0.5];
choose=1;
fit_nonlinear_data(X, Y, choose)
2. 结果
(1)多元线性拟合(regress)
choose=1:
>> demo beta = 0.200908829282537
0.044949392540298
-0.003878606875016
0.070813489681112 bint = -0.026479907290565 0.428297565855639
-0.057656451966002 0.147555237046598
-0.017251051845827 0.009493838095795
0.000201918738160 0.141425060624065 r = 0.028343433030705
-0.066584917256987
0.038333946339215
0.037954851676187
-0.082126284727611
0.058945364984698
-0.010982985302994
-0.003883408743214 rint = -0.151352966773048 0.208039832834458
-0.188622801533810 0.055452967019837
-0.090283529625345 0.166951422303776
-0.090266067743345 0.166175771095720
-0.108068661106325 -0.056183908348897
-0.130409602930181 0.248300332899576
-0.206254481234707 0.184288510628719
-0.184329400080620 0.176562582594191 states = 0.768591079367914 4.428472778943478 0.092289917768436 0.004625488283939
(2)多元非线性拟合(nlinfit)
choose=2:
>> demo beta = 0.312525876099987
0.015300533415459
-0.036942272680920
0.299760796634952
0.009412595106141
0.000976411370591
-0.062931846673372 r = 1.0e-03 * -0.047521336834000
0.127597019984715
-0.092883949615763
-0.040370056416994
0.031209476614974
0.211856736183458
-0.727835090583939
0.537947200592082 J = 1.0e+02 * 0.010000000000266 0.010000000001236 0.129999999998477 0.014999999999641 0.010000000007909 1.689999999969476 0.022499999999756
0.010000000000266 0.014000000006524 0.189999999999301 0.029999999999283 0.019600000006932 3.609999999769248 0.089999999999024
0.010000000000266 0.018000000011811 0.249999999990199 0.009999999999965 0.032399999999135 6.250000000033778 0.010000000000377
0.009999999999679 0.022000000005116 0.099999999998065 0.025000000000218 0.048400000003999 1.000000000103046 0.062500000001264
0.009999999999972 0.025999999998421 0.159999999998889 0.004999999999982 0.067599999997174 2.559999999999039 0.002499999999730
0.009999999999679 0.029999999991726 0.219999999999713 0.019999999999930 0.089999999993269 4.839999999890361 0.040000000000052
0.009999999999092 0.033999999985031 0.279999999990611 0.034999999998348 0.115599999997155 7.839999999636182 0.122500000000614
0.010000000000266 0.034999999992344 0.299999999994194 0.037000000000420 0.122499999994626 8.999999999988553 0.136899999999292 Ypred = 0.330047521336834
0.335872402980015
0.294092883949616
0.476040370056417
0.208968790523385
0.450788143263817
0.482727835090584
0.499462052799408 delta = 0.011997285626178
0.011902559677366
0.011954353934643
0.012001513980794
0.012005923574387
0.011706970437467
0.007666390995581
0.009878186927507
(3)多元非线性拟合(lsqcurvefit)
choose=3:
>> demo beta = 0.312525876070457
0.015300533464733
-0.036942272680581
0.299760796608728
0.009412595094407
0.000976411370579
-0.062931846666179 resnorm = 8.937848643213721e-07 r = 1.0e-03 * 0.047521324135769
-0.127597015215197
0.092883952947764
0.040370060121864
-0.031209466218374
-0.211856745335304
0.727835089662676
-0.537947200236699 J = 1.0e+02 * (1,1) 0.010000000000000
(2,1) 0.010000000000000
(3,1) 0.010000000000000
(4,1) 0.010000000000000
(5,1) 0.010000000000000
(6,1) 0.010000000000000
(7,1) 0.010000000000000
(8,1) 0.010000000000000
(1,2) 0.010000000000000
(2,2) 0.014000000059605
(3,2) 0.017999999970198
(4,2) 0.022000000029802
(5,2) 0.026000000014901
(6,2) 0.030000000000000
(7,2) 0.034000000059605
(8,2) 0.035000000000000
(1,3) 0.130000000000000
(2,3) 0.190000000000000
(3,3) 0.250000000000000
(4,3) 0.100000000000000
(5,3) 0.160000000000000
(6,3) 0.220000000000000
(7,3) 0.280000000000000
(8,3) 0.300000000000000
(1,4) 0.015000000000000
(2,4) 0.030000000000000
(3,4) 0.010000000000000
(4,4) 0.025000000000000
(5,4) 0.005000000000000
(6,4) 0.020000000000000
(7,4) 0.035000000000000
(8,4) 0.036999999880791
(1,5) 0.010000000000000
(2,5) 0.019599999934435
(3,5) 0.032399999983609
(4,5) 0.048400000035763
(5,5) 0.067599999997765
(6,5) 0.090000000000000
(7,5) 0.115600000023842
(8,5) 0.122500000000000
(1,6) 1.690000000000000
(2,6) 3.610000000000000
(3,6) 6.250000000000000
(4,6) 1.000000000000000
(5,6) 2.560000000000000
(6,6) 4.840000000000000
(7,6) 7.840000000000000
(8,6) 9.000000000000000
(1,7) 0.022500000000000
(2,7) 0.090000000000000
(3,7) 0.010000000000000
(4,7) 0.062500000000000
(5,7) 0.002500000000000
(6,7) 0.040000000000000
(7,7) 0.122500000000000
(8,7) 0.136899999976158 Ypred = 0.330047521324136
0.335872402984785
0.294092883952948
0.476040370060122
0.208968790533782
0.450788143254665
0.482727835089663
0.499462052799763 delta = 0.011997285618724
0.011902559623756
0.011954353977139
0.012001513949620
0.012005923574975
0.011706970418735
0.007666391016173
0.009878186931566
注意:多元非线性函数拟合中参数的初始值需要提前设置,有些情况下,参数的初始选取对函数拟合结果影响极大,需要谨慎处理。第二三种方法中,由于数据是多维的,因此只展示了第一个维度的拟合函数图。如有需要,可自行修改。
MATLAB实例:多元函数拟合(线性与非线性)的更多相关文章
- MATLAB实例:非线性曲线拟合
MATLAB实例:非线性曲线拟合 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用最小二乘法拟合非线性曲线,给出两种方法:(1)指定非线性函数,(2) ...
- matlab最小二乘法数据拟合函数详解
定义: 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小. ...
- MATLAB实例:聚类初始化方法与数据归一化方法
MATLAB实例:聚类初始化方法与数据归一化方法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 聚类初始化方法:init_methods.m f ...
- MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中
MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...
- MATLAB实例:求相关系数、绘制热图并找到强相关对
MATLAB实例:求相关系数.绘制热图并找到强相关对 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB编程,求给定数据不同维度之间的相关系 ...
- MATLAB实例:散点密度图
MATLAB实例:散点密度图 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ MATLAB绘制用颜色表示数据密度的散点图 数据来源:MATLAB中“fit ...
- MATLAB实例:绘制条形图
MATLAB实例:绘制条形图 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB绘制条形图,自定义条形图的颜色.图例位置.横坐标名称.显示条 ...
- MATLAB实例:绘制折线图
MATLAB实例:绘制折线图 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 条形图的绘制见:MATLAB实例:绘制条形图 用MATLAB将几组不同的数 ...
- MATLAB实例:将批量的图片保存为.mat文件
MATLAB实例:将批量的图片保存为.mat文件 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.彩色图片 图片数据:horse.rar 1. MA ...
随机推荐
- 必须返回对象时,别妄想返回其reference 【Effective C++ 条款21】
class Rational { public: Rational(, ) : n(numerator), d(denominator) { printf("Rational Constru ...
- 《机器学习_07_03_svm_核函数与非线性支持向量机》
一.简介 前两节分别实现了硬间隔支持向量机与软间隔支持向量机,它们本质上都是线性分类器,只是软间隔对"异常点"更加宽容,它们对形如如下的螺旋数据都没法进行良好分类,因为没法找到一个 ...
- Jquery获取select option动态添加自定义属性值失效
Jquery获取select option动态添加自定义属性值失效 2014/12/31 11:49:19 中国学网转载 编辑:李强 http://www.xue163.com/588880/3909 ...
- python的性能测试(timeit)
import timeit def test(): lista = [] listb = [] for i in range(100): lista.append(i) for i in range( ...
- 【HTTP】Web及网络基础&HTTP基础
HTTP协议访问Web 一.大体访问过程 1. 浏览器地址栏输入URL 2. 浏览器从服务端获取文件资源 3. 浏览器显示Web页面 二.HTTP的版本历史 1. HTTP/0.9 没有作为正式的标准 ...
- Asp.net Identity身份与权限体系设计
1 Identity 介绍 2 授权系统 图1 体系结构 3 自定义 Attribute 自定义 Attribute 继承于 AuthorizeAttribute,AuthorizeAttribute ...
- 一、Redis 总结
官网 Redis 介绍 Redis 是一个开源的.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API. Redis 是一个 key-value 存储系统.为了 ...
- zabbix通过IPMI监控服务器传感器参数
一.需求:机房dell服务器和IBM服务器皆有主板管理接口iDRAC和iMM,上周已为服务器管理接口配置了ip地址,考虑通过zabbix实现对服务器传感器参数的实时监控.使用DELL-DL1300服务 ...
- 【朝夕技术专刊】RabbitMQ路由解析(上篇)
欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 上篇文章介绍了如 ...
- Java实现 LeetCode 777 在LR字符串中交换相邻字符(分析题)
777. 在LR字符串中交换相邻字符 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"L ...