在MATLAB中复制文章的图形
我想从中复制一个数字。更具体地说,我想复制图4,我相信它是等式9的表示形式 到目前为止,我已经提出了以下代码:在MATLAB中复制文章的图形,matlab,Matlab,我想从中复制一个数字。更具体地说,我想复制图4,我相信它是等式9的表示形式 到目前为止,我已经提出了以下代码: % implementing equation 9 and figure 4 step = 0.01; t = 1:step:3600; d = 3; % dimension N = 8000; % number of molecules H = 0.01; % H = [0.01,0.1,1] is in mol/micromete
% implementing equation 9 and figure 4
step = 0.01; t = 1:step:3600;
d = 3; % dimension
N = 8000; % number of molecules
H = 0.01; % H = [0.01,0.1,1] is in mol/micrometer^3
H = H*6.02214078^5; % hence I scaled the Avogadro's number (right or wrong?)
D = 10; % diffusion coefficient in micrometer^2/sec
u(1) = 1./(1.^(d/2)); % inner function in equation 9; first pulse
for i = 2:numel(t)/1000
u(i) = u(i-1)+(1./(i.^(d/2))); % u-> the pulse number
lmda(i) = (1/(4*pi*D))*((N/(H)).*sum(u)).^(2/d);
end
figure;plot(lmda)
但我无法复制它
等式9
有关参数的详细信息,请参阅上述代码。作者确实提到等式9中的总和是Reimann Zeta级数。不知道这是否与结果有关 图4是我试图复制的: 有人能告诉我我犯的错误吗 注:这不是家庭作业。问题1:你认为你在这条线上按阿伏伽德罗的数字缩放吗
H = H*6.02214078^5;
事实上,您正在按大约7920=6.022^5的比例缩放。如果您想按阿伏伽德罗数进行缩放,则应执行以下操作:
H = H * 6.02214078e23 % = 6.02214078 * 10^23 : the Avogadro number
问题2:您不是针对t
进行绘图,而是针对样本编号进行绘图,而样本编号实际上没有意义(除非您的t
恰好在整数秒内)。从循环中删除/1000
for i = 2:numel(t)
% ...
end
% Then plot
plot(t, lmda)
在这个阶段,我们可以看到一些事情确实出了问题。现在我们按照正确的Avo数进行缩放,数量级已经过时了。我建议您相信图4中的H
和等式9中的H
是相同的H
,如果作者的意图有所不同,这将非常令人困惑
在此基础上,我建议您使用错误的D
、N
,或脉冲间隔时间。我在下面的代码中设置了更清晰的脉冲计时。我还使用矢量化简化了您的循环,并删除了H
缩放
如果将其调整为dtPulses=100
以及D=100
,则曲线图几乎相同。你可能需要考虑这两个数字如何影响结果…
% implementing equation 9 and figure 4
d = 3; % dimension
N = 8000; % number of molecules
D = 100; % diffusion coefficient in micrometer^2/sec
dtPulses = 10; % Seconds between pulses
tPulses = 1:dtPulses:3600; % Time array to plot against
nt = numel(tPulses);
i = 1:nt; % pulse numbers
u = 1 ./ (i.^(d/2)); % inner function in equation 9: individual pulse
for k = 2:nt % Running sum
u(k) = u(k-1)+u(k);
end
% Now plot for different H (mol/micrometer^3)
H = [0.01, 0.1, 1];
figure; hold on; linestyles = {':k', '--k', '-k'};
for nH = 1:3
lmda = ((1/(4*pi*D))*(N/H(nH)).*u).^(2/d);
plot(tPulses, lmda, linestyles{nH}, 'linewidth', 2)
end
问题1:你认为你在这条线上按阿伏伽德罗的数字缩放吗
H = H*6.02214078^5;
事实上,您正在按大约7920=6.022^5的比例缩放。如果您想按阿伏伽德罗数进行缩放,则应执行以下操作:
H = H * 6.02214078e23 % = 6.02214078 * 10^23 : the Avogadro number
问题2:您不是针对t
进行绘图,而是针对样本编号进行绘图,而样本编号实际上没有意义(除非您的t
恰好在整数秒内)。从循环中删除/1000
for i = 2:numel(t)
% ...
end
% Then plot
plot(t, lmda)
在这个阶段,我们可以看到一些事情确实出了问题。现在我们按照正确的Avo数进行缩放,数量级已经过时了。我建议您相信图4中的H
和等式9中的H
是相同的H
,如果作者的意图有所不同,这将非常令人困惑
在此基础上,我建议您使用错误的D
、N
,或脉冲间隔时间。我在下面的代码中设置了更清晰的脉冲计时。我还使用矢量化简化了您的循环,并删除了H
缩放
如果将其调整为dtPulses=100
以及D=100
,则曲线图几乎相同。你可能需要考虑这两个数字如何影响结果…
% implementing equation 9 and figure 4
d = 3; % dimension
N = 8000; % number of molecules
D = 100; % diffusion coefficient in micrometer^2/sec
dtPulses = 10; % Seconds between pulses
tPulses = 1:dtPulses:3600; % Time array to plot against
nt = numel(tPulses);
i = 1:nt; % pulse numbers
u = 1 ./ (i.^(d/2)); % inner function in equation 9: individual pulse
for k = 2:nt % Running sum
u(k) = u(k-1)+u(k);
end
% Now plot for different H (mol/micrometer^3)
H = [0.01, 0.1, 1];
figure; hold on; linestyles = {':k', '--k', '-k'};
for nH = 1:3
lmda = ((1/(4*pi*D))*(N/H(nH)).*u).^(2/d);
plot(tPulses, lmda, linestyles{nH}, 'linewidth', 2)
end
@Wolfie I假设脉冲u
是在固定的时间段后产生的,而不是每0.01秒产生一次。问题是当您使用阿伏伽德罗数进行缩放时。相关行应为H=H*6.02214078e5
。这应该能解决你的问题problem@ammportal谢谢你指出这个错误,但是我还是没有得到结果。阿伏伽德罗的数字是6.022e23
,而不是6.022E25
。@Wolfie是的,是6.022e23
。但是因为我想把H分子/微米^3转化为分子,这意味着我必须用e-18来缩放阿伏伽德罗数。因此,它变成了6.022e5
@Wolfie I假设脉冲u
是在固定的时间段后产生的,而不是每0.01秒产生一次。问题是当您使用阿伏伽德罗数进行缩放时。相关行应为H=H*6.02214078e5
。这应该能解决你的问题problem@ammportal谢谢你指出这个错误,但是我还是没有得到结果。阿伏伽德罗的数字是6.022e23
,而不是6.022E25
。@Wolfie是的,是6.022e23
。但是因为我想把H分子/微米^3转化为分子,这意味着我必须用e-18来缩放阿伏伽德罗数。因此,它几乎成为了最合适的6.022e5
。当然,我必须检查D
的值。但是这篇文章确实说了10
。无论如何,非常感谢。我不能看这篇文章,因为它在付费墙后面,所以我瞎了眼。希望通过使用不同的参数可以显示绘图是如何变化的。我可能错了,但我的主要想法是作者不太可能将H
定义为两个如此不同的东西!别担心。注意:我刚刚编辑了我的代码,所以这是一个更有效的触摸,同样的结果,几乎是当场。当然,我必须检查D
的值。但是这篇文章确实说了10
。无论如何,非常感谢。我不能看这篇文章,因为它在付费墙后面,所以我瞎了眼。希望通过使用不同的参数可以显示绘图是如何变化的。我可能错了,但我的主要想法是作者不太可能将H
定义为两个如此不同的东西!别担心。注意:我刚刚编辑了我的代码,所以这是一个更有效的触摸,同样的结果