matlab|那些你不得不知道的matlab小技巧(代码片段)

slandarer slandarer     2022-11-30     146

关键词:

1: 比较常用绘图函数介绍

1.1: 填充图

半透明填充图:设置faceAlpha属性为0-1的数值即可调整透明度:

% 生成三组x,y数据
x=linspace(-8,12,100);
y1=normpdf(x,4,6);
y2=normpdf(x,0,1).*0.5+normpdf(x,4,2).*0.5;
y3=normpdf(x,-3,2);
% 绘图
area(x,y1,'FaceAlpha',0.5);
hold on
area(x,y2,'FaceAlpha',0.5);
area(x,y3,'FaceAlpha',0.5);

堆叠填充图:将y值变为列向量,横向拼接在一起,(想要调整层次关系只需要调整y向量的顺序即可):

% 生成三组x,y数据
x=linspace(-8,12,100);
y1=normpdf(x,4,6);
y2=normpdf(x,0,1).*0.5+normpdf(x,4,2).*0.5;
y3=normpdf(x,-3,2);
% 将y值变为列向量,横向拼接在一起
area(x,[y1',y2',y3'])

正负部分不同颜色:没想到啥更好的办法,分开画吧,(当然可以设置FaceColor设置更多样的颜色):

% 生成三组x,y数据
x=0:pi/100:4*pi;
y=sin(x);

y1=y;y1(y1<0)=0;
y2=y;y2(y2>0)=0;

hold on
area(x,y1,'FaceColor',[114,146,184]./255);
area(x,y2,'FaceColor',[173,189,163]./255);

1.2: 双 y 轴图

使用yyaxis函数即可,这里直接用一下官网的例子:

x=linspace(0,10);
y=sin(3*x);
yyaxis left
plot(x,y,'LineWidth',1.5)
ylabel('sin(3x)')

z=sin(3*x).*exp(0.5*x);
yyaxis right
plot(x,z,'LineWidth',1.5)
ylim([-150 150])
ylabel('sin(3x)e^0.5x')

从 R2019b 开始,可以使用 colororder 函数设置色序,坐标区的每侧指定颜色方案,给个模板:

x=linspace(0,10,25);
y1=sin(x);
y2=sin(2*x).*exp(x);
% 设置轴颜色
% 以下方式均可:
% colororder([1,1,0;0,0,1])
% colororder('b','m')
colororder([82,124,179;169,64,71]./255)

% 左轴绘图
yyaxis left
plot(x,y1,'s-','Color',[82,124,179]./255,'MarkerFaceColor',[82,124,179]./255,...
    'MarkerEdgeColor',[1,1,1],'LineWidth',2,'MarkerSize',12)  
% 坐标区域修饰(部分)
ax=gca;
% 加上调整背景颜色这句就是下图
% ax.Color=[249,250,245]./255;
ax.LineWidth=1.8;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.GridLineStyle='-.';
ax.FontName='Cambria';
ax.FontSize=12; 

% 右轴绘图
yyaxis right
plot(x,y2,'d-.','Color',[169,64,71]./255,'MarkerFaceColor',[169,64,71]./255,...
    'MarkerEdgeColor',[1,1,1],'LineWidth',2,'MarkerSize',12)  
% 坐标区域修饰(部分)
ax=gca;grid on;box off
ax.YMinorTick='on';

% 增添图例
lgd=legend('BBBBBlue','RRRRRRed');
lgd.Location='best';
lgd.FontSize=13;

1.3: 曲线拟合相关

带误差条的线图:

x=1:10:100;
y=[20 30 45 40 60 65 80 75 95 90]; 
err=[5 8 2 9 3 3 8 3 9 3];
errorbar(x,y,err,'LineWidth',1.5)

拟合曲线后绘制绘制带置信区间图像:

x=-3:.25:5; 
y=-0.3*x+3.5.*x.^2-x.^3+20*rand([1,length(x)]); 
[p,S]=polyfit(x,y,3); 
% 计算以p为系数的多项式在 x 中各点处的拟合值。将误差估计结构体指定为第三个输入,
% 以便polyval 计算标准误差的估计值。标准误差估计值在 delta 中返回。

[y_fit,delta]=polyval(p,x,S);
% 绘制原始数据、线性拟合和 95% 预测区间 y±2Δ。
uy=y_fit+2*delta;
dy=y_fit-2*delta;
% 绘制原始数据
plot(x,y,'rx','LineWidth',1.2)
hold on
% 绘制拟合曲线
plot(x,y_fit,'Color',[82,124,179]./255,'LineWidth',1.5)
% 绘制置信区间
plot([x',x'],[uy',dy'],'Color',[82,124,179]./255,'LineWidth',1.2,'LineStyle','--')
fill([x,x(end:-1:1)],[uy,dy(end:-1:1)],[82,124,179]./255,'EdgeColor','none','FaceAlpha',.2)

title('Linear Fit of Data with 95% Prediction Interval')
legend('Data','Linear Fit','95% Prediction Interval') 


2: 抽象多元复合函数偏导数

举个例子:

syms f1(x,y) f2(x,y) F(x,y)
dFdx=diff(F(f1,f2),x)

求解结果:

dFdx =
D([1], F)(f1(x, y), f2(x, y))*diff(f1(x, y), x) + D([2], F)(f1(x, y), f2(x, y))*diff(f2(x, y), x)

不太美观,pretty一下:

pretty(dFdx)


3: 含符号函数的数组的索引

这是对于知乎上一个问题的回答,原问题遇到的情况图片如下(即数组的某行某列的元素无法直接获取):

可以使用formula函数获取每个位置的对象,给个实例:

syms a(t)

g=[a,0;0,1];
gb=formula(g);
gb(1,1)

ans =
a(t)


4: fplot绘图取消渐近线

就举tan(x)的例子,正常fplot函数绘图效果:

fplot(@tan,[-3,3],'LineWidth',1.5)

ShowPoles属性设置为'off'就可以关闭辅助渐近线:

fplot(@tan,[-3,3],'LineWidth',1.5,'ShowPoles','off')


5: 特殊稀疏矩阵创建

之后可能会专门出一期特殊矩阵创建的合集,本期的问题是:构造一个100阶的稀疏矩阵A,要求非零元素有50个,且为1到50

% 10000个数里随机选不重复的50个数
pos=randperm(10000,50);
% 将线性索引转换为下标
[row,col]=ind2sub([100,100],pos);
% 稀疏矩阵创建
A=sparse(row,col,1:50)

运算结果(展示部分):

(96,2) 6
(48,6) 50
(96,9) 42
… …


6: MATLAB 有趣应用

来自CSDN的小问题:
3对情侣参加婚礼,3个新郎为ABC,3个新娘为XYZ,有人想知道究竟谁与谁结婚,于是问其中中的三位,得到如下结果:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚,事后知道这几个人都在开玩笑说的都是假的,那么用程序实现究竟谁与谁结婚;

groom='A','B','C';
bride='X','Y','Z';
 
condition=perms([1,2,3]);% 用数字来表示新娘
 
condition(condition(:,1)==1,:)=[]; %AX的删掉
condition(condition(:,3)==1,:)=[]; %CX的删掉
condition(condition(:,3)==3,:)=[]; %CZ的删掉
 
% 输出结果
for i=1:3
    disp([groomi,'--',bridecondition(i)]) 
end

A–Z
B–X
C–Y


7: 转置与共轭转置

对于实矩阵而言'.'没有任何区别,但是对于符号矩阵和虚数矩阵就不一样了,前者是共轭转置,后者才是转置:

A=[0,3+4i;0,0];

A1=A'
A2=A.'

A1 =
0.0000 + 0.0000i 0.0000 + 0.0000i
3.0000 - 4.0000i 0.0000 + 0.0000i
A1 =
0.0000 + 0.0000i 0.0000 + 0.0000i
3.0000 + 4.0000i 0.0000 + 0.0000i


7: 转数组中的 end

end在数组中不仅仅有代替最后,实际上也重载了每个维度的最大尺度,举个例子,以下的写法在MATLAB中都是可行的实际上:

A=1:10;

b1=A(end:-1:1)
b2=A(end-2)
b3=A(end/2+1)

b1 =
10 9 8 7 6 5 4 3 2 1
b2 =
8
b3 =
6

不能再写了,再写,太长了,就不礼貌了,攒一些下一期再写叭,这一期主要涉及了一些会用到但是第一时间肯能很难搜到用到的函数名的一些绘图方法,建议收藏这篇~然后涉及到一些在知乎上和CSDN上的一些有趣的回答,然后就是开了一个特殊矩阵创建专题的大坑(如果有想看的,有生之年应该能更出来),就这样,技巧篇第三篇[完]

matlab|那些你不得不知道的matlab小技巧(代码片段)

1:预设符号变量类型假设我们编写了如下代码:symsxf=x^3+x^2+9*x+9;solve(f==0)此时求解结果为:ans=-1-3i3i但如果在求解前预设x为实数:symsxassume(x,'real')f=x^3+x^2+9*x 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

嗨嗨嗨第四期来啦:1:将小数转化为分数并提取分子和分母a=2065/2013;b=split(rats(a),'/')c=str2num(b1)d=str2num(b2)b=2×1cell数组’2065’'2013’ \\,c=2065 \\,d=20132:元胞与数组转化2.1࿱ 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

嗨嗨嗨第四期来啦:1:将小数转化为分数并提取分子和分母a=2065/2013;b=split(rats(a),'/')c=str2num(b1)d=str2num(b2)b=2×1cell数组’2065’'2013’ \\,c=2065 \\,d=20132:元胞与数组转化2.1࿱ 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

1:实时脚本控件实时脚本应该大部分人都会用了,但是实时脚本控件应该用的人还不多,怎么说呢,应该算一个更方便调整参数的模块叭。点击图示按钮即可插入各种类型的控件:插入之后双击控件即可设置其属... 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

1:预设符号变量类型假设我们编写了如下代码:symsxf=x^3+x^2+9*x+9;solve(f==0)此时求解结果为:ans=-1-3i3i但如果在求解前预设x为实数:symsxassume(x,'real')f=x^3+x^2+9*x+9;solve(f==0)... 查看详情

网页搜索(百度谷歌)你不得不知道的十个小技巧(代码片段)

网页搜索(百度谷歌)你不得不知道的十个小技巧百度搜索广告多,谷歌搜索搜不到东西,这时候,你得问问自己——你,用对姿势了么?文章目录网页搜索(百度谷歌)你不得不知道的十个小... 查看详情

不得不知的idea实用小技巧(代码片段)

前言人人都说IDEA好,但你知道他的强大之处在哪儿么?今天就来看看,增进日常开发效率的IDEA小技巧。代码编辑复制&粘贴我们知道,最常用的复制粘贴是通过Ctrl+C/V,但如果要针对复制历史进行粘贴... 查看详情

为什么同样的算法,你的程序却一直超时?算法竞赛你不得不知道的小技巧(代码片段)

...同样的算法,你的程序却一直超时?算法竞赛你不得不知道的小技巧  大家好,我是亓官劼(qíguānjié),在【亓官劼】公众号、CSDN、GitHub、B站、华为开发者论坛等平台分享一些技术博文,主要包... 查看详情

那些你不得不知道的网络协议——dhcpdhcp中继vrrp(代码片段)

文章目录前言一、DHCP1.概述2.优点3.工作原理4.配置方法二、DHCP中继1.应用场景2.工作原理3.配置DHCP中继服务器三、VRRP1.概述2.选举机制3.项目详情前言随着网络规模的扩大和网络复杂度的提高,网络配置越来越复杂,计算... 查看详情

软件测试的那些不得不注意特殊字符你都知道吗?

软件测试中不得不注意的特殊字符:“%”符,它在数据库中为通配符,如果客户在搜索框中输入“%”,而程序未对输入的字符进行转义,在系统将解释为一个通配符,列出所有结果,而不是只含... 查看详情

matlab编程的时候有必须要写的东西吗?比如end那些

function后要加end的。一般在一个语句块结束时候要加end。matlab把每个;结束的叫一个语句,但是有的时候几个语句是一个快,比如if后面跟几个语句,像这种情况就要加end了,要不matlab怎么知道if后要执行多少语句。function的定义... 查看详情

记录一个小技巧

新手在刚安装完成MATLAB之后,可能会想要更改自己的默认工作文件夹,有时候设置预设路径后并不起作用,这个时候可以试下下面这个方法。1.右键点击matlab快捷方式,更改起始位置为你想要作为默认的工作文件夹路径,然后点... 查看详情

必看!macos进阶不得不知的实用小技巧

不知道大家对使用苹果电脑的体验如何?您充分利用您的mac了吗?其实macOS上存在着许多快捷方式和技巧可以帮助简化我们的工作流程,提高效率,但是在日常生活中经常被人们忽略或者遗忘。以下是macdown小编整理的一些macOS实... 查看详情

小技巧一些matlab中常用的快捷键使用总结

....Ctrl+t取消注释,并且对多行有效;3.ctrl+i让matlab帮你自动对齐程序;4.使用Ctrl+C可以中止正在运行的程序;5.m脚本文件快速执行:按F5;6.ctrl+ 查看详情

小技巧matlab中进行并行运算仿真加快仿真速度(代码片段)

...xff0c;我们学习了如何统计程序运行的时间。【小技巧】在matlab中如何精确统计一段程序的运行时间_fpga和matlab的博客-CSDN博客_matlab执行一条指令的时间我们先执行如下的程序:clc;clear;closeall;idx=0;tic;forj=1:1:100000000ifmod(j,10... 查看详情

关于网站那些不得不说的小秘密

在互联网高速发展的今天,“网站”这个词频繁地出现在我们的生活中,那么网站是什么呢?其实网站就是向互联网外界展示我们的一种工具。生活中,我们为了向别人展示自己的魅力,所以每天都立志做一个精致的猪猪女孩,... 查看详情

你应该知道的springbootmongodbjpa那些小tip.

官方文档https://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/index.html查询:***************************************************************************mongoTemple查询和修改@AutowiredMongoT 查看详情

matlab|两个较新版本中的坐标区域小技巧(代码片段)

两天不见甚是想念,有的朋友已经注意到我的某乎账号名称已经由hikari同步为slandarer希望大家看到不要惊讶哈,今天带来俩关于坐标区域的小细节,仅仅是小细节,拿来干啥用就看各位的脑洞了。子图自动最优排... 查看详情