数学建模之Matlab快速入门--全

前言

  • 本文是之前学Matlab时候做的笔记,很适合快速入门
  • 数学建模中matlab和python是最常用的两个软件,现在本人更喜欢python去做数学建模

文章目录

界面介绍与操作

  • 工具栏:快捷操作
  • 编码器:脚本代码窗口
  • 工作区:脚本变量窗口
  • 工作路径:当前文件索引

快捷操作

最常用的:

  • clear
  • clc
  • dbstop if error

数据类型

数值型

整型

  • (u)int8、(u)int16、(u)int32、(u)int64 (u):是无符号类型

    matlab 复制代码
    a = int8(8)
    
    a = uint8(8)

浮点型

默认情况下,MATLAB其所有算术计算符合IEEE标准的双浮点精度执行

  • single :单精度
  • double :双精度
matlab 复制代码
%matlab还可以让字符转为ASCII值
s = 'wang yang'

b = double(s(1))    %S(1) 代表着 'w'

复型

  • z = a + bi
matlab 复制代码
z = 5 + 3i

real(z)		% 实部
imag(z)		%虚部
abs(z)		%模
angle(z)	%arctan b/a

逻辑型

  • logical :matlab中 0 为假,1为真
  • 逻辑运算符的结果

字符型

matlab 复制代码
a = [1:5];         %a为一个数值数组
b = num2str(a);    %该函数将a转化为字符串类型   
x1 = a*2;          %此处为a中的数值一次乘2

struct数组

注意:matlab中索引是从1开始的

matlab 复制代码
%%
structTemp = struct('name',{'汪洋','王国森','施轶秋'},'age',{18,18,18})  //一一对应
structTemp.name(1)
structTemp.name(2)
structTemp.name(2)
structTemp.age(1)
structTemp.age(2)
structTemp.age(3)

structTmep

structTemp
%%
%%
my.name = "汪洋"
my.age = 18
my
%%

%删除  但是要在扩展库中下载
structTemp = struct('name',{'汪洋','王国森','施轶秋'},'age',{18,18,18})
field = {'name'}
structTemp = rmfield(structTemp,field)

structTemp

cell数组

*元胞数组*是一种包含名为*元胞*的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通过将索引括在圆括号 ()中可以引用元胞集。使用花括号{} 进行索引来访问元胞的内容。

  • 要用{}赋值
  • 使用"()"访问
matlab 复制代码
%1、要维度一样
%2、要用{}
a = {1,2,3,4;'w','w','x','w'}; 
b = cell(3)
c = cell(5,2)

%使用"()"访问
%以下4种赋值方式是一样的
A(1,1)={2}
A(1,2)={[2]}
A{2,1}=2  
A{2,2}=[2]

函数句柄

日期和时间型

https://www.cnblogs.com/yymn/p/9170252.html

数据标准

  • realmax 数据最大值
  • realmin 数据最小值
  • 结果异常值:
    • nan
    • inf

变量储存

利用MAT文件可以把当前MATLAB工作空间中的变量保留下来

MAT文件是一种二进制格式文件,文件后缀.mat

变量写入文件与导入matlab通过save和load命令:

save 文件名 [变量名列表]

load 文件名 [变量名列表]

当然可以通过主窗口的界面操作进行保存与导入

注:

1.文件名不需要加引号,不需要带文件后缀.mat,可以带路径

2.变量名列表中变量的个数不限,省略则默认写入/导入所有的变量,多个变量名之间用空格隔开

matlab 复制代码
save mydata a x  %%把a x存入mydata文件中,下次就可以使用
load mydata    %%将mydata文件中的内容

基本运算

matlab 复制代码
%%
%基本运算
(1+sqrt(4))/2 %开平方根
8^(1/3) %开任意方根,注意优先级^大
power(8,1/3) %开任意方根,注意复数模式 等价于^  如下:
power(-8,0.3)^(1/0.3) %理论仍是-8,但结果已经变成复数  

log(1.5)  %以e为底的对数  
log10(1.5)  %以10为底的对数
log2(1.5)  %以2为底的对数
log1p(x)  %=log(x+1)   注意一下 : 比log精度更高,特别是x趋于0的时候  1
log(9)/log(3) %利用换底公式求任意

exp(2)  %以e为底的指数
expm1(2)  % = exp(x)-1  e^x 的泰勒级数展开
pow2(10)  %以2为底的指数
nextpow2(20) %寻找最大的n,使得2^(n-1)小于该值  注意一下

sin(pi/6) %正弦
cos(pi/6) %余弦
sinpi(1/6) %=sin(1/6*pi)
cospi(1/6) %=cos(1/6*pi)
tan(pi/4) %正切

