Matlab
Regnaiq
只是一个学生, 学无止境. 慢慢来, 比较快.
展开
-
Matlab设计多个输入层的深度学习模型
matlab给出了很多例子是使用一个输入的, deep network designer app 可以很方便地实现这个功能.但是最近需要做一个多输入的模型, 在设计好后matlab会提示只支持一个输入层.这里放一些matlab设计多个输入层的深度模型资料, 大意是使用imageInputer layer曲线救国. 目前还没有动手实现, 先挖个坑, 回头自己做一篇再更新一下:How to train a deep neural network with 2 inputsHow can I train原创 2021-05-23 16:22:11 · 4354 阅读 · 4 评论 -
matlab之实现不放回随机抽样
比如A有100个数据, 每次抽100个, 不放回直到抽完.可以考虑使用randperm函数来生成随机序列, 间接地达到目的.先生成序列:index=randperm(length(A));开始抽样:B=A(index);for i=100:100:1000 C=B(1:i); ....% 后续处理end...原创 2021-05-07 16:31:37 · 3107 阅读 · 0 评论 -
matlab之写入表头失败变成var1
这两天遇到一个问题, 明明赋了一个变量名, 送给表格的时候表头却没成功:disRatio=(1.2:0.2:3.0);energyRatio=zeros(10,5);T=table(disRatio',energyRatio);结果发现表格T的第一列是Var1:后来才知到, 在赋值给表格的时候, 不能再对表格内的参数进行操作, 否则就当成值而失去了disRatio的变量名字了. 改成这样:disRatio=(1.2:0.2:3.0)';energyRatio=zeros(10,5);原创 2021-05-06 21:21:07 · 584 阅读 · 0 评论 -
Matlab之把两个二维矩阵连接成一个三维矩阵
目前有两个矩阵A(2,3)和B(2,3), 我们知道把两个矩阵进行左右拼接或者上下拼接的时候可以直接写C=[A,B]或C=[A;B]但是如果想前后拼接呢? C(2,3,2)这时候就可以使用函数cat来连接两个矩阵.比如C=cat(3,A,B)其中3是指拼接的维度. 其实C=[A,B]就等价于C=cat(1,A,B)同理, C=[A;B]就等价于C=cat(2,A,B)...原创 2021-04-09 16:39:55 · 16541 阅读 · 2 评论 -
Some tips for matlab
Alt+Left Click: Execute the line just clickedLiveEditor 有智能提示, 补全等功能, 比普通Editor智能很多.Livescript不受文件所在路径限制, 而是根据目前的workspace决定.matlab的图复制为向量图或者emf格式拷贝到word/ppt会更清楚.LiveEditor里的控件比如slideBar很适合对算法进行调参...原创 2021-02-10 20:14:40 · 239 阅读 · 0 评论 -
matlab画图的时候改变某一字体的颜色
我们知道如果改整体图内字体的颜色可以对坐标轴进行设置,那matlab画图的时候如何改变某一字体的颜色?其实, matlab是支持latex语法的. 如果想改变颜色, 直接在引号内加上对应的latex语法即可.xticklabels({'\color{black} MAE','\color[rgb]{0.52,0.16,0.1556}CC'})格式有两种:{\color{black} text}\textcolor[rgb]{0.52,0.16,0.1556}{text} 颜色范围为[0,1]原创 2021-02-02 11:35:22 · 3640 阅读 · 0 评论 -
matlab划分训练集和测试集
有两个函数可以使用, 分别是crossvalind (Bioinformatics Toolbox) 和cvpartition(Statistics and Machine Learning Toolbox)两者都适用于leave-N-out, K-fold等, 大家可以根据需要自由选择.原创 2021-01-27 16:43:50 · 2101 阅读 · 0 评论 -
latex文字两端对齐
可以使用\usepackage{ragged2e}包定义新命令\renewcommand{\justify}{\leftskip=0pt \rightskip=0pt plus 0cm}然后在需要对齐的文字前加此命令即可.\justify原创 2021-01-13 09:41:44 · 11060 阅读 · 1 评论 -
Matlab解方程, 等到数字解和解析式解
使用solve可以解方程组, 数值简单的方程会给出数值解, 但是很多情况下只会给出解析式解.比如以下代码:a=0.0715;d=0.3;b_square=0.0887;A1=0.4452;B1=-1;syms p qeqns=[(q-d)^2/a^2-p^2/b_square==1,A1*p+B1*q==0];[solp, solq]=solve(eqns,[p q])得到解:如果想得到数值解, 还要double一下:double(solp)ans = 0.40原创 2021-01-09 20:28:17 · 1234 阅读 · 0 评论 -
matlab删除矩阵中元素相同的一行(一列)
有一个矩阵, 举例如下: A = 6 11 17 1 1 1 3 5 6 6 11 15 1 3 6 3 7 12 6 9 15 3 9 12 1 5 6目前网上的教程都是如何删除元素相同的行, 那么如果我们想删除元素相同的一行, 比如1 1 1该怎么办呢?我们可以换个思路: 把原创 2021-01-07 20:44:27 · 4978 阅读 · 0 评论 -
Matlab之在函数里使用外部变量:全局变量和嵌套函数
函数里的变量自在函数内有效, 那么如何在函数内调用外部的变量呢?全局变量 globalglobal可以定义全局变量, 但要注意先定义, 再赋值. 否则会有警告:Warning: The value of local variables may have been changed to match the globals. Future versions of MATLAB will require that you declare a variable to be global before原创 2021-01-06 17:28:02 · 16206 阅读 · 0 评论 -
matlab无法显示中文注释, 全成乱码
一直用英文的系统, 用matlab打开别人的代码当包含中文的时候就变成了一堆乱码了.改如何解决呢?确保你在matlab里使用的字体支持中文. (这一步问题不大).可以使用命令feature(‘locale’)查看是否有warning, 提示你的系统设置是否和你的matlab设置一致.如果有警告, 说明你的地区设置不是中文. 打开控制面板, 将地区设置为包含中文的地方(中国大陆, 香港简体等).点击administrative, change system locale中, 要把n原创 2020-12-24 21:21:08 · 20914 阅读 · 2 评论 -
matlab画双曲线的四种方法
这里说一下画图的思路, 就不提供具体代码了.思路一matlab的plot是(x,y)一一对应的, 所以对于双曲线(以焦点在x轴上为例), 画双曲线的时候可以分为四段:x负, y正;x负, y负;x正, y正;x正, y负.每次画图用hold on叠加在一起, 注意颜色要一样,思路二已知表达式, 但是表达式中y是平方的形式, 所以取了根号之后就变成了正数. 这样可以分成两部分来画:根号y;-根号y.但是要注意一点, 这时候双曲线焦点-c,c之间是没有值的. 如果提前initialize原创 2020-12-19 20:36:47 · 10891 阅读 · 1 评论 -
matlab穷尽排列组合
比如现在有三个数组, A,B,C, 每个数组里有若干个数.我们想在ABC中任意抽一个, 组成一个三元组. 一共有numel(A)*numel(B)*numel©种方法.最朴素的方法就是用三个for循环, 但是时间复杂度为0(n)^3.我们可以借助ndgrid函数来做. ndgrid本来是用来生成坐标和网格的.[X,Y,Z]=ndgrid(A,B,C);COM=[X(:),Y(:),Z(:)];将XYZ拼在一起即可....原创 2020-12-16 22:06:03 · 2241 阅读 · 3 评论 -
matlab中polarhistogram无法修改极坐标的问题
polarhistogram可以通过polarhistogram(p,__)来指定p的极坐标样式. 但是在写代码的时候发现不能用, 每次指定好p一run结果就又变回原来的样子了.后来发现是p不可以预先制定, 因为逻辑如下:指定p的样式→\rightarrow→polarhistogram覆盖, p的样式无效.正确的逻辑应该这样:初始化p→\rightarrow→polarhistogram覆盖→\rightarrow→定义覆盖后的p代码如下:pax=polaraxes; %不可以在这原创 2020-11-08 22:06:08 · 827 阅读 · 0 评论 -
matlab复制到word/ppt里保持高清晰度
用matlab画图写论文时我们一般直接保存成pdf, 这样放大后也很清晰, 但是有时候画完图还要再用其他软件再修饰以下, 把画出的图拷贝到ppt中就会变得模糊了.那么可以把matlab画的图先导出emf格式, 这是一个矢量图, 再复制到PPT中就很清楚了....原创 2020-10-23 21:26:19 · 2257 阅读 · 0 评论 -
Matlab获取图像中的曲线句柄, 设置图像的曲线形状
matlab中有很多函数如果没有返回参数的情况下是可以直接画出图来的, 比如freqz.那么如何改变这种图的参数呢?这里要说的是曲线属于坐标axes的子对象, 所以使用p=get(gca,'Children');就可以获取曲线的句柄了. 这里可以在matlab变量区看看获取到的p是不是line对象. 一般来说, 有多少曲线就有多少line对象. 我们可以对曲线进行分别设置:p(1).Color=[1,129,167]/255;p(1).LineWidth=2;p(2).Color=[240,原创 2020-10-23 10:24:58 · 2300 阅读 · 0 评论 -
使用scatter来代替surf画热度图
画热度图时一般都用surf, 但是surf只可以画方方正正的图.对于不规则的图可以考虑使用scatter.scatter(x,y,80,c,'s','filled')这里要注意两点:mark要用square, 面积要大一些, 不然就会变成这样:一定要加上’filled’, 不然就是空芯的了....原创 2020-10-20 10:07:38 · 318 阅读 · 0 评论 -
Matlab之选取特定区域的坐标点
比如选取一个不规则四边形内的点:确定四个点的坐标, declaim四边形:xv=[x1,x2,x3,x4,x1]; % sym2doubleyv=[y1,y2,y3,y4,y1];figureplot(xv,yv)xlim([0,2.4])ylim([-2.4,0]);2. 定义坐标区域内的点:xVector=0:0.05:2.4;yVector=-2.4:0.05:0;[x,y]=meshgrid(xVector,yVector); % obtain all coordi原创 2020-10-17 21:33:08 · 13195 阅读 · 6 评论 -
下采样downsample和decimate
下采样是指把高采样率的序列重新按低采样率采样.downsample和decimate都有下采样的意思, matlab里也有两个函数. 说一下区别:downsample就是直接下采样, 每隔n个间隔进行抽取decimate也是下采样, 但是在下采样之前做了一个滤波, 放置在下采样后出现频率混叠. 因为下采样的时候要确保新采样的奈奎斯特频率以上的成分在序列里不存在, 不然就会混叠到低频部分, 那么下采样后的序列就不对了. 比如你有一个30KHz采样到的序列. 现在想用三分之一的采样率10KHz去采. 也原创 2020-10-17 21:14:45 · 6930 阅读 · 0 评论 -
Matlab解方程组solve
定义位置变量syms x y定义方程组eq1=y==3*x+5;eq2=y==4*x+6;求解方程组s=solve(eq1,eq2,[x,y]);s.xs.y注意老版本使用的是s=solve('eq1','eq2','x','y')这种表示已经淘汰了.另外s.x是sym格式, 如果拿到真正的值double(s.x)即可....原创 2020-10-17 20:55:11 · 11252 阅读 · 3 评论 -
matlab画图时插入latex公式
xlabel('$\frac{d}{d^{\prime}}$','interpreter','latex')要加上'interpreter','latex'告诉matlab用latex来解释公式.原创 2020-10-12 16:36:23 · 817 阅读 · 0 评论 -
matlab画图时打正负号±
使用转义字符\pm即可.原创 2020-10-10 16:13:56 · 9642 阅读 · 0 评论 -
matlab之解线性方程组
有方程组AX=B;其中A是m x n的矩阵.如果m=n, 方程有精确解.如果m>n, 方程没有精确解, 但可以求最小二乘解. A\B, lsqminnorm(A,B) 和pinv(A)*B都可以用.如果m<n, A低秩, X有无穷多解, 这里注意用A\B求得的是令norm(AX-B)最小, 而lsqminnorm和pinv(A)*B不仅令norm(AX-B), 也会令norm(X)最小.reference:线性方程的最小范数最小二乘解对线性方程组 Ax = B 求解...原创 2020-08-16 20:54:01 · 1536 阅读 · 0 评论 -
matlab FFT之后的问题
FFT之后得到的是各个频率的分量, 是一个complex Value.一般地, fft默认是输入向量的长度:Y=fft(x);但是FFT的点数为2的幂时, FFT的速度会加快:fs=100;L=numel(x)n = 2^nextpow2(L); %Y=fft(signal,n);n就是fft的点数, 代表做fft时把频率分成了多少份. 每份所代表的频率为:fs/n先看一下画出的频谱图P2 = abs(Y)/L; %求幅值(模). 也就是实数部分平方加序数部分平方再开根号f =原创 2020-06-27 15:20:00 · 3713 阅读 · 0 评论 -
matlab之如何将矩阵特定位置的元素置零?
特定位置的情况有很多, 比如画一个圆, 一个角等.这里以把矩阵的一个角置零作为例子.假设有一个矩阵如下图:我们想把他的左下角元素置零. 比如:那么第一步, 建立一个和矩阵A大小相等的坐标系.xAxis = [0:5];yAxis = [0:6];[X,Y] = meshgrid(xAxis,yAxis);第二步, 定义要置零的位置比如这里我们可以用y=4-x来表示分界线, 那么要置零的部分就是y<4-x第三步, 创建一个和矩阵A大小相等的矩阵B.B = Y-4X;此时,原创 2020-06-26 17:26:08 · 16569 阅读 · 2 评论 -
matlab之设置里不显示已经安装的字体
我们经常会替换掉matlab里代码字体, 但有时候安装了一个喜欢的字体, 却在matlab里找不到, 为什么?尝试直接把字体放到matlab的字体目录:C:\Program Files\MATLAB\R2020a\sys\java\jre\win64\jre\lib\fonts目录大同小异, 大家按照上面的格式根据自己的安装目录找一找.重启matlab, 字体就回来啦....原创 2020-06-20 19:51:07 · 1197 阅读 · 0 评论 -
matlab之只显示部分legend
在画图的时候, 比如画三条线, 有时候只想显示两个legend, 怎么办?我们可以设置每个图的句柄, 然后在legend里指定要画的句柄就可以了.示例:figureH(1)=plot(R34);hold onH(2)=plot(...); % no delayhold onH(3)=plot(...); % theo delayhold onH(4)=plot(...); % actual delaylegend(H([2 3 4]),'no delay','Theo delay原创 2020-06-20 19:44:09 · 21212 阅读 · 4 评论 -
matlab之浮点数精度相等的问题: 在循环中为什么不相等?
今天调试程序遇到一个奇怪的问题:有这么一个循环,for i= -2:0.1:1 if i==-0.2 break end...end可是每次执行都发现程序不会停止, 直到遍历结束. 等i等于-0.2的时候直接执行 i==-0.2, 发现结果竟然是0.也就是说matlab认为他们不相等.后来才知道计算机在运算浮点数的时候总是有误差的. 虽然误差很小很小.所以这时候不可以用==来评价了, 而是要看两者的差是否小于一个很小的值:abs(-0.2-i) < epseps是浮点原创 2020-06-09 17:19:37 · 2746 阅读 · 0 评论 -
Matlab之画图的位置管理[left bottom width height]
matlab画图时使用’Position’参数可以控制位置.Position参数包含四项: [left bottom width height]如下图所示:可以看出, 画图时left+width不可以大于1, bottom+height不可以大于1.画figure时, 可以用如下命令:figure('Units','normalized','Position',[0.1,0.2,0.8,0.6]);这里的Position外框指的是屏幕.画plot时, 可以用如下: pos1=[0.05原创 2020-06-01 19:30:26 · 3987 阅读 · 0 评论 -
matlab之在一个向量里随机挑选
有时候要做simulation, 在一个向量里随机挑选元素.比如我们有一个向量a, 每次要随机挑选里面的两个, 挑1000次, 那么就可以使用out = randsrc(1000,2,a);out就是一个1000*2的矩阵, 没一行都是从a中随机挑选的两个数....原创 2020-05-12 11:18:57 · 4466 阅读 · 2 评论 -
matlab之在程序中设置断点来调试
需要在循环中某一个特定时刻进行调试,如文件file.mfor i=1:100 ...end那么我们可以再这样来设置断点:dbstop in file.m at 2 if i==4 % 如果i=4, 在file.m的第二行设置断点file % 运行或者更简单粗暴的,使用keyboard命令:for i=1:100 if i==4 keyboard end...原创 2020-04-29 11:41:04 · 3916 阅读 · 0 评论 -
matlab之找到第二大的数
有两个思路:用max找到最大的数, 然后把最大的数置为平均数, 再次用max来找次大数.a=[1 2 3;0 7 8; 4 5 0]a(max(max(a)))=mean(a);max(max(a))按从小到大排列, 然后从后往前取.a=[1 2 3 0 7 8 4 5 0];[A,pos]=sort(a);A(end-1)当然, 用findpeaks来找peak也...原创 2020-04-29 11:35:25 · 19497 阅读 · 0 评论 -
matlab之在矩阵中找出一个与特定的数最接近的数
假设有一个数5, 那么我们想从一个矩阵中找出离5最接近的数该怎么办呢?a=[12 14 14.5 15.2 16.7 18.2 19.5 20];>> [m,n]=min(abs(a-5)); % 取相减后的最小值>> a(n) % 即为所求...原创 2020-04-27 19:27:53 · 19461 阅读 · 0 评论 -
matlab之极坐标图polar添加箭头
在笛卡尔坐标系的图里, 添加箭头可以使用annotation函数, 但是对于极坐标不可以.在极坐标系里添加箭头分为两种情况:从原点向外的箭头这个可以使用matlab自带的compass函数.deg13=57;deg14=88;deg24=97;deg34=178;degVector=[deg13,deg14,deg24,deg34];theta=deg2rad(degVecto...原创 2020-04-16 10:29:43 · 2266 阅读 · 0 评论 -
matlab设置默认工作路径 用户路径
默认路径就是打开matlab的路径在主页 - 预设 - 常规 里,可以设定 初始工作文件夹用户路径可以使用userpath命令。userpath(新目录)如果需要进入工作路径,使用命令cd (userpath)注意这里userpath是一个变量名,需要加一个括号,否则将会当做userpath的参数,在当前文件夹里寻找叫做userpath的文件夹,结果报错。...原创 2020-01-10 19:53:26 · 1785 阅读 · 0 评论 -
matlab查找结构体struct中某一字段
需要使用strcmp({input.Name},‘key’}解释一下,struct访问时会直接返回结果,比如input.Name,如果直接用会报错,因为返回了太多的结果,所以需要用大括号首先变成cell类型,再使用strcmp(针对char类型)来找到是否存在key。...原创 2020-01-07 14:46:55 · 10018 阅读 · 1 评论 -
matlab之连接BLE
MATLAB在2019b之后支持了在window10上连接BLE设备,可以直接与之通信。具体看这里.有以下功能:扫描设备,得到Name, Address, RSSI连接设备读取和写入设备的Service, Characteristic, Descriptors.这三种的含义和用法在示例里讲解的很清楚。订阅characteristics来进行通知和显示。此外,示例程序里还可以学到:...原创 2019-12-18 11:15:34 · 1521 阅读 · 0 评论 -
matlab之cell如何转化为string类型?
cell转char大家都知道,直接用cell2mat就可以了。但是对于string来说,本身就是一个str Array,所以使用cell2mat时就会报错。那么如何从cell转string呢?提供一下思路:初始化和cell一样大小的string矩阵。具体可以看以前写的这篇文章。设立循环,对于cell向量里的每一个cell,取{ }得到对应的string把得到的string赋予我们初始化的...原创 2019-12-12 22:20:44 · 34768 阅读 · 2 评论 -
matlab之字符串矩阵的初始化
字符串矩阵如何初始化?没有固定的函数。一个思路就是使用repmat函数进行复制:比如说要初始化一个2 ×\times× 3大小的字符串矩阵,那么可以这么写:A=repmat("a",2,3);注意这里初始化的是字符串矩阵,而不是字符矩阵,所以这里的a要用双引号。具体可以参考我的这篇博客。...原创 2019-12-12 22:13:35 · 6517 阅读 · 0 评论