MATLAB:拟合与插值

 一、关于多项式的基本操作

若要求非线性方程的根,则采用fzero, fminbnd函数  

 

二、多项式拟合

clc, clear
x=0:0.2:10; y=0.25*x+20*sin(x);
plot(x,y,'k.','MarkerSize',15)
grid on; 
hold on
[p1,s1,mu1]=polyfit(x,y,3); %3阶多项式拟合
y1=polyval(p1,x,s1,mu1);
[p2,s2,mu2]=polyfit(x,y,5); %5阶多项式拟合
y2=polyval(p2,x,s2,mu2);
[p3,s3,mu3]=polyfit(x,y,8); %8阶多项式拟合
y3=polyval(p3,x,s3,mu3);
plot(x,y1,'c-', x,y2, 'r-', x,y3, 'b-');
xlabel('X'); 
ylabel('Y');
legend('原始数据','3阶多项式拟合', '5阶多项式拟合', '8阶多项式拟合','Location','best');
legend('boxoff')
title('不同次数拟合曲线对比图')

多项式评价和置信区间的估计:

clc,clear
x=0:0.2:10; 
y=0.25*x+20*sin(x);
[p,s,mu]=polyfit(x,y,6); %6阶多项式拟合
[Y,DELTA] = polyconf(p,x,s,0.05,mu);
fill([x,fliplr(x)],[Y-DELTA,fliplr(Y+DELTA)],[0.95,0.899,0.9230]) %RGB
hold on 
plot(x,y,'k.','MarkerSize',15)
plot(x,y,'b-')
plot(x,Y-DELTA,'m--')
plot(x,Y+DELTA,'m--')
grid on 
title('6次多项式拟合及置信区间')
xlabel('X')
ylabel('Y')

曲线拟合案例分析: 

clc,clear
[Data,Textdata] = xlsread('matlab视频数据\examp41.xls',1,'B3:C61');
x = 1:59;
plot(x,Data,'r.','MarkerSize',15)
% xtick坐标刻度
% numel数组元素的个数(或用length)
% xticklabel坐标显示的字符串
set(gca,'XTick',1:8:numel(x),'xticklabel',Textdata(1:8:end))
xlabel('时间')
ylabel('食品零售价格分类指数')
title('我国2007年1月至2011年11月食品零售价格分类指数数据')
x = x';

hold on 
[p4,s4,mu4] = polyfit(x,Data,4);
y4 = polyval(p4,x,s4,mu4);
plot(x,y4,'k:','LineWidth',1.5)

[p6,s6,mu6] = polyfit(x,Data,6);
y6 = polyval(p6,x,s6,mu6);
plot(x,y4,'m--','LineWidth',1.5)

[p9,s9,mu9] = polyfit(x,Data,9);
y9 = polyval(p9,x,s9,mu9);
plot(x,y9,'b.-','LineWidth',1.5)

[p11,s11,mu11] = polyfit(x,Data,11);
y11 = polyval(p11,x,s11,mu11);
plot(x,y11,'g-','LineWidth',1.5)

legend('原始数据','4次拟合','6次拟合','9次拟合','11次拟合'); 
legend('boxoff')

自定义函数拟合:

function y = nlinfun(beta,x)
    a = beta(1);
    b = beta(2);
    y = a + (0.49 - a).*exp(-b*(x-8));
end
clc,clear,close
data = xlsread('matlab视频数据\nlinfit_data.xlsx');
x = data(1,:)';
y = data(2,:)';

beta0 = [1,1];
beta = nlinfit(x,y,'nlinfun',beta0);
yp = nlinfun(beta,x);
plot(x,y,'r.','MarkerSize',15)
hold on 
grid on
xlabel('时间T')
ylabel('氯气积分Y')
title('化工生产中氯气积分随时间下降拟合曲线')
plot(x,yp,'b-','LineWidth',2)

三、一维数据插值 

 一维插值函数插值方法对比:

clc,clear
x = 0:10; 
y = sin(x); 
xi = 0:0.1:10; %xi表示插值点
strmod = {'nearest','linear','spline','cubic'}; % 将插值方法定义为单元数组
strlb = {'(a) method = nearest', '(b) method = linear','(c) method = spline', '(d) method = cubic'}; % 将X轴标识为单元数组
for i = 1:4
    yi = interp1(x,y,xi,strmod{i}); %一维插值
    subplot(2,2,i); %生成子图
    plot(x,y,'ro','MarkerFaceColor','r');
    hold on
    grid on
    plot(xi,yi,'b--','LineWidth',1.5)
    title(strlb(i)) %对每个字图添加标题
end

案例:环境温度数据插值

clc,clear
x = 0:2:24;
y = [12 9 9 10 18 24 28 27 25 20 18 15 13];
xi = 0:24/1440:24;

