代码编织梦想

R2023a来啦!!废话不多说看看新版本有啥有趣的玩意和好玩的特性叭!!把绘图放最前面叭,有图的内容看的人多。。

1 区域填充

可以使用xregion及yregion进行区域填充啦!!

x = -10:0.25:10;
y = x.^2;
plot(x,y)
xregion(-5,5)

Count = randn(1,1000);
histogram(Count)
xr = xregion([-2 1],[-1 2]);

Count = randn(1,1000);
histogram(Count)
xr = xregion([-2 1],[-1 2]); 

xr(1).FaceColor = "r";
xr(1).DisplayName = "Low";
xr(2).FaceColor = "#0073FD";
xr(2).DisplayName = "High";
legend

x = 0:0.1:50;
y = 2*x .* (sin(x) + cos(2*x));
plot(x,y)
yregion(0,106)

再提一句哈哈哈几个月前在《MATLAB | 两个较新版本中的坐标区域小技巧》这篇里,当时是R2022b出了tightPosition这个函数,我推送里说可以用这个函数实现个类似区域覆盖的功能,结果没想到下一版就接着就出了。https://mp.weixin.qq.com/s/E7bJ0-o4qwAH87yyD0CuQg


2 新配色sky

这么多年了终于出了个新配色,这个就是heatmap函数使用的默认配色:

展示一下叭:

X=rand(10);
CF=contourf(X);
colormap(sky)
colorbar 

X=linspace(0,1,200)';
CL=(-cos(X*2*pi)+1).^.2;
r=(X-.5)'.^2+(X-.5).^2;
surf(X,X',abs(ifftn(exp(7i*rand(200))./r.^.9)).*(CL*CL')*30,'EdgeColor','none')

colormap(sky)
light
material dull
view(59.1823,56.1559)
colorbar

% 修饰一下
ax=gca;
ax.Projection='perspective';
ax.LineWidth=.8;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.ZMinorTick='on';
ax.GridLineStyle=':';
ax.FontName='Cambria';

t=linspace(0,5*pi,200); 
C=sky(70);
ax=gca;hold on 
for i=1:70
    plot(t,sin(t+i.^2./700)./(10+i).*20+i.*.1,'Color',C(i,:),'LineWidth',2);
end

% 坐标区域修饰
ax.YLim=[0,7];
ax.XLim=[0,5*pi];
ax.YTick=0:.5:5;
ax.XTick=0:1:15;
% ax.XGrid='on';
ax.YGrid='on';
ax.GridLineStyle='-.';
ax.LineWidth=1.2;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.Box='on';
ax.FontName='Cambria';
ax.FontWeight='bold';
ax.FontSize=12;


3 tiledlayout水平或竖直布局

不需要预定义几行几列,设置为horizontalvertical之后,就一直往上加就完事:

tiledlayout("horizontal")
x = 1:5;
nexttile
plot(x)
nexttile
bar(x);
nexttile
contourf(peaks)


4 网格粗细

网格粗细可以不和坐标轴粗细相同啦,通过设置GridLineWidth属性设置网格粗细:

t=linspace(0,4*pi,300);
ax1=axes(gcf,'Position',[0+.05,.05,1/2-.05,.95]);
grid on;hold on;box on;axis tight
ax1.LineWidth=4;
plot(t,sin(t),'LineWidth',2)


ax2=axes(gcf,'Position',[1/2+.05,.05,1/2-.05,.95]);
grid on;hold on;box on;axis tight
ax2.LineWidth=4;
ax2.GridLineWidth=1;
plot(t,sin(t),'LineWidth',2)


5 轴标签旋转

轴标签可以旋转了,比如编写了如下代码:

plot([0 3 1 6 4 10],'LineWidth',2)
ylab = ylabel("Y Data");

ylab.Rotation = 0;


6 颜色与线形

可以同时变,可以线条先变可以颜色先变,通过设置LineStyleCyclingMethod 属性来控制:

  • “withcolor”— 同时进行
  • “beforecolor”— 先线条循环
  • “aftercolor”— 先颜色循环
t=linspace(0,2.5*pi,200)+1*pi;

