matlab - almost done! simple mistake in function graphing ?
조회 수: 4 (최근 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!