У меня есть многострочный плоттер, который принимает параметр списков из n списков [u, u1 ...], по существу, строит n линий на одном графике.Однако, чтобы построить их, я должен вызвать их из моей другой функции, которая возвращает индивидуальный список для разных T = 50, 150, ...
x, u = heat_eq(50, both_ice, 0, 0) # here im calling 8 lists to plot them
x, u2 = heat_eq(150, both_ice, 0, 0)
x, u3 = heat_eq(250, both_ice, 0, 0)
x, u4 = heat_eq(350, both_ice, 0, 0)
x, u5 = heat_eq(450, both_ice, 0, 0)
x, u6 = heat_eq(550, both_ice, 0, 0)
x, u7 = heat_eq(650, both_ice, 0, 0)
multiline(x, [u, u2, u3, u4, u5, u6], "length(m)", "Temperature(Degree Celsius)", [25, 50, 250, 350, 450, 550, 650], "time(s)", 21)
В этом случае мой heat_eq () будет иметьбыть вызванным много раз, если бы я планировал больше линий.Есть ли способ объединения циклов с * args, чтобы он позволял мне
for i in range(*args):
x, [u, u2, u3, u4, ...] = heat_eq("different T(s) here", both_ice, 0, 0)
return x, [u, u2, u3, ...]
, чтобы я мог
multiline(x, [u, u2, u3, u4, ...], "length(m)", "Temperature(Degree Celsius)", [25, 50, 250, 350, 450, 550, 650], "time(s)", 21)
?манипулирование аргументами на самом деле очень запутанно.
Редактировать: Думаю, я бы добавил больше информации о моих функциях, чтобы помочь вам лучше понять вопрос.Итак, мой heat_eq
выглядит следующим образом:
def heat_eq(T, bc, ti, tf):
"""
T is a number here
bc is the boundary condition function
ti and tf are both constants
"""
t = np.linspace(0, T, Nx + 1)
x = np.linspace(0, T, Nx + 1)
# define other stuff here
# initiate a matrix here
A = some matrix
A = bc(A, some other constants) # A gets put into BC spits out A with boundary condition values included.
for n in range(something):
Here A does something to produce data points into a list u
return x, u
Так что, когда я назову его, скажем, граничное условие both_ice(A, constant)
Я бы сделал
x, u = heat_eq(50, both_ice, 0, 0)
Надеюсь, вам хватит информациичтобы понять вопрос.