首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电路求解器的C++设计

电路求解器的C++设计
EN

Stack Overflow用户
提问于 2019-12-03 15:16:20
回答 2查看 1.5K关注 0票数 2

我有一个C++架构设计问题。我试图在电路模拟器上工作,我已经定义了3个类。节点类、组件类和电路类。下面是这些类的简化布局

https://gist.github.com/Nick0412/0b9a0ba8848cb5225d5bd663dad8fd77

现在我的印象是,当我创建一个特定的组件,比如说电阻,它将继承组件类。但是,当我在电路中添加一个任意的组件时,我希望电路根据添加的是哪种组件来做特定的事情。

所以我有两个问题。首先,访问者类型模式是否是解决这一问题的最合适方法?第二,是否有人对这个布局是否合理有任何反馈?

编辑:

我的描述不够清楚,这是我的错。仅就上下文而言,我将在这里链接存储库,https://github.com/Nick0412/Circuit

长话短说,我一直试图从https://www.swarthmore.edu/NatSci/echeeve1/Ref/mna/MNA5.html等资源中了解改进的节点分析(MNA)。

在此基础上,我的程序思维过程如下。

  • 建立了Ax=y形式的线性方程集,其中x是电路中每个节点的所有电压和所有电流通过电压源的矢量,y是0的矢量,表示每个节点上的电流的零和以及电压源的电压,A是一个矩阵,其每个支路的电导和1s分布在该矩阵中,表示通过电压源的电流。
  • 我们可以通过反演矩阵x的矩阵A,左手把它乘以y来求解。这可以通过像本征这样的线性代数库来完成。
  • 大部分工作来自设置矩阵A并在每个时间戳中适当地更新它。我们通过迭代所有分量来建立A,并将该分量的适当电导相乘到其分别连接的节点(MNA注释)。无功元件如电容器和电感的电导将是复杂的(如1/(sC),用于caps )。和sL的电感),因为我们考虑了频率分量。
  • 求解向量x,并对时间戳进行适当更新。

所以我认为这主要涉及电路求解器如何工作的基本思想。现在是更具体的细节。因此,为了像上面描述的那样设置矩阵A,在我看来,我有一个电路类,它包含一组没有重复的组件,例如

代码语言:javascript
运行
复制
// circuit.h

class Circuit
{
private:
    std::unordered_set<Component*> m_components;
// ... public methods
};

现在,组件应该是所有实际组件(电阻器、盖帽、电感)继承的基类。组件类应该非常小,并且只保存所有组件共享的数据,例如附加到其中的节点列表。

代码语言:javascript
运行
复制
// component.h

class Component
{
private:
    std::unordered_set<Node*> m_nodes;
// ... public methods
};

组件继承的示例

代码语言:javascript
运行
复制
// resistor.h

class Resistor : public Component
{
private:
    double m_resistance;
// ... public methods
};

我设计的节点类非常简单,我在这里不包括它,但是可以在回购中找到它。因此,要向电路中添加一个组件,用户可能会执行以下操作

代码语言:javascript
运行
复制
// Circuit::addComponent(Component* c, Node* n1, Node* n2)

Circuit c1;
Node* n1 (new Node());
Node* n2 (new Node());

// 10 is suppose to be resistance in ohms that we init r with
Resistor* r (new Resistor(10)); 

c1.addComponent(r, n1, n2);

// add some other components here ...

// solve the circuit for DC (direct current) state lets say
c1.solve();

因此,当我们调用add组件时,它将组件添加到电路中,并将节点添加到组件中。但是正如您所看到的,由于addComponent采用了一个通用组件,因此可能很难更新电路,因为我们可能想知道要添加的特定组件。这就是为什么我询问访客模式的原因。如何适当地向电路中添加通用组件并进行更新?

很抱歉,这个冗长的帖子,我希望它消除了任何误解,如果没有,我可以继续增加它。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-12-03 15:22:30

我只想简单地将电阻、电容器等定义为component的子类.因为它们通常都是“可以连接到电路中的东西”。不要过分抽象事物。

还有..。“节点”是电路设计术语中通常使用的词吗?相对于,比如说,“电线?”

票数 0
EN

Stack Overflow用户

发布于 2019-12-03 16:10:13

与其侧重于面向对象的电路分析方法,不如将复杂元件分解为等效的基本元件,基于数学模型的设计,参数eqv等,从基本电路开始,但以后可扩展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59160172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档