试图将电路嵌入射频工具箱,难以理解的错误级联

1视图(30天)
我想做一个层次射频电路分析,通过子类化电路,使其终端,然后将其添加到另一个电路。它允许我做添加,但是当我试着分析,我得到以下错误级联
错误使用= =
不能调用方法的“情商”,因为一个或多个输入类“电路”异构和“情商”
密封。更多细节请参阅方法调度规则异构数组。
错误在rf.circuit。压延机/ getglobalnode(第139行)
错误在rf.circuit。压延机/ makenodeobjects(第132行)
错误在rf.circuit。压延机/ buildcircuitlevel(第80行)
错误在rf.circuit。压延机/ buildcircuitlevel(第86行)
错误在rf.circuit。压延机/ flattencircuit(36行)
错误在rf.circuit。pcircuit / calc_sparams(第366行)
错误在sparameters(第180行)
输入{1}= calc_sparams(输入{:});
不幸的是,我不知道这意味着什么,我2014,在Matlab OO, RF工具箱。
当我在一个脚本中创建一个电路通过添加组件,添加终端,然后添加到另一个电路相同的脚本,它将分析sparameters没有错误。
当我子类电路和添加组件,添加端口,并分析其sparameters,工作。
它是如此,我不能添加一个对象派生子类从电路到另一个电路,即使终端?我怀疑这是抱怨= =,和电路不是一个电路的一个子类对象,但它确实有它的属性和方法的超集,所以应该在电路工作(我来自Python,动态类型的规则)。
这样我可以窝电路吗?
的记录,这是我的classdef
classdefthree_term <电路
%创建3终端测试网络
属性
res
印第安纳州
结束
方法
函数s = three_term(名字)
s = s@circuit(名称);
年代。帽=电容器(10 e-12,“cap_name”);
年代。在d = inductor(2e-9,“ind_name”);
年代。res =电阻器(1000“res_name”);
add (s [1, 2] s.ind);
add(年代,(2,0),s.cap);
add (s (1,0) s.res);
% setports (s (1,0) [2,0]);
setterminals(年代,[0 1 2]);
结束
结束
结束

接受的答案

乔沃戈
乔沃戈 2014年6月13日
嗨,尼尔,
谢谢你的澄清!我认为我有一个处理现在你想做什么。我可以提供几个解决方法:
  • 每次重建。我知道这看起来有点糟糕,看起来坏的计算机科学,但它是最简单的方法,和“可控的规模”的问题,它不应该伤害太多。
  • 保持一个处理元素值你想改变。例如:
函数[newckt, newres newind newcap] = three_term(名字)
newckt =电路(名称);
newcap =电容器(10 e-12,“cap_name”);
newind =电感(2 e-9,“ind_name”);
newres =电阻器(1000“res_name”);
add ([1, 2], newckt newind)
添加(newckt (2,0), newcap)
添加(newckt (1,0), newres)
setterminals (newckt [0 1 2])
然后你可以跟踪和改变任何元素的值:
%创建三个终端元素
(R1, tt1 L1, C1) = three_term (“一个”);
[tt2, R2, L2 C2) = three_term (“b”);
%将它们添加到新的“父”电路
父母=电路;
add(母公司(1 2 3)tt1)
add(母公司[0 2 3]tt2)
setports(父,0 [1],[2 0],[3 0])
%设置值的电阻“tt1”和找到的参数
R1。阻力= 100;
频率= [1 e9 2 e9];
S = sparameters(父、频率);
  • 去和你的原计划(你需要破解电路。使它工作)。本身没有什么错与你最初的想法,但是一些电路的基础设施并不是设计来处理电路电路对象和子类对象的混合物。我不会进入技术术语,但你需要“密封”= =操作符。要做到这一点,把下面的方法阻止在circuit.m:
方法(密封= true)
函数bool = eq(变长度输入宗量)
bool = eq@handle(变长度输入宗量{:});
结束
结束
我测试它,它似乎工作好。请记住,这个解决方案不支持(然而)或记录,和在将来发布的版本中可能会失败。万博1manbetx
我希望会有帮助!
1评论
尼尔。
尼尔。 2014年6月13日
嗨乔,
谢谢你确认我不是离题太远,只是过于乐观的被宠坏了的Python的就下去是否可以。
保持一个句柄变量的方法被“有效压扁”,我的意思,我真的不想去那里。
黑客电路。m,扁平和分析派生子类电路听起来像路要走。
<编辑 >是路要走,现在的所有作品,非常谢谢。 < /编辑 >

登录置评。

答案(1)

乔沃戈
乔沃戈 2014年6月10日
嗨,尼尔,
我认为你的用例,您不应该使用OO设计或创建一个新的对象类型。MATLAB函数可正常工作。考虑:
函数newckt = three_term(名称)
newckt =电路(名称);
newcap =电容器(10 e-12,“cap_name”);
newind =电感(2 e-9,“ind_name”);
newres =电阻器(1000“res_name”);
add ([1, 2], newckt newind)
添加(newckt (2,0), newcap)
添加(newckt (1,0), newres)
setterminals (newckt [0 1 2])
然后您可以创建一个或多个命令行:
> > tt1 = three_term (“一个”);
> > tt2 = three_term (“两个”);
然后,作为一个简单的例子,您可以添加这些“次电流”变成了“parent-circuit”:
> >父=电路;
> > add(母公司[0 1 2]tt1)
> > add(母公司[0 2 3]tt2)
最后,如果你想要父电路的参数,需要定义父电路端口,然后使用sparameters功能:
> > setports(父,0 [1],[2 0])
> >频率= [1 e9 2 e9];
> > S = sparameters(父母,频率);
最后一个注意:节点“0”是全球地面。小心当你使用它在您的系统层次结构。
希望会有帮助!
1评论
尼尔。
尼尔。 2014年6月13日
嗨乔,
我担心我剥夺了太多的实际问题,让它更短的演讲我看到错误。我想要一个成熟的类/对象我次电流是我可以使用的方法来改变它的组件值用不平凡的方式进行。我已经建立,以这种方式使用一个类,调用方法在我独自three_term对象之间分析它并改变其参数。所以我只提出了层次分析问题。
我想做什么,在真正的OO风格,是创建一个可重用的组件,所有的复杂性首先彻底地进行了测试,然后隐藏,我可以嵌入在其他电路,然后分析。
函数的方法是在你的例子中,使用线tt1 = three_term(“一”),我的世界像你实例化一个对象,定义一个轻量级的函数定义只是语法类没有方法。我认为有效属性,tt1。newind tt2。newind定义在函数范围内,所以不是全球性的。
所以问题是,你将使用一个函数的方式建议允许我实例然后改变组件的函数值吗?我不知道,因为它没有方法。
假设你的基本前提工作(我有另一个恐慌,本周没有时间去测试它),它可以形成有效解决方案的基础,停止压扁低水平的层次结构来获得组件。我可以删除和重建之间的结构分析,这将允许函数定义(即轻量级类的init()方法;-))复杂的东西在它的输入参数。只是不是“创建然后戳”的工作方式,我习惯于用Python。我认为重建每次会低于很多我想做的事情。然而这是一个假设我应该测试,因为它可能不是一个问题。
谢谢你花时间帮助

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!