tiledlayout("horizontal",'TileSpacing','tight','Padding','tight')
ax1=nexttile();hold on;axis tight;box on
ax1.Title.String='withcolor';
ax1.Title.FontWeight='bold';
ax1.Title.FontSize=25;
ax1.LineWidth=1;
ax1.LineStyleOrder={'-','--',':'};
ax1.LineStyleCyclingMethod='withcolor';
for i=1:4
    plot(t,sin(t-pi/3*(i-1)),'LineWidth',2)
end

ax2=nexttile();hold on;axis tight;box on
ax2.Title.String='beforecolor';
ax2.Title.FontWeight='bold';
ax2.Title.FontSize=25;
ax2.LineWidth=1;
ax2.LineStyleOrder={'-','--',':'};
ax2.LineStyleCyclingMethod='beforecolor';
for i=1:4
    plot(t,sin(t-pi/3*(i-1)),'LineWidth',2)
end

ax3=nexttile();hold on;axis tight;box on
ax3.Title.String='aftercolor';
ax3.Title.FontWeight='bold';
ax3.Title.FontSize=25;
ax3.LineWidth=1;
ax3.LineStyleOrder={'-','--',':'};
ax3.LineStyleCyclingMethod='aftercolor';
for i=1:4
    plot(t,sin(t-pi/3*(i-1)),'LineWidth',2)
end


7 通过addStyle往app列表框增添图标

fig = uifigure('Position',[200,200,200,200]);
lb = uilistbox(fig,"Items",["Peppers","Nebula","Street"],'Position',[0,0,200,200]);

s1 = uistyle("Icon","peppers.png");
s2 = uistyle("Icon","ngc6543a.jpg");
s3 = uistyle("Icon","street1.jpg");

addStyle(lb,s1,"item",1);
addStyle(lb,s2,"item",2);
addStyle(lb,s3,"item",3);


8 app uistack排序

创建五个具有不同标题和背景颜色的重叠面板。

f = figure;

a = uipanel(f,'Title','A','BackgroundColor','white');
b = uipanel(f,'Title','B','BackgroundColor','cyan');
c = uipanel(f,'Title','C','BackgroundColor','green');
d = uipanel(f,'Title','D','BackgroundColor','yellow');
e = uipanel(f,'Title','E','BackgroundColor','magenta');

a.Position = [0.35 0.50 0.30 0.35];
b.Position = [0.18 0.40 0.30 0.35];
c.Position = [0.08 0.21 0.30 0.35];
d.Position = [0.25 0.33 0.32 0.35];
e.Position = [0.30 0.27 0.30 0.35];

figChildren = f.Children
% figChildren = 
% 
%   5×1 Panel array:
% 
%   Panel    (E)
%   Panel    (D)
%   Panel    (C)
%   Panel    (B)
%   Panel    (A)

将c d上移

comp = [c d];
uistack(comp,'up');

figChildren = f.Children
% figChildren = 
% 
%   5×1 Panel 数组:
% 
%   Panel    (D)
%   Panel    (C)
%   Panel    (E)
%   Panel    (B)
%   Panel    (A)

当然uistack可以设置参数为up,down,top,bottom


9 uipanel border

通过BorderColor,BorderWidth可设置uibuttongroup及uipanel边框颜色和粗细:

f = figure();

a=uipanel(f,'Title','A','BorderColor',[.8,0,0],'BorderWidth',8);
b=uipanel(f,'Title','B','BorderColor',[0,0,.8],'BorderWidth',8);

a.Position = [0.2 0.4 0.7 0.4];
b.Position = [0.1 0.2 0.5 0.4];


10 uiimage 动图及链接

fig = uifigure('Position',[100,100,300,300]);
im = uiimage(fig,'ImageSource','test.gif','Position',[0,0,200,200]);
im.ScaleMethod = 'scaledown';


将图像配置为点击时打开链接:

fig = uifigure;
im = uiimage(fig);
im.ImageSource = "membrane.png";
im.URL = "https://www.mathworks.com/";
im.Tooltip = "Go to www.mathworks.com";


11 app uifigure 鼠标指针

uifigure 鼠标指针的鼠标指针可以自定义啦。

fig = uifigure;
fig.Pointer='watch';

光标能设置的类型不多:

但也能自定义为一些其他形状,看看这篇叭~:https://mp.weixin.qq.com/s/wEAOEVUNEsIDysWRce29kg


12 默认不再安装本地文档

就是说本地默认不会再存储函数的介绍文档了,一些函数介绍需要联网才能看,以下在断网的时候分别在R2022b及R2023a命令行窗口运行:

doc plot

可以看到R2022b能够调出本地文档,R2023a只会提醒你没联网,有好有坏吧,好处是能减小MATLAB的安装大小,统计了一些常用的包都不安装文档可以节省10G左右空间,我装R2023a总体积15G左右。

当然如果经常在没网的地方默默敲代码,还是可以手动装文档的:https://ww2.mathworks.cn/help/install/ug/install-documentation.html


13 实时编辑器更新

实时编辑器增添了文件选择控件:

隐藏代码时对齐部分控件,这确实是没啥用的小更新,比如我控件名字BBBBBBB比A长很多也会自动对齐:


14 代码自动修复

逻辑复杂的代码就别想了,官方给的简单例子:假设编写了名为exampleScript.m的m文件,其中内容为:

x = [1 2 3]
for n = 1:3
    y(n) = x
end

命令行窗口运行如下代码就能获得问题列表:

issues=codeIssues("exampleScript")

"exampleScript.m" info auto "在语句后添加分号以隐藏脚本输出。" 
"exampleScript.m" info manual "变量似乎要更改脚本中每个循环迭代的大小。请考虑对速度进行预分配。"
"exampleScript.m" info auto "在语句后添加分号以隐藏脚本输出。"

只有标注auto的才能自动修复:
再在命令行窗口运行如下代码:

fix(issues,"NOPTS")

emmmmmmmmm发现MATLAB自动帮你加了俩分号哈哈哈哈哈哈,关于没预定义y管都没管。。。。。目前来看估计得等好几代后才会有真正有用的自动代码修复。。。


15 获取所有元素的组合

一个非常有用的函数combinations

ID = ["A" "B" "C"];
color = ["red" "blue" "green"];
sz = ["small" "large"];

T = combinations(ID,color,sz)

运行结果:

T = 18×3 table
    ID      color       sz   
    ___    _______    _______

    "A"    "red"      "small"
    "A"    "red"      "large"
    "A"    "blue"     "small"
    "A"    "blue"     "large"
    "A"    "green"    "small"
    "A"    "green"    "large"
    "B"    "red"      "small"
    "B"    "red"      "large"
    "B"    "blue"     "small"
    "B"    "blue"     "large"
    "B"    "green"    "small"
    "B"    "green"    "large"
    "C"    "red"      "small"
    "C"    "red"      "large"
    "C"    "blue"     "small"
    "C"    "blue"     "large"
    "C"    "green"    "small"
    "C"    "green"    "large"

16 数据去除NaN

一个很有用的函数fillmissing2,可以将二维数据中NaN部分数值用周围数的插值替代:

A = magic(5);
A(1,2) = NaN;
A(3:4,3:4) = NaN

构建的矩阵展示:

A = 5×5
    17   NaN     1     8    15
    23     5     7    14    16
     4     6   NaN   NaN    22
    10    12   NaN   NaN     3
    11    18    25     2     9

去除NaN值:

F = fillmissing2(A,"nearest")
F = 5×5
    17     1     1     8    15
    23     5     7    14    16
     4     6     7    22    22
    10    12    25     3     3
    11    18    25     2     9

官方给了一个填充效果可视化的例子:

n = 51;
[x,y] = meshgrid(linspace(-2,2,n));
f = x.^2-y.^2;

NaNPercent = 0.05;
randEntries = randperm(n^2,round(NaNPercent*n^2));
f(randEntries) = NaN;

F = fillmissing2(f,"linear");
x = reshape(x,n^2,1);
y = reshape(y,n^2,1);
f = reshape(f,n^2,1);
F = reshape(F,n^2,1);

filledData = scatter3(x,y,F,24,"red","filled",...
                      MarkerEdgeColor="black");
hold on
originalData = scatter3(x,y,f,24,"green","filled",...
                        MarkerEdgeColor="black");
legend([filledData,originalData],...
       {"Filled","Original"},Location="north")

当然一维补全也有fillmissing函数:

x = [-4*pi:0.1:0, 0.1:0.2:4*pi];
A = sin(x);

A(A < 0.75 & A > 0.5) = NaN;

[F,TF] = fillmissing(A,'linear','SamplePoints',x);

scatter(x,A,'filled')
hold on
scatter(x(TF),F(TF),'filled')
legend('Original Data','Filled Data')


17 随机逻辑数组构建