asin(1/2) %反正弦,弧度制
acos(1/2) %反余弦,弧度制
atan(1) %反正切,弧度制
asind(1/2) %反正弦,角度制
acosd(1/2) %反余弦,角度制
atand(1) %反正切,角度制
atan2(1,-1) %四象限反正切

mod(17,4) %求余数
rem(17,4) %求与被除数符号相同余数

sign(-1) %符号函数

fix(1.1072)  %向正去穷取整数
floor(1.1072)  %向负无穷取整数
ceil(1.1072)	%比他大的最近一个整数
round(1.1072)	%四舍五入
roundn(1.1072,-2)	%按小数位置四舍五入
%%
%整体运算
max([1,2,3,4,5]) %最大值
min([1,2,3,4,5]) %最小值
mean([1,2,3,4,5]) %平均值
median([1,2,3,4,5]) %中位数
prod([1,2,3,4,5]) %求积
sum([1,2,3,4,5]) %最和
var([1,2,3,4,5]) %方差
std([1,2,3,4,5]) %标准差
cov([1,2,3,4,5],[5,4,3,2,1]) %协方差

%%
%生成随机数
rand() %生成0-1均匀分布的的随机数
randi(100) %生成0到100均匀分布随机数,注意辨别参数的意义
randn(1)%生成正态分布的的随机数
sprand(10,10,0.5)%稀疏均匀分布随机矩阵   最后一个参数表示的是密度  注意一下:稀疏矩阵0是不显示的
sprandn(10,10,0.5) %稀疏正态分布随机矩阵
rng('default') %随机种子

矩阵基础

矩阵是matlab的核心

向量、矩阵

  • 向量可以理解为一维数组,也可以看作是矩阵的特殊形式
  • 矩阵可以理解为二维数组

向量

命名规范:

起始数据 : 数据间隔(可省略,默认为1) : 结束数据

matlab 复制代码
%%
1 : 100(等价于1:1:100)		  %范围为1到100,间隔为1,1×100的向量
1 : 2 : 100					%范围为1到100,间隔为2, 1×50的向量
100 : -1 : 1				%范围为100到1,间隔为-1, 1×100的向量
1 : 1 : 100.7				%范围为1到100(≤100.7的最大数),1×100的向量
%%

矩阵

  • 采用逗号或空格来分割行元素
  • 采取分号或者换行来分隔列元素
  • 注意维数
matlab 复制代码
zeros(m,n) / (m)			%创建m*n的零矩阵
ones(m,n)					%创建m*n的一矩阵(全是一) 
eye(m,n)					%创建m*n的(伪)单位矩阵
magic(m)					%创建m的换方阵,行列相等
rand(m,n)/randn(m,n)		%创建m*n的随机矩阵,rand是0-1的范围,randn是m-n的范围
meshgrid(L,N)				%创建基矩阵
repmat(A,m,n)				%将A扩大m*n倍
reshape( Matrix_in , m , n) %扩充矩阵,注意不能改矩阵的元素

%%
meshgrid(坐标)
m=1:5;
n=2:7;
[A,B]=meshgrid(m,n)

A =

     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
B =

     2     2     2     2     2
     3     3     3     3     3
     4     4     4     4     4
     5     5     5     5     5
     6     6     6     6     6
     7     7     7     7     7

%%

矩阵运算

  • 矩阵相乘 A*B
  • 矩阵右除 A/B等价于A与B的逆乘
  • 矩阵左除 A\B等价于A的逆乘与B
  • 矩阵数乘 A.*B 矩阵中元素两两相乘
  • 矩阵右除 A./B
  • 矩阵左除 A.\B
  • 对于数+/-矩阵,相当于每个元素都加或者减一

其他运算:(运行规则和矩阵运算相同)

  • inv(A) 矩阵求逆
  • pinv(A) 矩阵求伪逆 逆不唯一,对于非方阵来说,A * B * A ≈ A满足这个就行
  • A' 矩阵转置
  • det(A) 矩阵行列式
  • trace(A) 行列式的迹
  • eig(A) 特征向量和特征值 [X,Y] = eig(A)
  • lu(A) [L, U, P] = lu(A); L是一个下三角矩阵,U是一个上三角矩阵,P是一个置换矩阵,使得PA = LU
  • qr(A) [Q, R] = qr(A); Q是一个正交矩阵,R是一个上三角矩阵,使得A = QR

矩阵大小和向量大小

冒号运算符号(遍历矩阵)

  • 注意下标是从1开始的
  • 注意的是:matlab中永远是行为先

稀疏矩阵

采用三元组的方式存储,不储存0

  • sparse(m,n)
  • 可以强制转换矩阵为稀疏矩阵

逻辑基础

logical,真为1,0为假

