5000个matlab常见问题锦集的雄关路(001)

  • 2019 年 12 月 26 日
  • 筆記

为了方便各位小伙伴快速了解matlab编程中常遇问题,公众号特地推出matlab问题锦集系列,力争收集5000个常见matlab编程问题,每期推送10至30个不等的问题及解答方案,希望对大家的matlab学习有帮助。

若无特殊说明,所推送问答均来自于MATLAB AnswersStack Overflowmatlab中文论坛matlab中国论坛matlab技术论坛小木虫CSDN以及百度贴吧等不再作专门的参考资料来源声明

现在就开5000个matlab问题收集的第一步,本期推送12个问题!


1、如何修改 MATLAB 启动时的工作路径?

至少有以下三种方法:

1.MATLAB 主页->预设->常规,右侧可以设置启动时的工作路径。

2.建立 startup.m 文件,在文件中写入命令:

cd C:matlab_startup

并将文件放到 MATLAB 的搜索路径(path)下,一般会选择MATLAB安装路径toolboxlocal

3.这个方法仅对 Windows 操作系统,且通过双击快捷方式启动 MATLAB有效。右键快捷方式,选择属性,并在 Start in 中设置启动时的工作路径。

需要注意的是,上述三种方法互有冲突,因此仅建议通过一种方式进行设置。

2、如何在新版本的 MATLAB 中绘制多边形?

在旧版本中,一般用 impoly 函数绘制多边形,在新版本(R2018b之后)中可以用 drawpolygon

roi = drawpolygon('Color','r');

3、如何改变坐标轴刻度线与文字的颜色?

plot(1:10, rand(1,10),'ko-');  ax = gca;  set(ax,'XColor','b');  ax.XTickLabel = arrayfun(@(ii) ['color{red}', ax.XTickLabel{ii}], [1:1:length(ax.XTickLabel)], 'UniformOutput',false);

4、如何用plot在绘制图形的同时添加小三角、矩形、菱形等标志?

标记符    点形  +          加号  o          圆圈  *          星号  .          实心点  x         叉号  s         正方形  d         钻石形  ^         上三角形  v         下三角形  >        右三角形  <        左三角形  p        五角星形  h        六角星形

5、MATLAB 中如何控制坐标轴刻度线标签、范围和坐标轴刻度线位置?

可以使用 xlim、ylim 和 zlim 函数控制轴范围。对这些函数的传参数形式为:[最小值,最大值]。例如:

x = linspace(0,2*pi);  y = sin(x);  plot(x,y);  xlim([0 2*pi])  ylim([-1.5 1.5])

可以使用 xticks、yticks 和 zticks 函数控制刻度线沿轴的位置。将刻度线位置指定为单调递增的矢量。这些值不需要均匀分布。例如:

xticks([0 pi 2*pi])  yticks([-1 0 1])

若要控制与每个刻度线关联的标签,请使用 xticklabels、yticklabels 和 zticklabels 函数。使用字符向量的元胞数组指定标签。如果不希望显示刻度标签,请指定空元胞数组{}。若要在标签中包含特殊字符或希腊字母,请使用 Tex 标记,如 pi。例如:

xticklabels({'0','pi','2pi'})  yticklabels({'min','y = 0','max'})

6、请问一下,如何找到一个数组中最大值所处的位置呢?

A=magic(3);  value=max(A(:));  [row col]=find(value==A);

7、在MATLAB中,如何计算两个矢量之间的夹角?

可以使用 cross 函数计算两个矢量的外积(即叉乘或向量积),使用 dot 函数计算内积(即点乘),然后使用 atan2d 函数计算正切值。例如:

u = [1 2 0];  v = [1 0 0];  ThetaInDegrees = atan2d(norm(cross(u,v)),dot(u,v));

还可以将使用夹角的余弦值进行计算,这在夹角较小时计算可能有误差。例如:

