在for循环内绘制不同颜色的曲线,用trapz计算积分

21次浏览(过去30天)
我想画出不同温度下黑体光谱发射功率与波长的关系。因此,我为波长分配了一个向量变量,并为不同的温度使用了一个For循环。我的代码如下:
clc
清晰的
%的常量
c0 = 2.998 * 10 ^ 8;%真空中的光速
h = 6.626 * 10 ^ -34;%普朗克常数[J*s]
k = 1.387 * 10 ^ -23;%玻尔兹曼常数[J/K]
σ= 5670 * 10 ^ 8;%斯蒂芬-玻尔兹曼常数[W/(m^2*K^4)]
λ= 0.1 * 10 ^ 6:0.001 * 10 ^ 6:25 * 10 ^ 6;0.1-100μm (0.4-0.7μm可见光)[m]
n = 1;折射率%
T (1) = 0;%太阳表面的温度
c = c0 / n;%光速不是在真空中
在hta = 1. /λ;%波数
v = c /λ;%的频率
i = 0:2:10
如果我< 10
T =我* 500;
其他的
T = 5762;
结束
Ev = 2 *π* h * v ^ 3 * n ^ 2. / (c0 ^ 2 * (exp (h * v / (k * T)) 1));
普朗克定律频率的谱发射幂函数
Elamda = 2 *π* h * c0 ^ 2. / (n ^ 2 *λ,^ 5。* (exp (h * c0. / (n *λ* k * T)) 1));普朗克定律波长的光谱发射幂函数
海尔哥哥= trapz (Elamda)%总发射功率
Eb1 = n ^ 2 *σ* T ^ 4
持有
集(gca),“XScale”“日志”“YScale”“日志”%设置日志比例,而不是默认的线性
轴([0.1 25 100 10^8])%设置轴限制
包含('\bf波长\lambda/μm'
ylabel (\bf黑体光谱发射功率,E_b_\lambda/(W/(m^2*μm))'
标题(“\bf \fontsize{12}黑体发射光谱”
情节(λ* 10 ^ 6 Elamda. / 10 ^ 6,“。b”%如果使用loglog而不是plot,也设置matlab在线性模式下的绘图,而不是对数模式
结束
首先,我希望每条曲线都有不同的颜色。我尝试创建一个for循环,并分配一个字符串变量,每个颜色的排序名称,最终在plot命令中设置,但没有成功。
最后, Eb *和*Eb1 *给出的结果应该大致相同。因为Eb是Elamda曲线下的面积(用trapz计算),Eb1是Elamda的积分(光谱发射功率的积分,所以是总发射功率)。这个问题的出现是因为λ(波长)的阶跃。你能解释一下我怎样才能克服这个问题吗?
非常感谢,乔尔戈斯

接受的答案

马特无花果
马特无花果 2012年9月29日
编辑:马特无花果 2012年9月29日
使用:
持有所有
而不是:
持有
不要让MATLAB把每条曲线都变成蓝色!你告诉MATLAB用字符串'-把每条曲线都变成蓝色。B“当你想要的是”。唯一的。
至于你的积分,你可以使用TRAPZ的两个参数形式:
trapz (x, y)
这将解决缩放问题。真正的问题是你忘记了一个小数。
σ= 5.670 * 10 ^ 8;
综上所述:
clc
清晰的
%的常量
c0 = 2.998 * 10 ^ 8;%真空中的光速
h = 6.626 * 10 ^ -34;%普朗克常数[J*s]
k = 1.387 * 10 ^ -23;%玻尔兹曼常数[J/K]
σ= 5.670 * 10 ^ 8;%斯蒂芬-玻尔兹曼常数[W/(m^2*K^4)]
%热辐射λ 0.1-100?米(0.4 - -0.7吗?M可见光)[M]
λ= 0.1 * 10 ^ 6:0.001 * 10 ^ 6:25 * 10 ^ 6;
n = 1;折射率%
T (1) = 0;%太阳表面的温度
c = c0 / n;%光速不是在真空中
在hta = 1. /λ;%波数
v = c /λ;%的频率
集(gca),“XScale”“日志”“YScale”“日志”%设置日志比例,而不是默认的线性
轴([0.1 25 100 10^8])%设置轴限制
持有所有
包含('\bf波长\lambda/?米的
ylabel ('\bf黑体光谱发射功率,E_b_\lambda/(W/(m^2*?m))'
标题(“\bf \fontsize{12}黑体发射光谱”
流(' \ n \ n % 6 s | % 15 s % 15 s % 10年代\ n“T”“海尔哥哥”“Eb1”“% Diff”
流([repmat (“- - -”1 49)' \ n '])
2 = 0:2:10
如果二< 10
T = 2 * 500;
其他的
T = 5762;
结束
普朗克定律频率的谱发射幂函数
Ev = 2 *π* h * v ^ 3 * n ^ 2. / (c0 ^ 2 * (exp (h * v / (k * T)) 1));
普朗克定律波长的光谱发射幂函数
Elamda = 2 *π* h * c0 ^ 2. / (n ^ 2 *λ,^ 5。* (exp (h * c0. / (n *λ* k * T)) 1));
海尔哥哥= trapz(λ,Elamda);%总发射功率
Eb1σ= n ^ 2 * * T ^ 4;
流(' % 6我| % 15.2 f % 15.2 f % 10.2 f \ n '...
T Eb Eb1、abs (Eb1-Eb) / max ([Eb1 Eb 1]) * 100)
情节(λ* 10 ^ 6 Elamda. / 10 ^ 6,“-”。
结束
流(“\ n \ n”
4评论

登录评论。

更多答案(2)

乔治Papakonstantinou
乔治Papakonstantinou 2012年9月29日
感谢大家的回复和评论!关于sigma的错误是不可接受的……至于trapz命令,我不知道这两个参数模式。你真的帮我节省了很多时间。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!