matlab - almost done! simple mistake in function graphing ?
7 次查看(过去 30 天)
显示 更早的评论
Hi ,
i am trying to graph kx, ky, K (constant line for k) on the y axis, and the Length (L) from 30 to 140 on the xaxis, as of right now I get the constant line from 30 to 140, but the other values for kx and ky start from zero. I need the values for kx and ky to go from 30 to 140 as well.
Any ideas?
clear
clc
mfp = 31; % mean free path (nm)
k = 316.72; % conductivity (W / m*k)
% Equations
Lmax = 140;
dL=10;
L=30;
while L<=Lmax
kx(L)=k*(1-((2*mfp)/(3*3.14*L)))
ky(L)=k*(1-(mfp/(3*L)));
L= L+dL;
end
kx(~kx)=[]; % removes all zeros from kx vector
ky(~ky)=[]; % removes all zeros from ky vector
plot(kx,'-'),hold on, plot(ky,'--'), hold on, plot([30,140],[316.72,316.72]);
grid on;
%plot(kx,'-'),hold on, plot(ky,'--'), hold on, plot(k);
title(['Conductivity (W / m*k ) ']);
xlabel('Thickness (nm)','FontSize',14);
ylabel('Conductivity','FontSize',14);
leg1=legend('kx','ky');
this was given to me for the last time i asked, and it makes the graph curve like it should. it just needs to be from 30 to 140 isntead of 0 to 11 or which one it goes too.
kx(~kx)=[]; % removes all zeros from kx vector
ky(~ky)=[];
0 个评论
回答(1 个)
Oleg Komarov
2011-9-3
If you remove the zeros then your kx and ky will have less values and if you omit the x-values when calling plot by default it sets them to 1:numel(y-values). Therefore, say you have 12 values after removing the zeros it will plot kx from 1 to 12.
What you have to do is find at which positions your non-zero values are and call plot(X,Y).
Another remark, since you know how many iterations you'll have to do in the loop, call explicitly for.
mfp = 31; % mean free path (nm)
k = 316.72; % conductivity (W / m*k)
% Preallocate kx and ky (search for preallocation for details)
kx = zeros(Lmax,1);
ky = zeros(Lmax,1);
% Loop from 30 to 140 with a step of 10.
for ii = 30:10:140
kx(ii) = k*(1-(2*mfp/(3*3.14*ii)));
ky(ii) = k*(1-(mfp/(3*ii)));
end
% Find the positions (x coordinates) of the non zero entries in kx
idx = find(kx);
plot(idx,kx(idx),'-')
hold on
% Find the positions (x coordinates) of the non zero entries in ky
idx = find(ky);
plot(idx,ky(idx),'--')
plot([30,140],[316.72,316.72]);
grid on
EDIT
A vectorized alternative:
mfp = 31; % mean free path (nm)
k = 316.72; % conductivity (W / m*k)
L = 30:10:140;
kx = k*(1-(2*mfp./(3*3.14*L)));
ky = k*(1-(mfp./(3*L)));
x = 1:numel(L);
plot(x,kx,'-',x,ky,'--',[x(1) x(end)],[316.72,316.72])
set(gca,'Xlim',[x(1) x(end)],'XtickLabel',L)
5 个评论
Oleg Komarov
2011-9-3
You can keep your while loop but that's not the core of your problem.
There are tons of solutions and I presented you with an easy one. Find returns the positions of all non zero elements (for more details read the documentation). This way you keep the reference to the [0 140].
Walter Roberson
2011-9-3
Your while loop already goes from 30 to 140. It is the graph that is the difficulty. Oleg's code should make the graph reflect 30 to 140.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Environment and Settings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!