yisp = spline(x,y,xi);
% P = spline(x,y);
% yisp = interp1(x,y,xi,'spline');
subplot(2,2,1)
plot(x,y,'bo',xi,yisp,'r-')
title('spline函数插值效果图')
xlabel('24时间'); ylabel('随时间温度变化值')
grid on

subplot(2,2,2)
pcs = csape(x,y,'complete') %查看三次样条插值系数矩阵
ycs = fnval(pcs,xi); %求插值
plot(x,y,'bo',xi,ycs,'r-')
title('csape函数插值效果图')
xlabel('24时间'); ylabel('随时间温度变化值')
grid on

subplot(2,2,3)
%B样条插值, k为B样条阶次,一般选择4和5
psp = spapi(4,x,y);
yspa = fnval(psp,xi);
plot(x,y,'bo',xi,yspa,'r-')
grid on
xlabel('24时间'); ylabel('随时间温度变化值')
title('spapi函数插值效果图')

subplot(2,2,4)
%三次光滑样条插值, p表示光滑程度,取值[0,1]
ycsa = csaps(x,y,0.9,xi);
plot(x,y,'bo',xi,ycsa,'r-')
title('csaps函数插值效果图')
xlabel('24时间'); ylabel('随时间温度变化值')
grid on

案例:轮船甲板面积

clc,clear
x = linspace(0,8.534,13);
y = [0 0.914 5.060 7.772 8.717 9.083 9.144 9.083 8.992 8.687 7.376 2.073 0];
x0 = 0:0.001:8.534; %插值点
y1 = interp1(x,y,x0,'linear'); %线性插值
y2 = interp1(x,y,x0,'spline'); %三次样条插值
plot(x,y,'b.','Markersize',15); 
hold on
plot(x0,y1,'r--',x0,y2,'g-');
S1 = trapz(y1)*0.001 %线性插值数值积分,计算梯形面积
S2 = trapz(y2)*0.001 %三次样条插值数值积分

外插估值:

% cos(10.5)外插值计算, x的区间[0.10];利用函数interp1计算10.5的函数值。
clc,clear
x = 0:0.5:10;
y = cos(x);
x1 = 10.5;
y1 = cos(x1);
y2 = interp1(x,y,x1,'nearest','extrap');
y3 = interp1(x,y,x1,'linear','extrap');
y4 = interp1(x,y,x1,'spline','extrap');
plot(x,y,x1,y1,'o',x1,y2,'>r',x1,y3,'b<',x1,y4,'r*');
legend('solution','cos(10.5)','nearest','linear','spline');
grid on
title('各种外插方法对比图')
legend('boxoff')

四、高维数据插值 

案例:山区地貌图

% 已知某处山区地形选点测量坐标数据为:x、y和z。
clc,clear
x = 0:0.5:5; y = 0:0.5:6;
z = [89 90 87 85 92 91 96 93 90 87 82;
    92 96 98 99 95 91 89 86 84 82 84;
    96 98 95 92 90 88 85 84 83 81 85;
    80 81 82 89 95 96 93 92 89 86 86;
    82 85 87 98 99 96 97 88 85 82 83;
    82 85 89 94 95 93 92 91 86 84 88;
    88 92 93 94 95 89 87 86 83 81 92;
    92 96 97 98 96 93 95 84 82 81 84;
    85 85 81 82 80 80 81 85 90 93 95;
    84 86 81 98 99 98 97 96 95 84 87;
    80 81 85 82 83 84 87 90 95 86 88;
    80 82 81 84 85 86 83 82 81 80 82;
    87 88 89 98 99 97 96 98 94 92 87];
mesh(x,y,z) %绘制三维网格面

xi = linspace(0,5,50);%加密横坐标数据到50个
yi = linspace(0,6,60);%加密纵坐标数据到60个
[xi1,yi1] = meshgrid(xi,yi);%生成网格数据
[xi2,yi2] = ndgrid(xi,yi);

% ------- 调用interp2函数作三次样条插值-----------
subplot(2,3,1);
zi1 = interp2(x,y,z,xi1,yi1,'spline');
mesh(xi1,yi1,zi1); 
hold on
[xx,yy] = meshgrid(x,y); %生成网格数据
plot3(xx,yy,z+0.1,'bo') %原始数据用O绘制
title('interp2函数绘图')

