0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MATLAB基础教程(xlsread和xlswrit函数+数据拟合+数值计算)

嵌入式职场 来源:数学建模CUMCM 2023-06-16 16:07 次阅读

1、xlsreadxlswrit函数

MATLAB中经常会用到数据的读取,首先是从Excel中读取数据到MATLAB中去。下面给出原始Excel数据内容:

c9345414-0c1b-11ee-962d-dac502259ad0.png

在MATLAB读取结果如下:

m=xlsread('fanjufei.xls',1,'A1:C3')


m =


     1     2     3
     4     5     6
     7     8     9

其中xlsread可以直接从Excel中读取文件,'fanjufei.xls'表示读取文件的名称,1表示位于sheet1;'A1:C3'表示读取数据的范围。

xlswrite函数:

可以从MATLAB中写入数据到Excel中去,下面给出要写入数据:

clear
clc
n=[1 2 3 4;5 6 7 8;9 10 11 12];
xlswrite('fanjufei.xls',n,3,'B2:E4')

c953a2b0-0c1b-11ee-962d-dac502259ad0.png

2、数据拟合

2.1 多项式拟合

例如:有两组数据为x=[1 2 3 4 5 6 7 8 9];y=[9 7 6 3 -1 2 5 7 20];写出x与y的表达式;

clear
clc
x=[1 2 3 4 5 6 7 8 9];
y=[9 7 6 3 -1 2 5 7 20];
P=polyfit(x,y,3);
xi=010;
yi=polyval(P,xi);
plot(xi,yi,x,y,'r*');

注释:polyfit(x,y,N),x、y为原始数据,N为拟合最高次幂,

c9644610-0c1b-11ee-962d-dac502259ad0.png

polyval(P,xi),P为各项的系数,结果展示为:

P 0.148-1.403 1.85368.2698

故多项式的结果为:

c97da5f6-0c1b-11ee-962d-dac502259ad0.png

2.2工具箱拟合

打开工具→基本拟合,选定拟合的方式。

x=[1 2 3 4 5 6 7 8 9];
y=[9 7 6 3 -1 2 5 7 20];
plot(x,y,'r*');

得出结果如下:

c9903efa-0c1b-11ee-962d-dac502259ad0.png

2.3自定义拟合函数

例如:要拟合数据:

c9aa7dd8-0c1b-11ee-962d-dac502259ad0.png

clear
clc
syms t
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun=fit(x,y,f)
xi=020;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-');

结果:

cfun = 


     General model:
     cfun(t) = a*cos(k*t)*exp(w*t)
     Coefficients (with 95% confidence bounds):
       a =      0.9987  (0.9836, 1.014)
       k =      -1.001  (-1.006, -0.9958)
       w =     -0.2066  (-0.2131, -0.2002)

c9b889e6-0c1b-11ee-962d-dac502259ad0.png

注释:fittype是自定义拟合函数,cfun=fit(x,y,f)拟合数据x、y,x、y必须为列向量。

故结果为:

c9dc3c88-0c1b-11ee-962d-dac502259ad0.png

3、数值计算

3.1多项式

(1)多项式表示方法

c9f3215a-0c1b-11ee-962d-dac502259ad0.png

(2)多项式的运算

多项式乘除运算

计算代码:

clear 
clc


%多项式相乘conv
u=[2 4 5 6];%多项式
v=[10 20 30];%多项式
p=[1 2 3];%多项式
w=conv(u,v)  %conv为多项式相乘函数,也可以嵌套使用;
m=conv(conv(u,p),v)  


%多项式相除deconv
[q,r]=deconv(w,v)%q为商,r为余数;

结果:

w =


    20    80   190   280   270   180


m =


 20         120         410         900        1400        1560        1170         540


q =


     2     4     5     6


r =


     0     0     0     0     0     0

多项式的导函数

k=polyder(p),返回多项式p的导函数;
k=polyder(a,b),返回多项式a乘以b的导函数;

[q,d]=polyder(b,a),返回多项式b整除a的导函数,其分子返回给q,分母为d;

clear
clc
x=[1 2 3 4];
y=[1 2 3 4];
z=polyder(x,y)
z =


     6    20    40    60    50    24

多项式求值

y=polyval(p,x),代数多项式求值,若x为一数值,则求在该点的值;若为向量、矩阵,则求向量、矩阵中的每一个值;
y=polyvalm(p,x),矩阵多项式求值,要求x为方阵;

p=[1,2,3];
x=1:5;
y=polyval(p,x)
y =


     6    11    18    27    38

多项式的根

函数roots:可以求出多项式等于0的根;
函数poly:可以通过多项式等于0的根,求出多项式;

