1.用于电路表示的数据结构
2.如何实施基尔霍夫规则
[原始问题文本] 具体来说,该程序如何识别串联和并联的东西,以及它如何区分电池,电阻器,电容器,电感器等。
答案 0 :(得分:3)
Java是一种面向对象的语言。开始考虑如何将系统建模为对象。
你已经有了一些候选对象:
这些将具有输入和输出节点。一个输出是下一个的输入。
晶体管怎么样?你将有多个输入。然后怎样呢?那些都是非线性的。你是如何建模的?
您将为每个人构建正确的行为并将它们连接在一起。
这里你会有一些瞬态强制功能。输入电流或电压波形。输出是每个节点的电流和电压与时间的关系。
这是电气工程师相当于有限元分析。
这些都是短暂的ODE,对吗?你打算怎么解决这些问题?数值积分?
答案 1 :(得分:2)
同意duffymo的回答只是添加一些东西(我是C ++友好所以我坚持下去)
struct pin
{
char name[]; // name id for pin ("C","B","E"...
int part_ix,pin_ix; // connected to patrs[part_ix].pins[pin_ix]
double i,u; // actual: current,voltage
int direction; // in,out,bidirectional
};
struct part
{
char name[]; // name id for part ("resistor","diode",...
pin pins[n]; // n pins of the part (resistor has 2 , transistor has 3, ...)
// here add all values you need for simulation like:
double R,H21E,...
// or even better do a matrix for it so when you multiply it by input currents and voltages
// of every pin you get the correct currents and voltages
double m[n][n+n];
};
您也可以添加引脚连接列表而不是part_ix,pin_ix
来节省一些处理时间。
电路
part parts[];
互连内部的简单动态组件列表
<强>环强>
您必须从电流方程的互连中提取闭合回路,并获得连接电流方程的电流回路的节点。这会引导你进入方程组。节点有更多的2连接和闭合电流环只是连接序列导致自身。看这里:
这是我的答案之一,其中部分代码找到闭环
<强>评价强>
可以使用高斯消除。有问题的是非线性元件,如二极管,晶体管......因此,您可能需要添加更多矩阵(接近更大程度的多项式),然后您需要乘以(0,1,2,3,...)
驱动的所有电流和电压。我认为^ 3对于大多数组件来说已经足够了,不要忘记一些非线性组件也需要记住它们的状态(或最后的电流,电压......)。
有时候使用符号表达式代替矩阵方法更好,但为此你需要表达式评估引擎。我在CAD / CAM网格中自行调整几何尺寸时使用了这种方法。