u = [1 2 0];  v = [1 0 0];  CosTheta = dot(u,v)/(norm(u)*norm(v));  ThetaInDegrees = acosd(CosTheta);

8、MATLAB 为什么报错“未定义函数或变量” ?

MATLAB 不将指定的字符串识别为 MATLAB 路径上的函数的名称或变量。可能的原因包括:

1)键入函数或变量名时的拼写错误(例如,当您要键入小写字母 l 时键入了数字1)。同时,MATLAB 的新版本提供“是不是想输入:”来解决这些拼写错误。

2)函数或变量名的错误大小写。同时,MATLAB 的新版本提供“是不是想输入:”来解决这些拼写错误。

3)改变了路径,使得被调用的函数不在 MATLAB 路径下。

4)使用未获得许可的功能或未安装的工具箱。

5)调用对象的方法,而没有指明对象名,仅给出了方法名。

6)调用在其他操作系统平台编译的 MEX 函数。

解决方法:

验证未定义的函数或变量是否可见(位于路径或当前工作区中),以及它是否在执行此代码行之前已经定义。

如果确定变量或函数存在,请验证函数或变量名的大小写。如果未定义的标识符是一个函数,则 which函数可以帮助您验证它对发生错误的函数是否可见。如果您的 MATLAB 搜索路径有问题,请运行以下 MATLAB 命令, 然后重新启动 MATLAB。

9、MATLAB 中,如何在一组子图上插入标题?

在 MATLAB R2018b 中,可以通过 sgtitle 函数实现。参考: https://www.mathworks.cn/help/releases/R2018b/matlab/ref/sgtitle.html

对于早期版本,请查看 File Exchange 上的函数: https://www.mathworks.cn/matlabcentral/fileexchange/3218-mtit-a-pedestrian-major-title-creator

10、MATLAB 如何绘制具有给定半径和中心坐标的圆?

以下是用来实现该功能的 MATLAB 函数:

function h = circle(x,y,r)  hold on  th = 0:pi/50:2*pi;  xunit = r * cos(th) + x;  yunit = r * sin(th) + y;  h = plot(xunit, yunit);  hold off

另一种方法是使用 rectangle 函数:

function h = circle2(x,y,r)  d = r*2;  px = x-r;  py = y-r;  h = rectangle('Position',[px py d d],'Curvature',[1,1]);  daspect([1,1,1])

如果使用 MATLAB R2012a 或者之后版本的 Image Processing Toolbox,可以用 viscircles 函数:

viscircles(centers,radii)

11、如何从 MATLAB 图形中提取数据?

如果图形存储在文件中,如 example.fig,则使用 openfig 函数打开图形文件。将 Figure 对象分配给变量fig。

fig = openfig('example.fig');

如果图片已经打开,使用 gcf 函数获取 Figure 对象的属性并分配给 fig。

fig = gcf;

可以使用 Children 属性, 也可以使用 findobj 函数访问绘制的图形对象的数据。

通过 Children 属性访问绘制的图形对象。Axes 对象是 Figure 的子对象。数据等通常是 Axes 的子对象。

axObjs = fig.Children  dataObjs = axObjs.Children

出现在命令窗口中的 dataObjs 数组包含数据信息。不同的图形对象以不同的方式存储数据。例如,Line对象将数据存储在 XData、YData 和 ZData 中。如果 dataObjs 中的第一个元素是 Line 对象, 则使用此代码访问其数据。

x = dataObjs(1).XData  y = dataObjs(1).YData  z = dataObjs(1).ZData

12、在MATLAB的plot中,如何添加两行的标题和坐标注释?

通过 cell(元胞数组)来添加多行文本。请参考:

plot(1:10)  title({'First line';'Second line'})  xlabel({'First line';'Second line'})

以上就是今天的全部内容,欢迎各位小伙伴将自己平时matlab编程遇到的问题以及解决方法推荐给小编,或者在推文下方留言,让大家一起学习,共同进步!