日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

如何利用matlab画三维图_平面图怎么画(新手如何入门pytorch)

發布時間:2023/12/19 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 如何利用matlab画三维图_平面图怎么画(新手如何入门pytorch) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

本人是一位數學科研工作者,平時的文章采用的是latex編寫,里面圖形的生成主要來自于Matlab(個人對Matlab非常喜歡,感覺上手比較容易,更親民)。對于圖形的處理比較頻繁,而且總會有一些特殊的需求,每次都要上網搜查,或者查以前用過的命令,經?;撕芏鄷r間,實現了一點小要求,事后回想有點得不償失。因此借助這個平臺,記錄自己在Matlab使用過程中碰到的一些問題,給出我找到或者知道的解決辦法,不過方法不是唯一的,也希望廣大網友能有更好的思路提供。后續碰到的問題我也會繼續更新(如果我有時間的話哈)。

Matlab畫三維圖

Matlab畫三維圖形的需求通常是針對二元函數而言的,Matlab畫圖主要采用描點的方法,就是畫出給定點對應的值,然后Matlab會自動把這些點連接起來,就成了很漂亮的一幅圖。所以你給的點越多,畫的圖就越精確。

一個簡單的例子

下面我們以函數 u = s i n ( x ) s i n ( y ) u=sin(x)sin(y) u=sin(x)sin(y)為例,畫三維圖形的代碼如下:

function PF_3D
px=100; py=150; %x軸我布100個點,y方向布150個點
x=linspace(0,2*pi,px); %該函數表示在[0,2*pi]上均勻布px個點
y=linspace(0,2*pi,py);
[X,Y]=meshgrid(x,y); %該函數的作用詳見下文
u=sin(X).*sin(Y); %計算對應點的函數值u %注意點乘
surf(X,Y,u); %畫圖
%mesh(X,Y,u);
end

代碼中的meshgrid命令是生成 m × n m\times n m×n的X,Y兩個矩陣,這里m是y的長度,n是x的長度,結果如下圖Matlab代碼
X就是把x向量復制了m行,每行都一樣。Y就是把y復制了n列,每列都一樣,這樣X,Y矩陣相同位置的值就對應了點的橫縱坐標(總共有 m × n m\times n m×n個點),再由前面代碼計算得到u就得到點對應的函數值。最后可以通過mesh或者surf命令進行畫圖就。mesh和surf是有區別的,但是我也沒去區分,我自己常用的是surf命令,下面看兩個命令畫出圖的不同(左邊是surf,右邊是mesh)

上圖中左邊surf畫出來的圖比較黑那是因為Matlab在圖上畫了黑色網格線,如果要去掉他可以在后面加命令:

shading interp

效果如圖:

如果不喜歡后面坐標平面的那些網格線,也可以加命令:

grid off

就可以讓它消失。

坐標軸的設置

1.從上面的圖可以看出,如果不加干預的話,Matlab畫出你給的橫縱數值范圍的全部圖形,但有些時候我們可能比較關心局部的圖樣,這時候就要設置圖形坐標軸的顯示范圍,只要在surf命令后面加命令:

axis([0,2,0,4,0,1])

axis里面參數分別對應x_min,x_max,y_min,y_max,z_min,z_max,效果如圖

2.有些問題他的圖形是長條形的,如x軸應該很長,y,z軸比較短的,但Matlab總是畫得“方方正正”,這樣就會變得不美觀(肯定有個軸被壓縮),所以此時我們選擇控制軸的相對長度,可以在surf后面加命令:

pbaspect([2,1,1]);

pbaspect后面得三個參數表示橫縱豎得長度比例是2:1:1,最后效果如圖:(我們這個例子不需要讓軸變長,拉長反而不好看,為了演示拼了)

3.隱藏坐標軸。有時候我們保存多張圖,只是為了體現圖形的變化,這樣就不需要每個坐標軸刻度和數值都顯示出來,所以我們要隱藏坐標軸,這個在網上有很多人提供了方案,但是個人覺得比較好用的方案是在surf后面添加如下命令

 t=0:0:0;
 set(gca,'xtick',t); %這兩句話可以去掉x軸的刻度和坐標值
 xlabel('x軸的說明') %這句話可以坐標的下面添加一個說明
 set(gca,'ytick',t); %這兩句話可以去掉y軸的刻度和坐標值
 ylabel('y軸的說明') %這句話可以坐標的下面添加一個說明 
 set(gca,'ztick',t); %這兩句話可以去掉y軸的刻度和坐標值
 zlabel('z軸的說明') %這句話可以坐標的下面添加一個說明 

直接看效果
橫縱豎的刻度和刻度值都消失了,留下了三條邊緣黑線,至于這個怎么去了目前還不知道(是不是可以設置刻度線的顏色成白色就行?)。上面的方案原出處可以在該網頁查看。
4.其他坐標軸設置。還有很多坐標軸的設置可以直接上網查找,或者直接編輯圖片,如何編輯呢?就是直接在生成的圖像窗口點查看-屬性編輯器(我用的2019版本的是這樣,在以前的版本在圖形窗口有個圖標直接點就行了,但是19版本沒有了,感覺沒有了很難受,誰知道怎么添加這個屬性編輯器的快捷圖標到工具欄里)。進入屬性編輯器之后,就會發現里面有好多對圖形的坐標軸的設置,還是挺好用的,但是如果對很多圖同時處理的畫,這樣效率很低,還是能用代碼解決的就用代碼解決。