符号 功能
== 判断是否相等
~= 判断是否不等
< 判断是否小于
<= 判断是否小于等于
> 判断是否大于
>= 判断是否大于等于
符号 功能
isnan( ) 判断是否非数
isinf( ) 判断是否无穷大
isempty( ) 判断是否为空
isreal( ) 判断是否为实数(甄别复数)

标量和矢量:

  • 标量:固定的,如:x= 5
  • 矢量:矢量(Vector)在MATLAB中则用于表示一系列相关的数值,它被定义为一维数组或序列,可以是行向量或列向量。

优先级

优先级 符号
1(最高) 括号( )
2 转置 ' ;次幂 ^
3 一元运算符 + - ~
4 乘除 * / \
5 加减 + -
6 冒号表达式 :
7 二元比较逻辑 > >= < <= ~=
8 逻辑与 &
9 逻辑或 |
10 标量逻辑与 &&
11(最低) 标量逻辑或 ||
  • 只要记住:()优先级是最高的就可以了

结构基础

if-else-end

注意点

  • endif不能写成else if
  • 记得要写end
matlab 复制代码
a=1;b=2;c=1;
delta=b^2-4*a*c;
if delta>0
    x(1)=(-b+sqrt(delta))/2/a;
    x(2)=(-b-sqrt(delta))/2/a;
elseif delta==0
    x=(-b+sqrt(delta))/2/a;
else
    x=[];
end

switch-case-otherwise

注意点:

  • otherwise不需要提供判断条件,当其他分支均不满足条件时候被执行
  • break别忘了
  • switch不能指定范围
matlab 复制代码
a=1;b=2;c=1;
delta=b^2-4*a*c;
switch sign(delta)
    case 1
    x(1)=(-b+sqrt(delta))/2/a;
    x(2)=(-b-sqrt(delta))/2/a;
    case 0
    x=(-b+sqrt(delta))/2/a;
    otherwise
    x=[];
end

for

注意点

  • index在values中按顺序进行取值,value一般是行向量 ,一般采用冒泡表达式
  • 当value值为矩阵时候,按照列进行切割,每次value取矩阵的一列
  • 别忘了end
matlab 复制代码
s=10;
H = zeros(s);
for i = 1:s
    for j = 1:s
        H(ii,jj) = 1/(ii+jj-1);
    end
end

parfor

  • 只要记得他是用来加速for循环的

while

  • 注意别忘了end
matlab 复制代码
%% while
n = 10;
f = n;
while n > 1
    n = n-1;
    f = f*n;
end

%注意:n的更新条件

break、continue、return

  • break 跳出循环体
  • continue 跳出本次循环
  • return 跳出函数体,matlab一般很少使用
matlab 复制代码
%% break
limit = 0.8; s = 0;
while 1
    tmp = rand;
    if tmp > limit
        break
    end
    s = s + tmp;
end

%% continue
limit = 0.8; s = 0;
while 1
    tmp = rand;
    if tmp > limit
        continue
    end
    s = s + tmp;
end

函数

  • 函数需要存m文件(在保存的时候选择函数),默认函数名就是文件名字
  • 不要睡意改变文件名字,否则调用容易出问题
  • 如果matlab里面有这个函数,就不要去实现
matlab 复制代码
%如:自定义文件
function [aa,bb] = m_max(a,b)
%UNTITLED 此处提供此函数的摘要
%   此处提供详细说明
if a > b
    aa = a
    bb = b
else
    aa = b
    bb = a
end

nargin

matlab 复制代码
function c = addme(a,b)
%     switch nargin
%         case 2
%             c = a + b;
%         case 1
%             c = a + a;
%         otherwise
%             c = 0;
%     end
    if nargin<2
        b=1;
    end
    c=a+b;
end

~

matlab 复制代码
function [c1,c2] = opem(a,b)
	if nargin < 2
		b  = 1;
	end
		c1 = a + b;
		c2 = a - b;
end

%%
如果不想c1,可以这样写 [~,c2]
%%

函数查询

https://blog.csdn.net/ywsydwsbn/article/details/123857932?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169478642516800226595731%2522%252C%2522scm%2522%253A%252220140713.130102334

  • 不会的函数,直接bing、百度等

特殊形式

函数句柄

matlab 复制代码
%创建函数句柄
fun1 = @open
[a,b] = fun(1,1)

%fun2 = @(x,y)(x+y)
%输出  ans = 2

evel

相关推荐
Bruce小鬼4 分钟前
QT文件基本操作
开发语言·qt
2202_7544215410 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热17 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
懷淰メ26 分钟前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm40 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
宁静@星空1 小时前
006-自定义枚举注解
java·开发语言
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
武子康1 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
珹洺1 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
每天吃饭的羊1 小时前
python里的数据结构
开发语言·python