這里我用輸入a=3
,dx=0.1
繪制了((2*x.^2+3*exp(-x) -(100*a)).*sin(5*x))./(6*x.^2-9*x-42)-10
。
我想用藍(lán)色繪制所有正y-values,用紅色繪制所有負(fù)y-values:
a = input('Please input a: ');
dx = input('Input step size dx: ');
if dx<0
fprintf('dx must be a non-negative number.');
while(dx<0)
dx = input('Input step size dx: ');
end
end
clf;
x = -10:dx:10;
y = ((2*x.^2+3*exp(-x) -(100*a)).*sin(5*x))./(6*x.^2-9*x-42)-10
plot(x,y)
ylim([-100,100])
為了繪制藍(lán)色的正y-values和紅色的負(fù)y-values,我嘗試初始化正y-values及其域的向量,以及負(fù)y-values及其域的相同向量。
s = size(y);
x_1 = [];
x_2 = []; %negative
y_1 = [];
y_2 = []; %negative
for i = 1:s(2)
if(y(i) >0)
x_1 = [x_1,x(i)];
y_1 = [y_1,y(i)];
elseif (y(i) <0)
x_2 = [x_2,x(i)];
y_2 = [y_2,y(i)];
end
end
s_x1 = size(x_1);
s_x1_lim = s_x1(2);
s_x2 = size(x_2);
s_x2_lim = s_x2(2);
plot(x_1,y_1,'b');
xlim([x_1(1), s_x1_lim]);
hold on
plot(x_2,y_2,'r');
xlim([x_2(1), s_x2_lim]);
hold on;
xlim([-10,10])
ylim([-100,100]);
問題是,這種方法會(huì)留下一些我不希望有的重疊。我怎樣才能改變這個(gè)?
您可以創(chuàng)建兩個(gè)數(shù)組:
neg_x = x; neg_x (neg_x >0) = nan
使用'r'
繪制,然后用相反的方法繪制正值。然而,這將留下兩個(gè)陣列之間的片段,即您的間隙。您可以通過查找它們并將索引擴(kuò)展1來更正它們:這里使用
nan
有點(diǎn)幫助,因?yàn)樵诶L圖時(shí),MATLAB會(huì)自動(dòng)忽略這些條目,即留下一個(gè)很好的間隙,而不是一條直線。Results in: