八一讲解Matlab的完整教程

微信公众号:数学的情怀
点击上方,选择星标或置顶,每天给你送干货!
该排版使用了md2All,是markdown排版神器,可同时在微信公众号、博客园、掘金、csdn等平台正确显示当前预览的效果

写在前面

还有半个来月美赛,八一便写篇maltab全教程,本文适用于完全没有任何matlab基础的学生看,但同时也可以给那些曾对matlab熟悉的同学进行回忆。。。一般常用的数学软件有Maple,Mathematica,Matlab等;常用的大型统计软件有SAS,SPSS,hadoop等。下面我主要介绍一些Matlab的教程。

Matlab有五大通用功能:数值计算(Numeric),符号运算(Symbolic),数据可视化(Graphic),数据图形文字统一处理(Notebook)和建模仿真可视化(Simulink)。它在线性代数,矩阵分析,数值计算及优化问题,还包括数理统计和随机信号分析,电路与系统,建模和仿真等众多领域的理论研究和工程设计中得到了广泛应用。它是1984年由美国Mathworks 公司推向市场。该软件有三大特点:一是功能强大;二是界面友善,语言自然;三是开放性强。Matlab的版本目前是Matlab2018。

matlab简介介绍

首先我们要认识下什么m文件,有三点:(1)如果我们想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件;(2)包含matlab语言代码的文件称为m文件,其扩展名为m;(3)编辑m文件可使用各种文本编辑器。然后将matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。一般m文件的语法类似于c语言,但又有其自身特点。它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序,matlab是解释性的编程语言。

m文件有两类

  • 独立的m文件 — 称命令文件:实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。

命令文件包括两部分:注释文件和程序文件

%RANK    Number of linearly independent rows or columns.
%    K = RANK(X) is the number of singular values of X
%    that are larger than MAX(SIZE(X)) * NORM(X) * EPS.
%    K = RANK(X,tol) is the number of singular values of X that
%    are larger than tol.
%    Copyright (c) 1984-94 by The MathWorks, Inc.
  • 调用m文件 — 称函数文件:matlab自定义的函数文件称内置函数文件调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数——用type sin查不到。调用格式:y=sin(2*x) 实际应用中:
x=0:2*pi/180:2*pi;
     y=sin(2*x)
     plot(x,y)

matlab的程序结构与运算符

matlab语言的程序结构与其它高级语言是一致的,分为顺序结构,循环结构,分支结构。

  • 顺序结构—— 依次顺序执行程序的各条语句;
  • 循环结构 —— 被重复执行的一组语句,循环是计算机解决问题的主要手段。 循环语句主要有:(1)for -end(中间为可执行语句);(2)while -end;(3)分支结构(if — else — end语句有3种形式,用elseif可替代一般高级语言中的switch-case-end语句)

在条件表达式中,通常都是由

  • 关系操作符 >, < ,<=, >=, = =, ~= 等
  • 逻辑操作符 &,| , ~等
  • 逻辑函数:isequal —— 若是相等则为真;isempty ——若是空矩阵则为真;isstr —— 若是字符串则为真。

Matlab 运算符分五类:数学、关系,逻辑、位、集合
数学运算符:是进行各种数学运算,按其优先级别依次为

  • 转置.’、共轭转置’、幂次.、矩阵幂次^
  • 正、负号+、-
  • 乘法.、矩阵乘法、元素左右除.\、./、矩阵左右除\、/
  • 加减法+、-
  • 冒号:在同一优先级中,运算自左至右完成,对运算顺序不确定时,最好以 “()” 实现强制运算顺序.

对于矩阵,右除A/B,相当于XB=A 的解矩阵,左除A\B,相当于AX=B 的解矩阵

关系运算符:有六种关系运算符==,~=,>,>=,<,<=

关系运算符总是以矩阵内元素对元素做运算,若满足关系,则返回 1,不满足则返回 0

逻辑运算符:有三种:&(与),|(或),~(非)

