2017-04-03 3 views
1

Ich versuche, eine Funktion zu zeichnen, die unterschiedliche Verhalten haben, abhängig von den Werten der X-Achse. Für Werte der x-Achse (Variable 'ec'), die kleiner als 2.0 sind, wirkt sie in einer Richtung, und für größere Werte wirkt sie anders.Probleme mit einer 'für' Iteration innerhalb einer Funktion

import numpy as np 
import matplotlib.pyplot as plt 

ec = np.linspace(0., 3.,20) #range of 'x' axis values 

def ten_def(x): 
    for i in ec: 
     if i <= 2.: 
      return 0.85*x*(1-(1-(ec/2))**2) #behavior for ec < than 2.0 
     else: 
      return 0.85*x #behavior for ec > 2.0 

fcd = float(input('Fck (MPa): '))/1.4 

plt.plot(ec, ten_def(fcd), 'b-', ec,(ec*0)+fcd*0.85,'r-') 
plt.title('Tensão-deformação') 
plt.xlabel('Deformação (‰)') 
plt.ylabel('Tensão (MPa)') 
plt.show() 

Der Plotteil des Codes funktioniert. Aber es zeichnet eine Kurve auf, die das gleiche Verhalten für die ganze Parzelle hat (es berücksichtigt ec < 2.0 die ganze Zeit). Was mache ich falsch?

how it is supose to be like

+0

Sie das erste Mal gewünschte Ergebnis zurück, das ist das Ende der Funktion. Es ist, als würde man jemandem einen Boten schicken. Sobald der Bote mit der Antwort zu Ihnen zurückkommt, sind alle anderen Antworten nutzlos, weil der Bote schon weg ist. – zondo

Antwort

0

Sie müssen eine Liste von Daten als die Ausgabe der Funktion zurück.

import numpy as np 
import matplotlib.pyplot as plt 

ec = np.linspace(0., 3.,20) #range of 'x' axis values 

def ten_def(x): 
    result = [] 
    for i in ec: 
     if i <= 2.: 
      result.append(0.85*x*(1-(1-(i/2))**2)) #behavior for ec < than 2.0 
     else: 
      result.append(0.85*x) #behavior for ec > 2.0 
    return result 

fcd = float(input('Fck (MPa): '))/1.4 

plt.plot(ec, ten_def(fcd), 'b-') 
plt.axhline(0.85*fcd, color='r') 
plt.title('Tensão-deformação') 
plt.xlabel('Deformação (‰)') 
plt.ylabel('Tensão (MPa)') 
plt.show() 

Dies sollten Sie das

+0

Es gibt mir "ValueError: ein Array-Element mit einer Sequenz festlegen". – JohnEngineer

+0

@JohnEngineer versuchen Sie die neue Version. Es scheint, als ob das Problem darin bestünde, dass das ganze "ec" in der Berechnung verwendet wurde, wenn "ec <= 2" anstelle von individuellen Werten verwendet wurde. –

+0

Das war genau was ich wollte! Vielen Dank! – JohnEngineer

Verwandte Themen