p=[1 2 1];
r=roots(p) %求p的根
v=poly(r)  %求r根的多项式
r =


    -1
    -1


v =


     1     2     1

3.2曲线拟合

曲线拟合用一个比较简单的函数去逼近一个未知的函数,曲线拟合最优的标准采用最小二乘法原理,拟合的结果使得误差的平方和最小。

在MATLAB上最常采用polyfit函数来求最小二乘拟合多项式的系数,再用polyval函数求出多项式在所给出点的值;

ca0564d2-0c1b-11ee-962d-dac502259ad0.png

x=linspace(0,2*pi,50);
y=cos(x);
p=polyfit(x,y,6);
t=linspace(0,2*pi,50);
y1=polyval(p,t);
plot(x,y,t,y1,'r*')

ca16777c-0c1b-11ee-962d-dac502259ad0.png

从图像上可以看出拟合比较好,红色星号都在曲线上;

3.3 数据插值

(1)一维数据插值

插值函数:yi=interp1(x,y,xi,method)

根据在x,y处的值,计算函数在xi处的值,其中xi的值不能大于x的值;

method插值方法:linear(线性插值)、nearest(最近点插值)、cubic(3次多项式插值)、spline(3次样条插值);

例2:下面为1900—1990每隔10年的人口普查数据:

t=19001990;

p=[75 91 105 123 131 150 179 203 226 249]

求在1985年人口数值;

t=19001990;
p=[75 91 105 123 131 150 179 203 226 249];
yi=interp1(t,p,1985)

得出1985年的人口数为:

yi =


  237.5000

估计1900—2000年人口数值

t=19001990;
p=[75 91 105 123 131 150 179 203 226 249];
xi=1900:2000;
yi=interp1(t,p,xi,'spline');
plot(t,p,':o',xi,yi,'-r')

ca3aa1e2-0c1b-11ee-962d-dac502259ad0.png

(2)二维数据插值

插值函数:Z1=interp2(X,Y,Z,XI,YI,method)

X,Y为原始采样点,Z为对应的采样值,XI,YI表示欲插值的点,method为插值方法与一维插值方法一样;

例3:为函数peaks插入更多的线条;

[X,Y]=meshgrid(-44);
Z=peaks(X,Y);
[XI,YI]=meshgrid(-44);
ZI=interp2(X,Y,Z,XI,YI);
mesh(X,Y,Z)
hold on
mesh(XI,YI,ZI+20)

ca624918-0c1b-11ee-962d-dac502259ad0.png

3.4 数值微积分

(1)数值微分

在MATLAB中没有直接求数值导数的函数,只有计算向前差分的函数diff,其调用格式为:

DX=diff(X):计算向量X的向前差分,DX(i)=X(i+1)-X(i),i=1......n-1;

DX=diff(X,n):计算X的n价向前差分;

DX=diff(A,n,dim):计算矩阵A的n价差分,dim=1(默认值)

x=[3 2 1];
dx=diff(x)
dx =


    -1    -1

(2)数值积分

被积函数是解析式

MATLAB有两种函数求解定积分,调用格式为:

quad(函数,a,b,tol,trace)

quadl(函数,a,b,tol,trace)

其中,a为下限,b为上限,tol为精度,trace是否展现积分过程;

ca7cfcf4-0c1b-11ee-962d-dac502259ad0.png

f=inline('1./(x.^3-2*x-5)');
y=quad(f,0,2)
y1=quadl(f,0,2)
y =


-0.4605
y1 =


   -0.4605

被积函数为表格定义

用trapz(x,y)来进行计算,x为向量,y为x的函数;

ca8e2722-0c1b-11ee-962d-dac502259ad0.png

x=01;
y=exp(-x.^2);
trapz(x,y)
ans =


    0.7468

二重积分数值求解

MATLAB提供的函数为:

y=dblquad(f,a,b,c,d,tol,trace),

caa22254-0c1b-11ee-962d-dac502259ad0.png

function f= fan(x,y)
f=x+y;
end
y=dblquad('fan',0,2,0,2)

结果:

y =


     8

3.5 线性方程组求解

(1)直接解法

对于方程Ax=b来说,可以用x=A;即x=inv(A)*b;

cabff81a-0c1b-11ee-962d-dac502259ad0.png

A=[1 2 3;3 6 7;2 6 3];
b=[8 30 25]';
x=A
x =


   17.0000
    0.0000
   -3.0000

(2)LU求解、QR求解、Cholesky求解

例8:求例7;

A=[1 2 3;3 6 7;2 6 3];
b=[8 30 25]';
[L,U]=lu(A); %LU分解
x=U(L)


[Q,R]=qr(A); %QR分解
x_val=R(Q)


