matlab - almost done! simple mistake in function graphing ?

조회 수: 4 (최근 30일)
Chris
Chris 2011년 9월 3일
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)=[];

답변 (1개)

Oleg Komarov
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
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
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 CenterFile Exchange에서 Environment and Settings에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by