相关命令还有:all(),any()。当所有向量元素为 “真”,all 返回 1,而当任意元素为 “真”,any 即返回 1

位运算符:对非负整数的逻辑运算,主要函数如下

  • bitand():位对位 AND
  • bitor():位对位 OR
  • bitxor():位对位异或
  • bitset():设定某位
  • bitget():取得某位
  • bitcmp():位对位取反
  • bitshift():位移(左移)

集合运算符:仅限于向量运算,此时 matlab 将向量视为集合来进行各种集合运算,常用命令如下

  • Union():并集
  • intersect():交集
  • setdiff():差集
  • setxor():异或
  • unique():最小等效集合
  • ismember():元素是否属于集合

matlab自定义函数

首先我们来在命令窗口敲写一段代码,创建好脚本之后,按快捷键F5运行,可以得到

for i = 1 : 10
    x = linspace(0,10,101);
    plot(x,sin(x + i));
    print(gcf,'-deps',strcat('plot',num2str(i),'.ps'));
end

在这里插入图片描述在熟练matlab过程我们需要掌握的几个常用的快捷键:

  • %:单行注释
  • ctrl + r:多行注释
  • ctrl + t:取消多行注释
  • ctrl + i:智能缩进
  • %%:指定节
  • ctrl + enter:执行节
  • f5:运行程序

然后举个LMS算法例子来创建第一个Matlab function,来看
在这里插入图片描述

matlab绘图

强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。

绘图语法

plot(X,Y) %创建 Y 中数据对 X 中对应值的二维线图。
plot(X,Y,LineSpec) %设置线型、标记符号和颜色。
plot(X1,Y1,,Xn,Yn) %绘制多个 X、Y 对组的图,所有线条都使用相同的坐标区。
plot(X1,Y1,LineSpec1,,Xn,Yn,LineSpecn) %设置每个线条的线型、标记符号和颜色。
plot(Y) %创建 Y 中数据对每个值索引的二维线图。
plot(Y,LineSpec) %设置线型、标记符号和颜色。
plot(_,Name,Value) %使用一个或多个 Name,Value 对组参数指定线条属性。
plot(ax,_) %将在由ax指定的坐标区中,而不是在当前坐标区 (gca) 中创建线条。
h = plot(_) %回由图形线条对象组成的列向量。
  • 1.创建线图
x = 0:pi/100:2*pi; 
y = sin(x); 
plot(x,y)

在这里插入图片描述

  • 2.绘制多个线条
x = linspace(-2*pi,2*pi); 
y1 = sin(x); 
y2 = cos(x);
figure 
plot(x,y1,x,y2)
  • 3.指定线型
x = 0:pi/100:2*pi; 
y1 = sin(x); 
y2 = sin(x-0.25); 
y3 = sin(x-0.5);

figure 
plot(x,y1,x,y2,'–',x,y3,':')
  • 4.指定线型、颜色和标记
x = 0:pi/10:2*pi; 
y1 = sin(x); 
y2 = sin(x-0.25); 
y3 = sin(x-0.5);

figure 
plot(x,y1,'g',x,y2,'b–o',x,y3,'c*')
  • 5.指定线宽、标记大小和标记颜色
x = -pi:pi/10:pi; 
y = tan(sin(x)) - sin(tan(x));

figure 
plot(x,y,'–gs',… 
‘LineWidth’,2,… 
‘MarkerSize’,10,… 
‘MarkerEdgeColor’,’b’,… 
‘MarkerFaceColor’,[0.5,0.5,0.5])
  • 6.添加标题和轴标签
x = linspace(0,10,150); 
y = cos(5*x); 
figure 
plot(x,y,'Color',[0,0.7,0.9])

title(2-D Line Plot’) 
xlabel('x') 
ylabel('cos(5x)')
  • 7.创建并修改线条
x = linspace(-2*pi,2*pi); 
y1 = sin(x); 
y2 = cos(x); 
p = plot(x,y1,x,y2);

。。。。省略若干

