2016-11-30 3 views
0

Я работаю над проектом для электротехники, где мы строим напряжение на конденсаторе в цепи RLC как функцию времени. Я основывал свой код на следующем учебнике: Python-ODE for RLC Circuit. Мой код полностью функциональный, но я просто хочу лучше понять, как работает пользовательская функция и функция интеграции SciPy. Я прочитал документацию, но у меня все еще есть некоторые конкретные вопросы. Вот мой код:Как эта пользовательская функция работает с scipy интегрировать odeint?

from scipy.integrate import odeint # for integrating ode 
import matplotlib.pyplot as plt # for plotting commands 
import numpy as np #For loadtxt and linspace modules 

R,L,C,tl,numplot = np.loadtxt('UserInput_RLC_Values.txt',unpack=True) 

def RLC(A,t): 
    Vc,m=A 
    V = 2.0 #voltageSource 
    res=[m,(V-Vc-(m*R*C))/(L*C)] 
    return res 

time = np.linspace(0.0,tl,numplot) 
vc,m = odeint(RLC,[0.0,0.0],time).T 

Вот мои вопросы:

  1. Какую роль являются значения параметров А и т игры в функции РЛК? Почему А назначается как Vc (напряжение конденсатора), так и m (фиктивная переменная для v ')? Используется ли t даже?
  2. Когда я вызываю функцию RLC внутри модуля odeint, почему нет параметров?
  3. Что означает .T в конце модуля odeint? Я не могу найти ничего об этом в документации.

Спасибо за понимание. Надеюсь, это не ленивый вопрос, но я думаю, что полное понимание этого поможет мне.

ответ

0

Функция ОДА передается odeint должен иметь формат f(state, time) где time является независимой переменной и state вектор состояния. Дифференциальное уравнение, соответствующее (вектор-) является y'(t)=f(y(t),t)

  1. ) Для стандартных ОДУ решателей, которые необходимо преобразовать уравнения высшего порядка в системах первого порядка. Здесь используется m как переменная импульса (?), m = dVc/dt. Тогда dm/dt = d²Vc/dt² является второй производной.

    Если вход state = [ Vc, m ], выход должен быть [ dVc/dt, dm/dt ] = [ m, Eqn(t,Vc,m) ], где d²Vc/dt² = Eqn(t,Vc,dVc/dt) - форма исходного уравнения.

    t просто должен присутствовать в списке аргументов, даже если ODE не зависит от времени.

  2. ) Вы передаете функцию в качестве справочного/адреса, не является функцией значения

  3. ) Это означает, что «транспонировать». Результатом odeint является список векторов состояний, представляющих собой пары чисел. Транспонирование преобразует его в пару списков, которые могут быть назначены паре переменных.

Смежные вопросы