Why isn't my graph plotting correctly?
조회 수: 1 (최근 30일)
이전 댓글 표시
Hi, I think I must be being dense, I am attempting to plot
in Matlab, but I am getting a plot that is very wrong.
km=linspace(0,10,100);
y=tan(km)+tanh(km);
plot(km,y,'color','red','LineWidth',1.5);
xlabel('$k_m$','Interpreter','latex');
ylabel('$f(x)$','Interpreter','latex');
title('Graph of $f(x)=tan(k_m)+tanh(k_m)$','Interpreter','latex')

Please could someone explain what I have done wrong to obtain this:
Cheers
댓글 수: 3
Adam
2019년 11월 12일
I suspect the difference is simply that it is joining asymptotes together in the plot. If you explicitly insert NaNs in your data at the points of the asymptotes (or basically between the points either side of one) this should get rid of that, I think.
답변 (1개)
Star Strider
2019년 11월 12일
Set the peaks values to NaN and they will not plot:
km=linspace(0,10,1000);
y=tan(km)+tanh(km);
[pks,locs] = findpeaks(y); % Locate Peaks Peaks
y(locs) = NaN; % Set Peaks To ‘NaN’
plot(km,y,'color','red','LineWidth',1.5);
xlabel('$k_m$','Interpreter','latex');
ylabel('$f(x)$','Interpreter','latex');
title('Graph of $f(x)=tan(k_m)+tanh(k_m)$','Interpreter','latex')
ylim([-6 +6])
grid
댓글 수: 2
Star Strider
2019년 11월 12일
To the best of my knowledge, findpeaks will not work on function handles. If you want to use fzero to find the zero-crossings, this is an appropriate approach:
km = linspace(0,10,100);
y = tan(km)+tanh(km);
[pks,locs] = findpeaks(y); % Locate Peaks Peaks
y(locs) = NaN; % Set Peaks To ‘NaN’
f=@(km) tan(km)+tanh(km);
midpt = fix(mean(diff(locs))/2);
for k = 1:numel(locs)
idx = min([numel(km) locs(k)+midpt]); % Prevents Indexing Beyond ‘km’ Length
zro(k) = fzero(f, km(idx));
end
It returns the zero-crossings in the ‘zro’ vector.
Experiment to get the result you want.
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