matlab在数学建模的应用

一.人口预测模型
例1:下表1-4是某地区1971一2000年的人口数据,试给出该地区人口增长的数学模型。根据表中的数据做出其散点图,从可以看出,人口随时间的变化呈非线性过程,而且存在一个与横坐标轴平行的渐近线,故可以用Logistic曲线模型进行拟合。
在这里插入图片描述

建立个population.m文件,由于logistic曲线模型形式为y=1/(a+be^-t),所以这里我们只要假设y*=1/y,x*=e^-t,就可以将其转化直线模型y*=a+bx*,即可编写拟合程序如下。

clear
clc
% 读入人口数据(19712000年)
Y=[33815    33981   34004   34165   34212   34327   34344   34458   34498   34476   34483   34488   34513   34497   34511   34520   34507   34509   34521   34513   34515   34517   34519   34519   34521   34521   34523   34525   34525   34527]
% 读入时间变量数据(t=年份-1970)
T=[1    2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30]
% 线性化处理
for t = 1:30, 
   x(t)=exp(-t);
   y(t)=1/Y(t);
end
% 计算,并输出回归系数B
c=zeros(30,1)+1;
X=[c,x'];
B=inv(X'*X)*X'*y'
for i=1:30,
% 计算回归拟合值    
    z(i)=B(1,1)+B(2,1)*x(i);
% 计算离差
    s(i)=y(i)-sum(y)/30;
% 计算误差    
    w(i)=z(i)-y(i);
end
% 计算离差平方和S
S=s*s';
% 回归误差平方和Q
Q=w*w';
% 计算回归平方和U
U=S-Q;
% 计算,并输出F检验值
F=28*U/Q
% 计算非线性回归模型的拟合值
for j=1:30,
    Y(j)=1/(B(1,1)+B(2,1)*exp(-j));
end
% 输出非线性回归模型的拟合曲线(Logisic曲线)
plot(T,Y)

在这里插入图片描述
二.灰色预测模型
例2:下面以某公司收入预测问题为例介绍灰色预测的MATLAB实现过程。
已知某公司1999-2008年的利润为(单位:元/年):[89677,99215,109655,120333,135823,
159878,182321,209407,246619,300670]
现在要预测该公司未来几年的利润情况。
分析:首先说明下,在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即称为生成列。灰色系统常用的数据处理方式有累加和累减两种。其实灰色预测的思路非常简单,就是通过一组数据序列进行累加建立的线性微分方程,其中系数便为发展系数与灰色作用量,那么只需要求参便可以预测未来值,这里采用了对累加数据进行均值生成矩阵向量,采用最小二乘法即可,且最后作残差处理,便可建立,具体程序见如下:

clear
syms a b;
c=[a b]';
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
B=cumsum(A);  % 原始数据累加
n=length(A);
for i=1:(n-1)
    C(i)=(B(i)+B(i+1))/2;  % 生成累加矩阵
end
% 计算待定参数的值
D=A;D(1)=[];
D=D';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*D;
c=c';
a=c(1);b=c(2);
% 预测后续数据
F=[];F(1)=A(1);
for i=2:(n+10)
    F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a ;
end
G=[];G(1)=A(1);
for i=2:(n+10)
    G(i)=F(i)-F(i-1); %得到预测出来的数据
end 
t1=1999:2008;
t2=1999:2018;
G
plot(t1,A,'o',t2,G)  %原始数据与预测数据的比较
xlabel('年份')
ylabel('利润')

在这里插入图片描述
模型太多,八一不多说,自己参考相关书籍

matlab参考书籍

  • 《MATLAB R2016a完全自学一本通》
  • 《MATLAB宝典》
  • 《MATLAB数值计算》
  • 《MATLAB揭秘》
  • 《MATLAB在数学建模中的应用》
  • 《MATLAB从入门到精通》
  • 《MATLAB函数速查手册》

猜你喜欢

转载自blog.csdn.net/weixin_39892850/article/details/86071344