% ------- 调用csape函数作三次样条插值----------
subplot(2,3,2);
cp1 = csape({x,y},z');
mesh(xi2,yi2,fnval(cp1,{xi,yi})); 
hold on
[xx,yy] = meshgrid(x,y); %生成网格数据
plot3(xx,yy,z+0.1,'bo') %原始数据用O绘制
title('csape函数绘图')

% ------调用csapi函数作三次样条插值---------
subplot(2,3,3)
zi2 = csapi({x,y},z',{xi,yi});
mesh(xi2,yi2,zi2);
hold on
[xx,yy] = meshgrid(x,y); %生成网格数据
plot3(xx,yy,z+0.1,'bo') %原始数据用O绘制
title('csapi函数绘图')

% ------调用spapi函数作三次B样条插值--------
subplot(2,3,4)
sp1 = spapi({4,4},{x,y},z');
mesh(xi2,yi2,fnval(sp1,{xi,yi}))
hold on
[xx,yy] = meshgrid(x,y); %生成网格数据
plot3(xx,yy,z+0.1,'bo') %原始数据用O绘制
title('spapi函数绘图')

subplot(2,3,5)
zi3 = csaps({x,y},z',{0.2,0.9},{xi,yi});
mesh(xi2,yi2,zi3);
hold on
[xx,yy] = meshgrid(x,y); %生成网格数据
plot3(xx,yy,z+0.1,'bo') %原始数据用O绘制
title('csaps函数绘图')

% ---------调用spaps函数作三次B样条插值-------------
subplot(2,3,6)
sp2 = spaps({x,y},z',{1e-3,0.01});
mesh(xi2,yi2,fnval(sp2,{xi,yi}))
hold on
[xx,yy] = meshgrid(x,y); %生成网格数据
plot3(xx,yy,z+0.1,'bo') %原始数据用O绘制
title('spaps函数绘图')

散乱点插值:

案例:水道海底地貌图

clc,clear
x = [129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];
y = [7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z = -[4 8 6 8 6 8 8 9 9 8 8 9 4 9];
[cx,cy] = meshgrid(75:5:200,-90:5:150);
cz = griddata(x,y,z,cx,cy,'cubic');
figure(1)
mesh(cx,cy,cz); %绘制三维网格图
title('某水道的海底地貌图')
view(-60,30);
figure(2)
[c,h] = contourf(cx,cy,cz,[-5,-5],'k'); %绘制等高线
set(h,'ShowText','on')
grid on
title('船只禁入区域图')

案例:城区土壤地质环境调查

clc,clear
data = xlsread('matlab视频数据\cumcm2011A.xls',1,'B4:D322');
x = data(:,1);
y = data(:,2);
z = data(:,3);
cd = xlsread('matlab视频数据\cumcm2011A.xls',2,'C4:C322');
xd = linspace(min(x),max(x),60);
yd = linspace(min(y),max(y),60);
[xi,yi] = meshgrid(xd,yd);

% ------调用griddata函数作散乱节点插值-------
zi = griddata(x,y,z,xi,yi);
cdi = griddata(x,y,cd,xi,yi);
surf(xi,yi,zi,cdi)  % 前三维度绘制空间曲面,第四维度用颜色表示
shading interp
xlabel('X'); 
ylabel('Y'); 
zlabel('Z(griddata)');
colorbar

% ------------调用TriScatteredInterp函数作散乱节点插值------------
F = TriScatteredInterp(x,y,z);
zi2 = F(xi,yi);
Fcd = TriScatteredInterp(x,y,cd);
cdi2 = Fcd(xi,yi);
figure;
surf(xi,yi,zi2,cdi2);
shading interp;
xlabel('X');
ylabel('Y');
zlabel('Z(TriScatteredInterp)');
colorbar

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/462560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mmz批量多页抓取数据-AES.CBC算法-爬虫

目标&#xff1a;mmz多页下载 方法&#xff1a;加一个for循环实现多页的下载 问题&#xff1a;浏览器传输服务器时对页码参数做了加密处理 解决方法&#xff1a; 1、判断加密算法模式&#xff08;mmz是AES-CBC算法&#xff09; 2、找到加密的key和iv 代码&#xff1a; i…

微信小程序开发学习笔记——3.11完成form评论案例的实现逻辑

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p25&vd_source9b149469177ab5fdc47515e14cf3cf74 一、javascript参考手册——splice https://www.…

9.用FFmpeg测试H.264文件的解码时间

1. Essence of Method 要测试对H.264文件的解码时间&#xff0c;可以使用FFmpeg进行操作。FFmpeg是一个开源的多媒体处理工具&#xff0c;可以用来处理视频和音频文件&#xff0c;包括解码H.264文件。以下是使用FFmpeg的命令行来测试解码时间的方法&#xff1a; ffmpeg -i in…

01_什么是深度学习

人工智能包含了机器学习&#xff0c;而深度学习是机器学习的一个分支。 人工智能 试图将通常由人类完成的智力任务自动化—这就是人工智能。 用硬编码的方式实现人工智能&#xff0c;这称作符号主义人工智能Symbolic AI。其中包含专家系统。 机器学习 机器学习是一种替代符…

一个接口白嫖四个AI平台, 五个翻译平台

牙叔教程 简单易懂 家人们, 我这标题起的咋样, 请在评论区打出你对标题的评价 今天我们介绍的仓库是 OneYiGitHub - snailuncle/oneyi: 一个翻译接口, 对接多个平台, one译. 完全免费开源, 没有任何限制, 这是一个翻译接口, 他支持以下平台 五个翻译平台 小牛翻译 小牛翻译开…

sparksession对象简介

什么是sparksession对象 spark2.0之后&#xff0c;sparksession对象是spark编码的统一入口对象&#xff0c;通常我们在rdd编程时&#xff0c;需要SparkContext对象作为RDD编程入口&#xff0c;但sparksession对象既可以作为RDD编程对象入口&#xff0c;在sparkcore编程中可以通…

ARP和DDOS攻击防御介绍

学习目标&#xff1a; 1. 如何利用ARP漏洞进行攻击&#xff1f; 2. 怎样有效地防御ARP攻击&#xff1f; 3. 如何应对DDOS攻击&#xff1f; ARP攻击如何产生&#xff1f; ARP如何进行有效防御&#xff1f; ARP基础工作原理&#xff1a; 交换机会根据mac地址表&#xff0c;进行转…

书客护眼落地灯销量火爆,售罄、补货、又断货、再补货!又成断货王!

今日&#xff0c;备受关注的书客Sun护眼大路灯在市场上掀起了一股抢购热潮&#xff0c;作为近年来照明领域中最大的黑马品牌&#xff0c;始终坚持并最求技术创新的书客品牌&#xff0c;在近日发布全新系列落地护眼台灯后&#xff0c;不仅备受消费者青睐&#xff0c;更是成为了新…

C#,T检验(T -Test)的算法与源代码

1 T-Test 学生t检验(英语:Students t-test)是指虚无假设成立时的任一检定统计有学生t-分布的统计假说检定,属于母数统计。学生t检验常作为检验一群来自正态分配母体的独立样本之期望值的是否为某一实数,或是二群来自正态分配母体的独立样本之期望值的差是否为某一实数。举…

ABC345(A-C)

A - Leftrightarrow(100 points) 语法题&#xff0c;输入一个字符串&#xff0c;判断是否是&#xff1a;的样式&#xff0c;输入后只需判断是第一个和最后一个字符是否分别为">"和"<",再判断中间是否都是""即可。 #include<bits/stdc…

【C语言步行梯】C语言实现三子棋游戏(含详细分析)

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 需求分析具体实现主函数体菜单实现游戏实…

sqllab第二十关通关笔记

知识点&#xff1a; cookie注入 可以进行url解析错误注入传参位置 get请求post请求cookie传参 输入admin admin进行登录&#xff0c;抓取当前数据包 通过放包发现是一个302跳转的响应包&#xff0c;页面只有一个 I Love Cookies&#xff1b;没什么信息 通过点击页面上方的按钮…

【Java】List, Set, Queue, Map 区别?

目录 List, Set, Queue, Map 区别&#xff1f; Collection和Collections List ArrayList 和 Array区别&#xff1f; ArrayList与LinkedList区别? ArrayList 能添加null吗&#xff1f; ArrayList 插入和删除时间复杂度&#xff1f; LinkedList 插入和删除时间复杂度&…

Vue2(4)——iHRM组织架构

组织架构-树组件应用 树形组件-用层级结构展示信息&#xff0c;可展开或折叠。 属性设置 data(绑定数据)props(设置属性)- children(设置子节点的字段名)/ label(设置显示内容的字段名)default-expand-all(默认展开所有节点) 组织架构-树组件自定义结构 显示右侧结构 节点结…

Vue2(三):绑定样式、条件渲染(v-if,v-show)、列表渲染(v-for)、key的原理、列表过滤、列表排序

一、绑定样式 1.绑定class样式 (1)字符串写法 适用于&#xff1a;样式类名不确定&#xff0c;需要动态获取。 <div id"root"><div class"basic" :class"mood" click"changeMood">test</div><!-- class是原本的…

【Python】进阶学习:基于Numpy实现按指定维度拼接两个数组

【Python】进阶学习&#xff1a;基于Numpy实现按指定维度拼接两个数组 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

2000-2021年各省外商直接投资水平面板数据(含原始数据+计算结果)(无缺失)

2000-2021年各省外商直接投资水平面板数据&#xff08;含原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;外商直接投资额&#xff08;万美元&#xff09;、外商直接投资额&#xff08;万元&#xff09;、国…

MySQL语法分类 DQL(4)聚合函数

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

2024年【危险化学品经营单位主要负责人】找解析及危险化学品经营单位主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人找解析考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位主要负责人模拟考试题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位主要负责人…