黑体辐射出射度曲线绘制
這是我在做紅外物理小作業時的代碼,雖然很簡單但是我在寫的過程中也是體會到了編程真的是不斷實踐才能有所成 。另外記憶力好對于編程影響也挺大的,雖然此代碼很簡單hh
?
%黑體的光譜輻射出射度的曲線繪制 %圖像盡量與紅外物理課本中67頁的圖3-5保持一致c1 = 3.7415e8;%第一輻射常數c2 = 1.438789e4;%第二輻射常數 for T=500:100:900 % 設置輻射溫度(K)l=0.00001:0.0001:16; % 設置波長范圍及間隔步長M=1e-4.*(c1./(l.^5)./(exp(c2./(l.*T))-1)); % 計算指定溫度光譜輻出度,且此處乘以1e-4是將其中的m化為cm,以與課本中67頁的圖3-5一致plot(l,M,'r') % 繪制光譜輻出度曲線maxM = max(M); % 找出指定溫度最大光譜輻出度lnum=find(maxM==M); % 找峰值波長索引text(l(lnum+100),M(lnum+20),[num2str(T),'K'],...'VerticalAlignment', 'bottom','fontsize',12) % 在指定的合適位置按給定方式標記對應溫度hold on end?一開始考慮用flot畫,不過后來發現要寫5個flot函數,,因為是字符串形式。另外最大值也難求,只是個圖像,不過優點就是方便。
fplot 命令
在實際的應用中,用戶可能并不知道某一個函數隨自變量變化的趨勢,此時若采用plot命令來繪圖,則有可能會因為自變量的取值間隔不合理而使曲線圖形不能反應出自變量在某些區域內函數值的變化情況。
用戶可以將自變量間隔取得足夠小以體現函數值隨自變量變化的精確曲線,但是這樣會使數據量變大。
fplot 命令通過函數來取得繪圖的數值點矩陣。該命令通過內部的自適應算法來動態決定自變量的取值間隔,當函數值變化緩慢時,間隔取大一點;變化劇烈時(即函數的二階導數很大),間隔取小一點。
?
在看text函數的參數的文檔時發現要點擊input arguments中x的verticalalignment然后進入textproperties頁面才能看見還有verticalalignment這個參數,,不知道為什么這么設計。
%以下繪制過不同黑體輻射出射度曲線最大值的虛線xm = zeros(1,411);ym = zeros(1,411);%預定義最大值變量及其維數 for T=500:910 % 設置輻射溫度(K)l=0.001:0.001:16; % 設置波長范圍及計算步長M=1e-4.*(c1./(l.^5)./(exp(c2./(l.*T))-1)); % 計算指定溫度光譜輻出度,且此處乘以1e-4是將其中的m化為cm,以與課本中67頁的圖3-5一致maxM = max(M); % 找出指定溫度最大光譜輻出度lnum=find(maxM==M); % 找峰值波長索引ym(T-499) = maxM;xm(T-499) = l(lnum);%對最大值坐標分量依次賦值 end plot(xm,ym,'--r') % 繪制過不同溫度下黑體光譜輻出度曲線最大值的曲線,并以虛線表示set(gca,'XTick',[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) %設置橫坐標點 xlabel('波長\lambda / \mum') % 橫坐標名稱及單位 ylabel('光譜輻射出射度M_{\lambda} / (W/(cm^{2}\cdot\mum)') % 縱坐標名稱及單位 title('500-900k部分黑體的光譜輻射出射度曲線','fontsize',10) grid on由于MATLAB對矩陣的單個元素循環時速度很慢,如果把循環向量化,不僅能縮短程序的長度,而且能提高程序的執行效率。也就是程序優化方法之一。程序優化要對語言的特性熟悉。
另外向量預分配也是優化方法之一:
Matlab 采用內存中一塊連續的空間來存儲向量和矩陣數據,而不是用鏈表。這就意味著你每給向量或矩陣增加一元素,Matlab需要尋找一塊足夠大的內存區域來存儲 這個擴大后的向量或矩陣,然后復制現有的數據到新的內存區域。在循環中增加向量或矩陣元素的元數是允許的,但并不是明智之舉,而應該是一次性分配向量或矩 陣的大小,或一次性重定義尺寸。
?
?
?
總結
以上是生活随笔為你收集整理的黑体辐射出射度曲线绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么大部分牛人会选择通达信交易接口?
- 下一篇: 分享一个PPT模板