圖形的視角

有時候我們不需要三維的立體圖,可能只要俯視圖或者側視圖,通過圖形的顏色區別函數值的大小。這時候我們就需要對圖形進行旋轉,一種辦法就是直接對生成圖形進行旋轉(看工具欄上有,或者鼠標移到圖上就有這個旋轉工具跳出來)。第二種辦法就是加命令

view(0,90) %俯視圖xoy平面,x為橫軸
%view(-90,0) %側視圖yoz平面,y為橫軸
%view(0,0) %側視圖xoz平面,x為橫軸

效果如圖

但這樣光有顏色沒有標明顏色對應的值,我們可以在圖形窗口點插入顏色欄圖標(上圖工具欄中的第六個圖標)會在右側出現顏色欄。如果對這個顏色欄不喜歡,可以右擊剛生成的顏色欄選擇標準顏色圖,選自己喜歡的打勾就行(我比較喜歡jet)。上面的過程也可以直接采用如下命令實現:

colorbar  %顯示顏色欄
colormap(jet)  %顏色的風格選擇

效果如下:

圖像的保存

圖像的保存一種就是直接在圖形窗口,文件-另存為就有好多的格式供你選擇,我們寫論文的時候一般要求是eps格式的圖片,因為它是矢量圖,放大不失真,Matlab有提供這個選擇,兩個字完美!這種通過選擇保存圖片的方式非常笨拙,一兩個圖還行,多個圖的產生,或者程序需要長時間運行的不想干等的就比較麻煩,所以還是代碼來解決吧。

我們以一個例子來爽快的解決這個問題。比如我們打算畫函數圖
u = s i n ( k x ) c o s ( k y ) u=sin(kx)cos(ky) u=sin(kx)cos(ky)這里的 k k k的取值[1,2,3],現在要將每個 k k k對應的圖保存到當前路徑的figures文件夾里(這個文件夾要原先要存在),文件命保存成fg1.fig,fg2.fig,fg3.fig(.fig是Matlab圖形保存是默認的后綴名,這樣后綴的圖形可以再由Matlab打開)。給出如下代碼:

function PFS
px=100; py=150; %x軸我布100個點,y方向布150個點
x=linspace(0,2*pi,px); %該函數表示在[0,2*pi]上均勻布px個點
y=linspace(0,2*pi,py);
[X,Y]=meshgrid(x,y); %該函數的作用詳見下文
fid=[pwd,'\figures\']; %這個命令用fid指當前路徑下的figures文件夾
for k=1:3
    u=sin(k*X).*sin(k*Y); %計算對應點的函數值u %注意點乘
    figure(k) %創建第k個圖形窗口
    surf(X,Y,u); %畫圖
    M=int2str(k);%將k轉化成字符存到M中
    saveas(gcf,[fid,'f',M,'.fig']);
end
end

上段代碼的核心:1.創建圖窗 2.保存圖形。先看創建圖窗的命令就是

figure(k) %創建第k個圖形窗口

注意k一定要加括號,沒有括號不行。這個figure命令是k的for循環命令內,這樣就可以隨著k的變化創建不同的圖窗,然后再fiugure(k)后面跟上畫圖命令,圖就會畫到相應的圖窗。這樣就避免了后面畫的圖覆蓋前面畫的圖情形。接著就是保存圖形,我們首先再for循環的外圍給命令

fid=[pwd,'\figures\']; 

這個fid變量是為了保存圖像要保存的路徑,參數pwd是Matlab自帶的表示當前路徑,\figures\就是figures文件夾(因為所有的圖都要保存到這個文件夾里,所以這個命令放在for循環的外面)。在for循環內容我們要給圖像名字起fg1.fig,fg2.fig,fg3.fig,注意名字上的1,2,3其實就是k的值,但是k是個數值(整數值),而文件名應該是個字符串,所以首先先將k轉化成字符串

 M=int2str(k);%將k轉化成字符存到M中

然后再合成一個完整的路徑就是[fid,‘f’,M,’.fig’],這個中括號,中間逗號起到了字符串左右拼接的作用,注意里面已經是字符串了不用加引號,不是的要加。最后通過saveas函數進行圖像保存:

saveas(gcf,[fid,'f',M,'.fig']);

saveas第一個參數gcf我也不知什么意思,是否是獲取圖片的意思,我就當默認處理了。
如果是要將圖片保存成eps格式的畫,要把saveas的參數命令中的’.fig’改成’.eps’,但如果僅僅如此的話,保存最終的eps圖像是黑白的(我的Matlab是這樣,不知道你們是否也是),如果想要是彩色的,要在后面額外加一個參數’psc2’,具體代碼如下:

saveas(gcf,[fid,'f',M,'.eps'],'psc2');

這樣就大功告成。

結束語

如果讀者有碰到一些Matlab的問題也可以留言提問,如果我知道的話也會告知。

文中很多方法是我看書或者搜索到的,如果有侵權請告知,我深表歉意。

總結

以上是生活随笔為你收集整理的如何利用matlab画三维图_平面图怎么画(新手如何入门pytorch)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。