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編程遇到的問題以及解決方法推薦給小編,或者在推文下方留言,讓大家一起學習,共同進步!