R=chol(A);   %Cholesky分解
x_val_1=R(R')

3.6 常微分方程数值求解

基于龙格—库塔法,MATLAB提供的常微分方程求解的函数为:

[t,y]=ode23('fname',tspan,y0),二价、三价龙格—库塔法;

[t,y]=ode45('fname',tspan,y0),四价、五价龙格—库塔法;

fname是定义f(t,y)的函数文件名,该函数文件必须返回一个列向量;tspan形式为[t0,tf]表示求解区间,y0是初始状态列向量;t 给出时间向量,y为状态向量;

cad71e14-0c1b-11ee-962d-dac502259ad0.png

function f = fan(t,x)
f=[-2*x(2);x(1)];
end
tf=25;
[t,y]=ode45('fan',[t0,tf],[1,0]);
subplot(121);
plot(t,y(:,2))
subplot(122);
plot(y(:,2),y(:,1))
axis equal

cae34554-0c1b-11ee-962d-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2924

    浏览量

    228463
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • Excel
    +关注

    关注

    4

    文章

    212

    浏览量

    55185
  • 函数
    +关注

    关注

    3

    文章

    3904

    浏览量

    61310

原文标题:MATLAB基础教程(xlsread和xlswrit函数+数据拟合+数值计算)

文章出处:【微信号:嵌入式职场,微信公众号:嵌入式职场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    matlab应用-曲线拟合工具箱拟合曲线模型

    拟合一堆成本曲线,函数形式y=A*x*x+B*x,且A>0,B>0。一帮人用eviews,spss都没搞定,只好要我编程,没想到matlab拟合工具箱帮了大忙,即形象,又方便。不到一天
    发表于 11-03 15:31

    matlab数值计算

    matlab数值计算!!!
    发表于 12-08 18:10

    使用matlab数据进行拟合

    大神们,跪求使用matlab进行数据拟合,请求一些免费的资源,尽量简单点!!!!!
    发表于 08-21 10:52

    MATLAB曲线拟合

    值plot(x,y,'k*',x,y1,'r-');  %画出数据对比图,黑点是原始数据,红线是拟合曲线%指定函数拟合f=fittype('
    发表于 07-18 01:19

    【下载】《工程与科学数值方法的MATLAB实现(第2版)》

    应用领域,具体包括求根与最优化、线性代数方程组的求解、曲线拟合数值积分与微分以及常微分方程数值解。书中不但介绍了各类数值方法的基本原理和基于MAT
    发表于 08-28 17:27

    MATLAB数值计算

    MATLAB数值计算
    发表于 01-26 14:07

    labview调用matlab中的高斯拟合函数cftool

    本帖最后由 像风一样飞翔! 于 2019-11-28 16:32 编辑 matlab有强大的拟合工具包cftool,能否用labview调用matlab拟合
    发表于 11-28 16:28

    Matlab中使用S函数实现离散化数值计算的问题有哪些

    关于Matlab中使用S函数实现离散化数值计算的问题求助,现在我想使用S函数写一个永磁同步电机dq轴坐标系下的离散化数学模型,使用改进欧拉法
    发表于 08-27 07:00

    matlab在科学计算中的应用

    MATLAB科学计算中的应用 在数值分析中的应用 多项式与插值、数据的曲线拟合 数值微分与
    发表于 11-30 16:35 0次下载
    <b class='flag-5'>matlab</b>在科学<b class='flag-5'>计算</b>中的应用

    Matlab数据拟合基础函数的使用

    Matlab数据拟合基础函数的使用,教你如何拟合两个未知量
    发表于 11-10 16:45 0次下载

    MATLAB 7.0 基础教程

    MATLAB 7.0 基础教程 介绍MATLAB7.0的基础教程,非常实用的教程
    发表于 12-18 11:44 6次下载

    Matlab基础教程2

    Matlab基础教程2Matlab基础教程2Matlab基础教程2
    发表于 12-24 16:33 2次下载

    matlab怎样编写函数并调用函数

    MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制
    发表于 12-04 14:33 2.6w次阅读
    <b class='flag-5'>matlab</b>怎样编写<b class='flag-5'>函数</b>并调用<b class='flag-5'>函数</b>

    MATLAB中常用的数值计算数值分析基础知识

    MATLAB是一个功能强大的数值计算和科学计算软件,它提供了许多用于数值计算
    的头像 发表于 07-07 09:27 1339次阅读

    MATLAB在追迹光线计算中的应用

    摘要 :给出了理想光具组系统矩阵的MATLAB计算程序,并借助MATLAB进行光线追迹与数值拟合,得到了像差(球差)的多项式及曲线图。
    的头像 发表于 09-12 10:19 424次阅读
    <b class='flag-5'>MATLAB</b>在追迹光线<b class='flag-5'>计算</b>中的应用