利用Matlab绘制函数曲线图案例:绘制黑体辐射出射度随波长变化图

最近作业需要用到Matlab制图,到敲代码的环节磕磕绊绊,已经忘却这门语言的很多细节,于是借此机会复现了一些物理学中常见的曲线图像,比如不同温度条件下的黑体辐射出射度随波长的变化图。

图片来源:网络

黑体辐射出射度的计算公式如下:

---------------------------------------------------------------------------------------------------------------------------------根据公式可以按步骤写出下面的代码:

1. 声明各个变量的数值,注意单位

wavelength = (0:1e-15:3e-12)'; % 波长,单位微米,为3000*1的数组
wavelength_std = wavelength/1e-6; % 标准单位化为米,为3000*1的数组
wavelength_temprature = wavelength_std.*(5000:1000:10000); % 波长数组和温度数组相乘,生成3000*6的数组

h = 6.626e-34; % 普朗克常数,单位Js
k = 1.38e-23; % 波尔希曼常数,单位J/K
c = 3e8; % 光速,单位m/s

2. 分步骤输入计算公式注意数组计算代码书写过程中需要用“.*”、“./”、”.\“的地方

M1 = (2*pi*h*c^2)./(wavelength.^5); 
M2 = h*c./(k.*wavelength_temprature);
M3 = exp(h*c./(k*wavelength_temprature))-1;
M4 = (2*pi*h*c^2)./(wavelength_std.^5).*((exp(h*c./(k*wavelength_temprature))-1).^(-1));
M = M4./1e14;

请注意:上方M4即为最后的公式,单位是瓦/立方米,但是最后将函数M4除以10的14次方,是因为代入温度后的结果数据庞大,为了便于画图,将数据缩减倍数,得到的最后函数M的值在20以内。

3. 写绘制折线图的代码。

figure
plot(wavelength,M,'LineWidth',3);
axis([0,3e-12,0,14]);
set(gca,'xticklabel',{(0:0.5:3)});
set(gca,'FontName','Times New Roman','FontSize',16);
xlabel('\bf\it{\lambda (10^{-12}\mum)}','FontSize',20);
ylabel('\bf\it{M_{\lambda,T} (10^{14}W/m^3)}','FontSize',20);
title('\bf{黑体辐射出射度随波长变化曲线图}','FontName','STFangSong','FontSize',30);
text(0.4e-12,12,'\bfT=10000K','FontSize',14); %1
text(0.4e-12,7.5,'\bfT=9000K','FontSize',14); %2
text(0.45e-12,4,'\bfT=8000K','FontSize',14); %3
text(0.35e-12,2.5,'\bfT=7000K','FontSize',14); %4
text(0.4e-12,1.3,'\bfT=6000K','FontSize',14); %5
text(0.43e-12,0.2,'\bfT=5000K','FontSize',14); %6
hold on

从上到下的函数依次表示:调出图形窗口,plot函数绘制两个数组的图像,设置图像的坐标x和纵坐标y范围,重写横坐标的刻度标注,设置横纵坐标刻度标注的字体和字体大小,设置横纵坐标标注,设置标题,在图中相应位置添加温度的标注,hold on表示接下来将继续在图片上添加曲线。

4. 寻找wavelength_temprature数组中每一列(每一列表示不同温度)下的数组的最大值和最大值对应的行索引。

%% 寻找最大值
[matrix_m,index] = max(M,[],1); 

5. 根据每一列最大值和对应的行数计算对应的波长,最大值为y_max数组,对应的波长记为x_max数组,两者通过plot函数绘制变化图线。

%% 绘制变化曲线图
y_max = matrix_m;
x_max = 1e-15*index;
% x_smooth = spcrv([[x_max(1) x_max x_max(end),])
plot(x_max,y_max,'k--','LineWidth',1);

图中注释是因为本想将折线平滑,但没看懂讲解,所以没有添加正确代码。

网络搜索Matlab折线图平滑即可查询函数。

---------------------------------------------------------------------------------------------------------------------------------最后将代码汇总运行,即可绘制出正确图像,效果图如下:

#########

%% 寻找最大值
[matrix_m,index] = max(M,[],1); 

%% 绘制变化曲线图
y_max = matrix_m;
x_max = 1e-15*index;

%插值函数,平滑曲线
x_max2 = linspace(min(x_max), max(x_max));
y_max2 = interp1(x_max, y_max, x_max2, 'cubic')
plot(x_max2, y_max2, 'k--', 'LineWidth', 1);

% ,'k--','LineWidth',1
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值