目前来看还是比较鸡肋,以下两种写法说实话区别不大,可能也就速度略快:

tic
A1=randi([0 1],5)>0;
toc

tic
A2=randi([0 1],5,"logical");
toc

小数组时新写法创建速度是旧写法的两倍,但是对于比较大的数组来说,俩速度几乎完全一致。


以上是本次更新中比较有趣的内容,更的属实不少,反正才15G左右,这不赶快进行一波新版本的安装?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/slandarer/article/details/129631363

有哪些不错的数学、物理类的「闲书」?-爱代码爱编程

老魔王  ,数据分析 383 人赞同 以下的几本书,有过初等微积分,线性代数的基础,阅读起来都能有一定收获. 1.All the Mathematics You Missed: But Need to Know for Graduate School 可以在线

半夜看小说伤眼睛怎么办?-爱代码爱编程

不少人喜欢看小说,尤其喜欢把小说的txt文件下载到手机,然后一直看到睡觉前。   一边看一边劝自己:看完了这段马上就睡觉。然而看到精彩的地方终究是欲罢不能。   关了灯躺在床上继续看,直到困的握不住手机,pia的砸到自己脸上才睡着。   第二天早上,感觉眼睛干涩、灼热、异物感、看东西模糊,还伴有头痛和颈椎不适。   信誓旦

matlab入门学习资料_hjh200507609的博客-爱代码爱编程_matlab学习资料

作者:3mjun 链接:https://www.zhihu.com/question/19904418/answer/105926809 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 选择Matlab参考书最关键的一点,就是参考书和自己目前能力要相匹配。选的参考书过于简单或过于困难,

matlab入门相关_weixin_34034670的博客-爱代码爱编程

打开MATLAB: cd /usr/local/MATLAB/R2014a/bin ./matlab 接下来可以设置环境变量: sudo vi /etc/profile 在文件尾添加:export PATH=/usr/local/MATLAB/R2014b/bin:$PATH 保存并退出后使设置生效source /etc/prof

用matlab绘制的一个单词“love”的图像_weixin_34185560的博客-爱代码爱编程

2019独角兽企业重金招聘Python工程师标准>>> APEC放假最后一天啦,在家里鼓捣MATLAB,突然想到用MATLAB里的函数图像画一个好玩的东西。想来想去,就画成了这个样子: 这个图像是由以下四个方程的图像构成的 1)y=1/(x+4.5)-4.5 2)((x+2)/1.5)^2+(

Matlab经验集-爱代码爱编程

前言和目录 预留坑位 此为笔记文档 这里会记下一些没有填上的坑 patch属性是什么 属性是什么 二维和三维的隐函数怎么表示 子级和父级是什么 特殊的数据可视化方法,如heatmap、imagesc 元胞 多文件编程设计 syms、函数句柄是什么 阅读注意 里面百度文库的链接需要打开flash再进入 本文使用的M

MATLAB中使用机器人运动学1-爱代码爱编程

1.2维,3维空间姿态描述 2维 函数效果T=se2(x,y,theta)代表(x,y)的平移和theta角度的旋转trplot2(T)画出相对于世界坐标系的变化TT=se2(x,y,theta)代表(x,y)的平移和theta角度的旋转例 T = se2(1,2,pi/2) % 弧度制 x方向平移1,y平移2,逆时针转60度 T = se2(1,2

有哪些值得推荐的数据可视化工具?-爱代码爱编程

作者:文兄 链接:https://www.zhihu.com/question/19929609/answer/133825589 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 谢邀。本答案提要:1.plotly 2.R ggplot23.无需编程语言的工具(7个)4.基于JavaScript实现的工具(8个)5.基于

关于求解微分方程——初学Matlab里的 ODE求解器-爱代码爱编程

学习背景         最近想挖掘一下自己项目的理论深度,于是找到了老师。在老师的建议下,我们开始了漫长的研读老师的论文的旅程(论文名:Optimal Design of Adaptive Robust Control for Fuzzy Swarm Robot Systems 模糊群自适应鲁棒控制的优化设计机器人系统)。这篇文章写的是关于群体智能控制

好玩且实用,使用 python实现录音功能-爱代码爱编程

今天我们来介绍一个好玩且实用的东西,我们使用python来实现一个录音的功能,废话不多说,让我们直接开始。 安装 使用 PIP 安装 PvRecorder: pip3 install pvrecorder 查找