许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MATLAB经验集:编程技巧与常见问题总结

MATLAB经验集:编程技巧与常见问题总结

阅读数 14
点赞 0
article_banner

前言和目录

预留坑位

此为笔记文档 这里会记下一些没有填上的坑 patch属性是什么 属性是什么 二维和三维的隐函数怎么表示 子级和父级是什么 特殊的数据可视化方法,如heatmap、imagesc 元胞 多文件编程设计 syms、函数句柄是什么

阅读注意

  • 里面百度文库的链接需要打开flash再进入
  • 本文使用的Matlab版本是R2019a,可能有的高阶功能不向下兼容,需要自行查阅资料
  • pdf版建议打开pdf的目录功能,markdown转pdf的时候会自动根据标题生成目录
  • 在CSDN的版本由于图片转存太麻烦有的部分原本有图的我就没上传,但是大体不影响阅读,我会留下外网链接,里面将是pdf版
  • 不保证正确!如果发现错误请联系本人,本人将在更新过程中改正!
  • 本人ID: GitHub:BJTU-ChrisLee CSDN:BJTU_Chris_Lee
  • 预计之后会持续在CSDN更新,每次更新都会直接改一整篇文章(本文本质是个人的学习笔记),所以请跟进关注
  • 转载之类的请注明出处(个人CSDN的ID等),另外见版权声明部分

Matlab使用入门

基础操作

  • 怎么注释?
%...
%{
%}

怎么不每次显示结果?

在行末加上 ;

怎么多行输入?

用连行符 ...,不过字符串似乎不支持多行输入

怎么开新界面窗口?

figure函数 相关资料

disp函数可以简单发送 信息

怎么关闭所有窗口/重置所有变量/清屏?

clear close函数 clear close等的用法

怎么暂停程序?

pause类函数 pause类用法

注意只有在操作端左边显示>>的时候才能输入

如果想要在编写代码的时候就确定一个调试点,可以设置一个keyboard函数,它允许程序暂停的同时进行值的调整

怎么从用户获得输入?

input函数:

v1=input('提示性语句:');
%如果想要在input里加上变量的话可以采用下面的方式
v2=input([str1,num2str(v3),str2]);%同样适用于`disp`函数
%即字符串在Matlab中是特殊处理的
%也可以结合disp:
disp([str1,num2str(v3),str]);
v4=input('')%不能缺失 ''

注意,所有的输入和声明赋值操作是一样的,具体见矩阵和字符串中相关内容

从文件输入方法在后面提及

全局变量怎么使用?

% in 'a.m':
global a;
a=0;
% to use a in 'b.m':
global a;

为什么看到很多函数原形带有字符串?

比如:

plot(x,y,'--gs','LineWidth',2,'MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor',[0.5,0.5,0.5]);

(该语句来自于plot的技术文档)

实际上可以类比C语言读文件时候的'rb'等控制符,为了易读,将可以更改的命令都做成了字符串,以便很明了地更改属性

有哪些需要特别注意的点?

  • Matlab所有的下标都是1开始索引的
  • Matlab中的字符串使用单引号包起来
  • Matlab中的Mat(矩阵)是重点,几乎所有操作都是以矩阵作为基础的
  • Matlab中char指字符串
  • Matlab中如果想一行输入多个变量需要使用空格分割,,表示的是一行多个表达式
  • Matlab逻辑运算符号中:
       

