2016-08-02 396 views
2

我使用下面的代碼來繪製一條帶有兩個斜坡的線,如圖所示。一定的極限[極限= 5]後,斜率應該下降。我正在使用矢量化方法設置斜率值。是否有其他方法來設置斜率值。有人可以幫助我嗎?如何用兩條斜線繪製一條線使用python

   import matplotlib.pyplot as plt 
       import numpy as np 

       #Setting the condition 
       L=5 #Limit 
       m=1 #Slope 
       c=0 #Intercept 

       x=np.linspace(0,10,1000) 
       #Calculate the y value 
       y=m*x+c 

       #plot the line 
       plt.plot(x,y) 

       #Set the slope values using vectorisation 
       m[(x<L)] = 1.0 
       m[(x>L)] = 0.75 

       # plot the line again 
       plt.plot(x,y) 

       #Display with grids 
       plt.grid() 
       plt.show() 

enter image description here

回答

1

您可能會過度懷疑問題。有在畫面兩條線段:

  1. 從(0,0)到(A,A ')
  2. 從(A,A')至(B,B')

你知道A = 5,m = 1,所以A' = 5。你也知道B = 10。鑑於(B' - A')/(B - A) = 0.75,我們有B' = 8.75。因此,您可以繪製如下圖:

from matplotlib import pyplot as plt 
m0 = 1 
m1 = 0.75 
x0 = 0  # Intercept 
x1 = 5  # A 
x2 = 10 # B 
y0 = 0     # Intercept 
y1 = y0 + m0 * (x1 - x0) # A' 
y2 = y1 + m1 * (x2 - x1) # B' 

plt.plot([x0, x1, x2], [y0, y1, y2]) 

希望您能看到用於計算給定限制集的y值的模式。下面是結果:

enter image description here

現在讓我們假設你真的想用量化的一些模糊的原因。你會想先計算所有的y值並繪製一次,否則你會得到奇怪的結果。這裏有一些修改原密碼:

from matplotlib import pyplot as plt 
import numpy as np 

#Setting the condition 
L = 5 #Limit 
x = np.linspace(0, 10, 1000) 
lMask = (x<=L) # Avoid recomputing this mask 

# Compute a vector of slope values for each x 
m = np.zeros_like(x) 
m[lMask] = 1.0 
m[~lMask] = 0.75 

# Compute the y-intercept for each segment 
b = np.zeros_like(x) 
#b[lMask] = 0.0 # Already set to zero, so skip this step 
b[~lMask] = L * (m[0] - 0.75) 

# Compute the y-vector 
y = m * x + b 

# plot the line again 
plt.plot(x, y) 

#Display with grids 
plt.grid() 
plt.show() 

enter image description here

+0

@瘋狂的物理學家:這是解決問題的數值方法[或多或少像隱式方法],其中第一行的最終值是第二行的初始點。您的代碼是數值方法答案。這正是我所期待的。 – HEMS

+0

整潔。如果它有幫助,upvote也會很好:) –

1

按照你的代碼,你應該修改的主要部分是這樣的:

x=np.linspace(0,10,1000) 
m = np.empty(x.shape) 
c = np.empty(x.shape) 

m[(x<L)] = 1.0 
c[x<L] = 0 
m[(x>L)] = 0.75 
c[x>L] = L*(1.0 - 0.75) 

y=m*x+c 

plt.plot(x,y) 

注意c需要改變,以及對線是連續的。這是結果:enter image description here

+0

你肯定你的'C'的計算? –

+0

如果您是,請您發佈結果圖片嗎? –

+0

@瘋狂的物理學家:對於低於1的任何斜率值,該行必須是連續的。 – HEMS