理性的
执行复杂频率相关数据的有理近似。
库::`工程师`
资料描述
使用功能 理性 以执行复杂频率相关数据的有理近似。 该函数使用AAA算法[1]构造具有复杂频率的有理近似 . AAA算法使用重心形来解决其他有理逼近方法遇到的缩放问题,特别是广泛使用的矢量逼近算法。 这允许AAA算法快速收敛到几乎最优的有理逼近函数。 函数的每个元素的近似 理性 由下式给出:
哪里
-
-扣除;
-
-波兰人;
-
-免费会员。
语法
函数调用
-
<参数:适合>=理性()-创建非反射单端口对象理性的,其属性默认设置。
-
<<name_value,Name=Value)-设置用于控制近似方面的参数或设置对象属性理性的使用参数,如 «名称-值».
争论
输入参数
# 托尔 — 允许的相对误差
+
−40 (默认情况下)| 标量,标量
Details
可接受的相对误差,设置为标量,小于或等于 0 分贝。
不要指定输入参数 托尔 和类型参数 «名称-值» [参数:宽容] 使用自变量指定近似极点数时 [参数:NumPoles].
|
输入参数 «名称-值»
将可选参数对指定为 名称=值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 类型参数 «名称-值» 它们应该放在其他参数之后,但对的顺序无关紧要。
例子: fit=rational(s,MaxPoles=1002) 设置近似值的最大极点数。 您可以指定多个对 «名称-值».
# 宽容 — 可接受的相对误差
+
−40 (默认情况下)| 标量,标量
Details
可接受的相对误差,设置为标量,小于或等于 0 分贝。
不要指定输入参数 托尔 和类型参数 «名称-值» [参数:宽容] 使用自变量指定近似极点数时 [参数:NumPoles].
|
| 数据类型 |
|
# TendsToZero — s参数大值的近似行为
+
真的 (默认情况下)| 错误
Details
大S参数的近似行为,由逻辑值之一指定:
-
真的-近似中的自由项归零,使得有理近似 它接近时趋于零 走向无限; -
错误-允许使用非零免费会员。
| 数据类型 |
|
#
误差测量 —
对象中的错误度量 理性的
"违约" (默认情况下)| "亲戚"
Details
对象中的错误度量 理性的,使用以下方法之一设置:
-
"违约"-对象理性的它将平均分配错误。; -
"亲戚"-对象理性的它将匹配波峰和波谷,或者对于较小的值获得较小的误差。
| 数据类型 |
|
# 因果关系 — 极稳定性
+
真的 (默认情况下)| 错误
Details
极稳定性,由逻辑值之一设置:
-
真的-近似值的所有极点都是稳定的; -
错误-极点可以位于复平面的任何点。
| 数据类型 |
|
# 柱状图 — 数据缩减
+
真的 (默认情况下)| 错误
Details
由其中一个逻辑值指定的数据缩减:
-
真的-该函数减少处理程序的数据,以节省内存和计算时间。; -
错误-节省内存和计算时间未激活。
| 数据类型 |
|
# 共享 — 极分布类型
+
全部 (默认)| 专栏 | 个人
Details
S参数的极点分布类型,由以下值之一设置:
-
全部-s参数的所有极点的分布; -
专栏-s参数列的极点分布; -
个人-根据个别S参数的极点分布。
| 数据类型 |
|
# 显示 — 近似算法的显示参数
+
"关" (默认情况下)| "上" | "情节" | "两者"
Details
对象近似算法的显示参数 理性的,设置为以下值之一:
-
"关"—没有显示; -
"上"-资料; -
"情节"-插值过程的图表; -
"两者"-信息和图表的输出。
| 数据类型 |
|
# *DirectTerm*是 近似值中的自由项
+
[0.0;;] (默认情况下)| 矩阵
Details
近似值中的自由项或值 在description给出的方程中,作为二维矩阵给出。 此矩阵的长度必须与参数的前两个维度相匹配。 [参数:数据]. 如果设置此参数,则对象将设置参数 [参数:ErrDB].
如果不指定此参数,对象将自动为其设置一个大小为二维矩阵形式的值 [参数:NumPorts] 上 [参数:NumPorts].
| 数据类型 |
|
# ErrDB — 近似值与源数据之间的误差
+
-Inf (默认情况下)| 标量,标量
Details
近似值与初始数据之间的误差,以dB为标量给出。
| 此参数是只读的。 |
| 数据类型 |
|
# 数字 — 港口数目
+
1 (默认情况下)| 向量资料
Details
S参数的源数据中的端口数,指定为大小的向量 1 上 2. 参数的值 N.数字,数字 是基于S参数数据确定的。
| 此参数是只读的。 |
| 数据类型 |
|
# 电线杆 — 近似极点
+
[] (默认情况下)| 向量资料
Details
电线杆 指定为大小的向量串的近似值 [参数:NumPoles] 上 1. 如果设置了此参数,则对象将设置参数 [参数:残基], [参数:DirectTerm] 和 [参数:ErrDB],或者您可以单独设置它们。
如果论点是 电线杆 如果未指定,则对象会自动设置其值。
使用参数设置拟合极时 电线杆 争论 [参数:噪音], [论证:因果关系], [参数:ColumnReduce], [参数:MaxPoles], [参数:NumPoles] 和 [参数:Qlimit] 它们被忽略了。
|
| 数据类型 |
|
# 遗骸 — 近似扣除
+
阵列
Details
扣除额 定义为三维阵列的近似值。 数组的前两个维度 残基 必须与参数的前两个维度具有相同的长度。 [参数:数据],以及数组的最后一个维度 残基 必须具有与参数相同的长度。 [参数:波兰人]. 如果设置了此参数,则对象将设置参数 [参数:DirectTerm], [参数:ErrDB],或者您可以单独设置它们。
如果论点是 残基 如果没有指定对象,它会自动为它设置一个值,它的大小是一个三维矩阵的形式 [参数:NumPorts] 上 [参数:NumPorts] 上 [参数:NumPoles].
| 数据类型 |
|
例子:
S参数的近似
Details
计算架构对象的S参数 例子: 用电阻 R50.
using EngeeRF
hR1 = resistor(50, "R50")
hckt1 = circuit("example")
add(hckt1, [1 2], hR1)
setports(hckt1, [1 0], [2 0])
freq = range(1e3, 2e3, length = 10)
S = sparameters(hckt1, freq, 100)
让我们对S参数进行合理的近似,并推导出对象的属性。 理性的.
fit = rational(S)
println("Delay: ", fit.Delay,
"\nDirectTerm: ", fit.DirectTerm,
"\nErrDB: ", fit.ErrDB,
"\nNumPoles: ", fit.NumPoles,
"\nNumPorts: ", fit.NumPorts,
"\nPoles: ", fit.Poles,
"\nResidues: ", fit.Residues)
Delay: [0.0 0.0; 0.0 0.0]
DirectTerm: [0.0 0.0; 0.0 0.0]
ErrDB: -70.0044060037275
NumPoles: 8
NumPorts: 2
Poles: ComplexF64[-19618.734058480502 + 0.0im, -17016.082839453717 + 0.0im, -14758.703305527004 + 0.0im, -12800.791187707133 + 0.0im, -11102.61868127103 + 0.0im, -9629.7283327366 + 0.0im, -8352.233867019033 + 0.0im, -7244.213767924145 + 0.0im]
Residues: ComplexF64[9.824070000137314e6 + 0.0im 3.929628000055413e7 + 0.0im; 3.9296280000553586e7 + 0.0im 9.824070000137314e6 + 0.0im;;; -4.441693985381927e7 + 0.0im -1.7766775941529915e8 + 0.0im; -1.776677594152968e8 + 0.0im -4.441693985381927e7 + 0.0im;;; 8.972096693535988e7 + 0.0im 3.5888386774148345e8 + 0.0im; 3.588838677414788e8 + 0.0im 8.972096693535988e7 + 0.0im;;; -1.0574206264507577e8 + 0.0im -4.229682505803536e8 + 0.0im; -4.229682505803484e8 + 0.0im -1.0574206264507577e8 + 0.0im;;; 7.903143194708505e7 + 0.0im 3.1612572778837645e8 + 0.0im; 3.1612572778837293e8 + 0.0im 7.903143194708505e7 + 0.0im;;; -3.763439152535831e7 + 0.0im -1.5053756610144946e8 + 0.0im; -1.5053756610144803e8 + 0.0im -3.763439152535831e7 + 0.0im;;; 1.059884870604168e7 + 0.0im 4.239539482417094e7 + 0.0im; 4.239539482417063e7 + 0.0im 1.059884870604168e7 + 0.0im;;; -1.3618189431558964e6 + 0.0im -5.447275772624157e6 + 0.0im; -5.447275772624077e6 + 0.0im -1.3618189431558964e6 + 0.0im]
设施中的杆控制 理性的
Details
创建S参数对象。
using EngeeRF
hR1 = resistor(50, "R50")
hckt = circuit()
add(hckt, [1 2], hR1)
freq = range(1e3, 2e3, length = 10)
S = sparameters(hckt1, freq, 100)
让我们默认执行一个有理近似。
fit = rational(S)
println("Delay: ", fit.Delay,
"\nDirectTerm: ", fit.DirectTerm,
"\nErrDB: ", fit.ErrDB,
"\nNumPoles: ", fit.NumPoles,
"\nNumPorts: ", fit.NumPorts,
"\nPoles: ", fit.Poles,
"\nResidues: ", fit.Residues)
Delay: [0.0 0.0; 0.0 0.0]
DirectTerm: [0.0 0.0; 0.0 0.0]
ErrDB: -70.0044060037275
NumPoles: 8
NumPorts: 2
Poles: ComplexF64[-19618.734058480502 + 0.0im, -17016.082839453717 + 0.0im, -14758.703305527004 + 0.0im, -12800.791187707133 + 0.0im, -11102.61868127103 + 0.0im, -9629.7283327366 + 0.0im, -8352.233867019033 + 0.0im, -7244.213767924145 + 0.0im]
Residues: ComplexF64[9.824070000137314e6 + 0.0im 3.929628000055413e7 + 0.0im; 3.9296280000553586e7 + 0.0im 9.824070000137314e6 + 0.0im;;; -4.441693985381927e7 + 0.0im -1.7766775941529915e8 + 0.0im; -1.776677594152968e8 + 0.0im -4.441693985381927e7 + 0.0im;;; 8.972096693535988e7 + 0.0im 3.5888386774148345e8 + 0.0im; 3.588838677414788e8 + 0.0im 8.972096693535988e7 + 0.0im;;; -1.0574206264507577e8 + 0.0im -4.229682505803536e8 + 0.0im; -4.229682505803484e8 + 0.0im -1.0574206264507577e8 + 0.0im;;; 7.903143194708505e7 + 0.0im 3.1612572778837645e8 + 0.0im; 3.1612572778837293e8 + 0.0im 7.903143194708505e7 + 0.0im;;; -3.763439152535831e7 + 0.0im -1.5053756610144946e8 + 0.0im; -1.5053756610144803e8 + 0.0im -3.763439152535831e7 + 0.0im;;; 1.059884870604168e7 + 0.0im 4.239539482417094e7 + 0.0im; 4.239539482417063e7 + 0.0im 1.059884870604168e7 + 0.0im;;; -1.3618189431558964e6 + 0.0im -5.447275772624157e6 + 0.0im; -5.447275772624077e6 + 0.0im -1.3618189431558964e6 + 0.0im]
让我们将极点的数量限制为四个,并注意在 适合1 高于误差在 适合.
fit1 = rational(S, NumPoles = 4)
println("Delay: ", fit1.Delay,
"\nDirectTerm: ", fit1.DirectTerm,
"\nErrDB: ", fit1.ErrDB,
"\nNumPoles: ", fit1.NumPoles,
"\nNumPorts: ", fit1.NumPorts,
"\nPoles: ", fit1.Poles,
"\nResidues: ", fit1.Residues)
Delay: [0.0 0.0; 0.0 0.0]
DirectTerm: [0.0 0.0; 0.0 0.0]
ErrDB: -36.73200528819233
NumPoles: 4
NumPorts: 2
Poles: ComplexF64[-20106.192982974677 + 0.0im, -16421.270078345475 + 0.0im, -11921.505918955323 + 0.0im, -8654.769253390557 + 0.0im]
Residues: ComplexF64[140272.17338248386 + 0.0im 561088.6935299853 + 0.0im; 561088.6935299853 + 0.0im 140272.17338248386 + 0.0im;;; -198002.15639575062 + 0.0im -792008.6255830727 + 0.0im; -792008.6255830729 + 0.0im -198002.15639575062 + 0.0im;;; 86786.17118317388 + 0.0im 347144.6847327263 + 0.0im; 347144.68473272637 + 0.0im 86786.17118317388 + 0.0im;;; -17635.440523174977 + 0.0im -70541.76209270621 + 0.0im; -70541.7620927062 + 0.0im -17635.440523174977 + 0.0im]
让对象 理性的 使用两倍的极点 适合. 请注意,错误在 适合2 低于in 适合.
fit2 = rational(S, NumPoles = 2 * fit.NumPoles)
println("Delay: ", fit2.Delay,
"\nDirectTerm: ", fit2.DirectTerm,
"\nErrDB: ", fit2.ErrDB,
"\nNumPoles: ", fit2.NumPoles,
"\nNumPorts: ", fit2.NumPorts,
"\nPoles: ", fit2.Poles,
"\nResidues: ", fit2.Residues)
Delay: [0.0 0.0; 0.0 0.0]
DirectTerm: [0.0 0.0; 0.0 0.0]
ErrDB: -112.62617734539667
NumPoles: 16
NumPorts: 2
Poles: ComplexF64[-20977.739719155164 + 0.0im, -19455.169375359666 + 0.0im, -18043.107622234136 + 0.0im, -16733.53371468684 + 0.0im, -15519.009055596898 + 0.0im, -14392.634943348294 + 0.0im, -13348.013386059776 + 0.0im, -12379.210759929256 + 0.0im, -11480.724105265892 + 0.0im, -10647.44986876583 + 0.0im, -9874.654914482498 + 0.0im, -9157.949638828946 + 0.0im, -8493.263036901022 + 0.0im, -7876.81957849392 + 0.0im, -7305.117762464063 + 0.0im, -6774.910227621532 + 0.0im]
Residues: ComplexF64[2.6792602830979095e9 + 0.0im 1.0717041132461851e10 + 0.0im; 1.0717041132424355e10 + 0.0im 2.6792602830979095e9 + 0.0im;;; -1.6551610150291655e10 + 0.0im -6.6206440601639626e10 + 0.0im; -6.620644060138717e10 + 0.0im -1.6551610150291655e10 + 0.0im;;; 4.241942317337665e10 + 0.0im 1.6967769269484216e11 + 0.0im; 1.6967769269412943e11 + 0.0im 4.241942317337665e10 + 0.0im;;; -5.353206936770874e10 + 0.0im -2.1412827747274033e11 + 0.0im; -2.1412827747172232e11 + 0.0im -5.353206936770874e10 + 0.0im;;; 2.2527186601576572e10 + 0.0im 9.010874640736554e10 + 0.0im; 9.010874640679639e10 + 0.0im 2.2527186601576572e10 + 0.0im;;; 2.4717002984422768e10 + 0.0im 9.886801193841866e10 + 0.0im; 9.886801193803366e10 + 0.0im 2.4717002984422768e10 + 0.0im;;; -3.178987886029754e10 + 0.0im -1.2715951544254651e11 + 0.0im; -1.271595154418193e11 + 0.0im -3.178987886029754e10 + 0.0im;;; -4.500302431620929e9 + 0.0im -1.8001209726401134e10 + 0.0im; -1.8001209726451694e10 + 0.0im -4.500302431620929e9 + 0.0im;;; 2.9396296730180614e10 + 0.0im 1.1758518692192986e11 + 0.0im; 1.1758518692128374e11 + 0.0im 2.9396296730180614e10 + 0.0im;;; -1.275527724785865e10 + 0.0im -5.102110899221674e10 + 0.0im; -5.102110899179006e10 + 0.0im -1.275527724785865e10 + 0.0im;;; -1.7836577284244797e10 + 0.0im -7.134630913762163e10 + 0.0im; -7.134630913728137e10 + 0.0im -1.7836577284244797e10 + 0.0im;;; 2.861171487692228e10 + 0.0im 1.1444685950908478e11 + 0.0im; 1.1444685950832954e11 + 0.0im 2.861171487692228e10 + 0.0im;;; -1.9466032508811897e10 + 0.0im -7.786413003633995e10 + 0.0im; -7.78641300357427e10 + 0.0im -1.9466032508811897e10 + 0.0im;;; 7.58099891142497e9 + 0.0im 3.0323995646177166e10 + 0.0im; 3.0323995645913757e10 + 0.0im 7.58099891142497e9 + 0.0im;;; -1.6608386451879582e9 + 0.0im -6.643354580868171e9 + 0.0im; -6.643354580803363e9 + 0.0im -1.6608386451879582e9 + 0.0im;;; 1.607357462849066e8 + 0.0im 6.429429851521003e8 + 0.0im; 6.429429851451098e8 + 0.0im 1.607357462849066e8 + 0.0im]
文学作品
-
Nakatsukasa,Yuji,Olivier Sète和Lloyd N.Trefethen。 «理近似的AAA算法。» _SIAM科学计算期刊_40,第3期(2018年1月):A1494–1522. https://doi.org/10.1137/16M1106122.