遇到不知道的怎么办?

  1. 百度 面向百度的Matlab编程
  2. 对于看不懂的函数,输入help cmd查看官方帮助文档(实际上本文很多东西都是直接help来的


两大数据结构——矩阵和字符串

矩阵有哪些操作?

矩阵的输入和声明

直接声明

A=[1,2,3;2,3,4]
A = 
     1     2     3
     2     3     4

从用户获得输入,注意,输入格式与在代码中输入是一样的

A=input('input A:')
%input
[1,2,3;...
2,3,4]
%end of input
A = 
     2     3     4
     2     4     5

注意,下列方法获得的也是个向量/矩阵,这对理解Matlab怎么操作函数有很重要的意义

A=1:2:5
A = 
     1     3     5
A=1:3:5
A = 
     1     4
A=1:3
A = 
     1     2     3
A=[1:2:5,1:3:5]
A = 
     1     3     5     1     4
A=[[1:2:5]',[1:3:7]']%'是转置,这里涉及了子矩阵的组合,见‘重构矩阵的方法’一节
A = 
     1     1
     3     4
     5     7
A=input('input A:')
%input
1:1:3
%end of input
A = 
     1     2     3

可以猜测,实际上a:step:b指的是从ab,步长为step的向量,也可以知道这种向量和[1,2,3]这种向量并没有不同之处,这很重要!直接关系能不能正确理解后面的函数!

获取矩阵信息的函数
  • 获得行列数 [rows,cols]=size(A); szA=size(A);%szA是一个二维行向量 maxrc=length(A);%各个维度的元素数的最大值(2*3*4的三维矩阵即4) matlab123
  • 获得维度,注意维度类比是x、y坐标的意思 dimA=ndims(A); matlab1
  • 获得非0元素个数 cnt_nzero=nnz(A); matlab1
  • 声明矩阵的常用方法 sz是指一个n维向量代表每个维度的元素数 A=ones(sz);%全为1的矩阵 B=zeros(sz);%全为0的矩阵 C=rand(sz);%产生在(0,1)区间均匀分布的随机阵 D=eye(sz);%产生单位阵 E=randn(sz)%产生均值为0,方差为1的标准正态分布随机矩阵 matlab12345 特殊矩阵 见链接中的 二-3
  • 线性索引和坐标的转化 这在位运算中会涉及到,这里只是介绍 摘抄自此 可以使用单个下标A(k) 表示matlab矩阵中的元素,MATLAB不会以矩阵和数组在MATLAB命令行窗口中的显示形状存储矩阵和数组,而是会将矩阵和数组存储为单个元素列。这种单个列由矩阵中的所有列组成,没一列都附加到最后一列。 因此,矩阵 A A = [2 6 9; 4 2 8; 3 5 1] A = 2 6 9 4 2 8 3 5 1 matlab12345 实际上是以序列形式存储在内存中:2,4,3,6,2,5,9,8,1,注意这里是按照先列后行的方式排布 矩阵A中位于第3行,第2列的元素(值=5)也可以标识为实际存储序列中的第6个元素。要访问此元素,可以使用标准的A(3,2)语法,也可以使用A(6)。 如果提供多个下标,Matlab将会基于分配给数组的维度计算存储列的索引。例如,假定 A 之类的二维数组的大小为 [d1 d2],其中 d1 表示数组中的行数,d2 表示列数。如果提供两个表示行-列索引的下标 (i, j),则偏移为 (j-1) * d1 + i matlab1 给定表达式 A(3,2),MATLAB 会将 A 的存储列的偏移计算为 (2-1) * 3 + 3,即 6。从头开始数六个元素即会到达值 5。 主要运用的就是find函数,所以只对find函数简要介绍 find(x)返回一个包含数组 X 中每个非零元素的线形索引的向量 A=[1,0,3;0,4,0;5,0,6] (find(A))' %转置是为了看起来方便些 ans = 1 3 5 7 9 (find(A<3))'%这里涉及了矩阵的位运算 ans = 1 2 4 6 8 matlab1234567 这里也可以看出Matlab优先处理列向量
重构矩阵的方法
  • 直接提取法 行的范围:row_a->row_b,列的范围:col_a->col_b sonA=A(row_a:row_b,col_a:col_b) matlab1 如果想要提取全部行/列的话 sonA=A(row_a:row_b,:)%获得了A的row_a->row_b行的全部列 matlab1 如果不知道具体多少行/列也不想多用变量的话 sonA=A(row_a:row_b,col_a:end) matlab1 如果你想的话,甚至可以从row_b->row_a翻转矩阵 son_rev_A=A(row_b:-1:row_a,1:end) %获得A全部列调转row_a->row_b行之后的矩阵,这里也可以猜出A(:,:)格式的本质是什么 matlab12 还记得吗,a:step:b实际上是一种向量,所以下面的方法获得矩阵也是可以的 这里pos使用的是线性索引 A=[1,0,3;0,4,0;5,0,6]; pos=[1,2;3,4] A(pos) ans = 1 0 5 0 pos=[1:2:3;2,5] A(pos) ans = 1 5 0 4 matlab1234567891011 可以猜测直接提取法的本质: A(B)将返回与B大小一致的矩阵,其中的元素为B上每一个位置对应的线性索引对应的A的值
  • reshape函数 目测不是很好用,如果上面的方法无法满足需求时可以 点击这个链接 了解具体怎么用,当然,也可以help reshape
  • 组合矩阵法 获得A,B构成的矩阵,这里的例子要求A的行数与B的行数一致(与数学上的分块的要求一样) C=[A(1:2,1),B(1:2,:)] matlab1
矩阵的简单操作函数
只记录几个常用的,其他如求上三角、求转置、翻转等 参阅这个链接
  • 取整函数fix ceil floor %fix将X的每个元素朝零方向四舍五入为最近的整数 A=fix(10*rand(1,10));%产生1*10的每个元素均为0-9之间随机整数的矩阵 %ceil将X的每个元素四舍五入到大于或等于该元素的最接近整数 %floor将X的每个元素四舍五入到小于或等于该元素的最接近整数 matlab1234
  • 计算矩阵的秩/行列式/特征值/迹/逆等 r=rank(A);%矩阵的秩 d=det(A);%矩阵的行列式 v=eig(A);%矩阵的特征值,这里的v是一个列向量 t=trace(A);%矩阵的迹,这里A必须是方阵 A=inv(A);%矩阵的逆 matlab12345 需要查找其他的求值函数(如求约化阶梯阵)时可以百度和help cmd
  • 求矩阵的转置 B=A' B=A.' matlab12 两者的在涉及复数时的区别请参阅help '
  • 求对角线元素 与求迹不同,这里不需要A是方阵,会逐个取 A(i,i) 元素 B=diag(A) matlab1
矩阵的运算
注意,matlab几乎一切皆矩阵,所以矩阵的运算会伴随使用Matlab的全过程,一定要思考每一个函数与矩阵是否有关系


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空