|
- from sympy import symbols, Eq, solve
- #定义元器件列表
- comp_lists = [
- {'name':'R1', 'type' : 'resistor','value_R':20,'Value_C': 0,'Value_L':0},
- {'name':'R2', 'type' : 'resistor','value_R':10,'Value_C': 0,'Value_L':0},
- {'name':'R3', 'type' : 'resistor','value_R':10,'Value_C': 0,'Value_L':0},
- {'name':'V1', 'type' : 'source_voltage','value_V':12}
- ]
- #定义结点列表
- pin_nodes_dicts = {'R1_1':'Node1','R1_2':'node_R1_2',
- 'R2_1':'node_R1_2','R2_2':'GND',
- 'R3_1':'node_R1_2','R3_2':'GND',
- 'V1_1':'Node1','V1_2':'GND'
- }
- nodes_pin_dicts = {}
- for key, value in pin_nodes_dicts.items():
- nodes_pin_dicts[value] = []
- for key, value in pin_nodes_dicts.items():
- print('key:'+key+' value:'+value)
- nodes_pin_dicts[value].append(key)
- print(nodes_pin_dicts)
- #----生成变量列表-----
- paras = {}
- #1.结点的关键字加i,形成电流变量,其值初始化为0
- for key in pin_nodes_dicts.keys():
- paras['i_'+key]=0;
- paras[pin_nodes_dicts[key]]=0;
-
- print(paras)
-
- # 定义符号变量
- paras_equation = []
- for key in paras.keys():
- paras_equation.append(symbols(key))
- # --------------列出方程------------
- # 1.扫描所有元器件
- equations = [Eq(symbols('GND'), 0 )]#定义接地端口为0
- for comp in comp_lists:
- if comp['type'] == 'resistor':
- i1 = symbols('i_'+ comp['name'] +'_1');
- i2 = symbols( 'i_'+ comp['name'] +'_2');
- v1 = symbols( pin_nodes_dicts[comp['name']+'_1'])
- v2 = symbols( pin_nodes_dicts[comp['name']+'_2'])
- r = comp['value_R']
- equations.append(Eq(v1-v2, i1*r ))
- equations.append(Eq(i1,-i2)) #流入为正,流出为负
- elif comp['type'] == 'source_voltage':
- v1 = symbols( pin_nodes_dicts[comp['name']+'_1'])
- v2 = symbols( pin_nodes_dicts[comp['name']+'_2'])
- equations.append(Eq(v1-v2,comp['value_V'] ))
- #2.加入结点电流方程
- for key in nodes_pin_dicts.keys():
- flag_first_time = True
- for pin in nodes_pin_dicts[key]:
- if flag_first_time:
- ee = Eq(symbols('i_'+ pin),0)
- flag_first_time = False
- else:
- ee = Eq(ee.lhs+symbols('i_'+ pin),0)
- equations.append(ee)
- print(equations)
-
- # 使用solve解方程组
- solutions = solve(equations, paras_equation, dict=True)
-
- print(solutions)
复制代码 |
|