MATLAB R2023a更新了哪些好玩的东西?

2023-10-21 05:20

本文主要是介绍MATLAB R2023a更新了哪些好玩的东西?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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)

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:70plot(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:4plot(t,sin(t-pi/3*(i-1)),'LineWidth',2)
endax2=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:4plot(t,sin(t-pi/3*(i-1)),'LineWidth',2)
endax3=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:4plot(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';

光标能设置的类型不多:


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:3y(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 tableID      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×517   NaN     1     8    1523     5     7    14    164     6   NaN   NaN    2210    12   NaN   NaN     311    18    25     2     9

去除NaN值:

F = fillmissing2(A,"nearest")
F = 5×517     1     1     8    1523     5     7    14    164     6     7    22    2210    12    25     3     311    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;
toctic
A2=randi([0 1],5,"logical");
toc

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


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

这篇关于MATLAB R2023a更新了哪些好玩的东西?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/252186

相关文章

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :