init: 验证robust算法

This commit is contained in:
mayge
2025-09-15 11:41:55 -04:00
commit dbf0b1ddb4
14 changed files with 14258 additions and 0 deletions

7
.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
__pycache__/
*.pyc
*.pyo
*.pyd
__pypackages__/
env/
.venv/

12170
capa_results.json Normal file

File diff suppressed because it is too large Load Diff

0
core/__init__.py Normal file
View File

191
core/robust.py Normal file
View File

@@ -0,0 +1,191 @@
from models.basic import ModelBasic
from typing import List,Literal,Dict
import numpy as np
import random
from pydantic import BaseModel
from skrf import Network
from models.basic import ModelBasicDatasetUnit
class RobustParametricConfig(BaseModel):
n_poles: int
max_iter: int = 10
parameter_type: Literal["s","y","z"]
class RobustParametricModel:
def __init__(self,model:ModelBasic,config:RobustParametricConfig):
self.model = model
self.config = config
# 区分训练集和测试集
def _train_test_split(self,train_ratio:float=0.8,random_state:int=42):
random.seed(random_state)
dataset = self.model.results
random.shuffle(dataset)
train_size = int(len(dataset)*train_ratio)
self.train_set = dataset[:train_size]
self.test_set = dataset[train_size:]
return self.train_set, self.test_set
def first_iteration_step(self, datasets: List[ModelBasicDatasetUnit],
param_degree: int = 1):
'''
SK 迭代的第一步 (t=0) 对应论文公式 (3).
目标:
最小化 sum_{样本 n, 频点 f} | N^{(0)}(s_f, g_n) - H(s_f, g_n) |^2
在 t=0 阶段我们令 D^{(0)}(s,g)=1, 仅拟合分子:
N^{(0)}(s,g) = Σ_{p∈P} Σ_{v∈V} c_{p,v} * φ_freq_p(s) * φ_param_v(g)
因此是一个纯线性最小二乘:
H ≈ Σ_{p,v} c_{p,v} F[:,p] ⊗ G[n,v]
记:
F: (Nf, P) 频率正交(或原始)基列
G: (Ns, V) 参数多项式(含常数)基列
设计矩阵 A 大小 (Ns*Nf, P*V), A[(n*Nf + f), (p*V + v)] = F[f,p] * G[n,v]
输出:
self.first_iter_coeffs[(i,j)] = C_{p,v} (P × V) 每个端口对一套系数
self.freq_basis_F = F
self.param_basis_G = G
self.poles 初始极点 (供后续构造有理正交基 / SK 加权使用)
参数:
datasets: 训练用样本列表
param_degree: 参数多项式最大总次数 (默认 1 → 常数 + 线性)
注意:
这里使用简单频率基 [1, 1/(s-a_k)],未做 QR 正交化;
后续 SK 迭代 / 正交化可在第二步再进行。
'''
assert len(datasets) > 0, "空数据集"
# ---------------- 收集频率与端口信息 ----------------
Ns = len(datasets)
freqs = datasets[0].freqs # 频率需要对齐
Nf = freqs.shape[0]
nports = self.model.info.nports
# ---------------- 构造初始极点 (对数分布 + 阻尼) ----------------
def _init_poles(n_poles: int):
fmin, fmax = freqs[0], freqs[-1]
if n_poles <= 0:
return np.array([], dtype=complex)
# 避免 0 Hz用第二个点或微小偏移
start_f = max(fmin if fmin > 0 else freqs[1] if Nf > 1 else 1.0e-3, 1e-12)
f_samples = np.logspace(np.log10(start_f), np.log10(fmax), n_poles)
sigma = 0.02 * 2 * np.pi * fmax # 固定阻尼,可放入 config
return -sigma + 1j * 2 * np.pi * f_samples
self.poles = _init_poles(self.config.n_poles)
s_vec = 1j * 2 * np.pi * freqs # (Nf,)
# ---------------- 频率基 F ----------------
# 列0: 常数 1, 后续列: 1/(s - a_k)
P = 1 + len(self.poles)
F = np.zeros((Nf, P), dtype=complex)
F[:, 0] = 1.0
for k, a in enumerate(self.poles, start=1):
F[:, k] = 1.0 / (s_vec - a)
self.freq_basis_F = F # (Nf, P)
# ---------------- 参数基 G ----------------
# 取出参数向量 g = [param1, param2, ...]
# 假设 datasets[i].parameters 为 dict
param_keys = list(datasets[0].parameters.keys())
d = len(param_keys)
# 构造参数矩阵 (Ns,d)
Pmat = np.zeros((Ns, d), dtype=float)
for i, unit in enumerate(datasets):
for j, k in enumerate(param_keys):
Pmat[i, j] = float(unit.parameters[k])
# 标准化
mean = Pmat.mean(axis=0)
std = Pmat.std(axis=0) + 1e-15
Xn = (Pmat - mean) / std
# 生成多项式指数 (总次数 <= param_degree)
def _gen_param_exps(dim, D):
exps = []
def rec(cur, idx, rem):
if idx == dim:
exps.append(tuple(cur)); return
for t in range(rem + 1):
cur.append(t); rec(cur, idx + 1, rem - t); cur.pop()
rec([], 0, D)
return exps
exps = _gen_param_exps(d, param_degree) # V_exps
V = len(exps)
G = np.zeros((Ns, V), dtype=float)
for vidx, e in enumerate(exps):
val = np.ones(Ns)
for j, p in enumerate(e):
if p:
val *= Xn[:, j] ** p
G[:, vidx] = val
self.param_basis_G = G # (Ns, V)
self.param_basis_meta = {
"keys": param_keys,
"mean": mean.tolist(),
"std": std.tolist(),
"exponents": exps,
"degree": param_degree
}
# ---------------- 构造设计矩阵 A (Kronecker) ----------------
# A shape: (Ns*Nf, P*V)
# 利用广播A_block[n,f,p,v] = F[f,p] * G[n,v]
A4 = np.einsum('fp,nv->nfpv', F, G) # (Ns, Nf, P, V)
A = A4.reshape(Ns * Nf, P * V)
# ---------------- 采集目标 H 数据 ----------------
# 对每个端口对 (i,j) 分别解一个向量 c_{p,v}
# 选择参数类型
param_type = self.config.parameter_type.lower()
valid_types = {"s", "y", "z"}
if param_type not in valid_types:
raise ValueError(f"parameter_type 必须在 {valid_types}")
# 预先载入全部 Network (避免重复 IO)
# H_data[(i,j)] -> (Ns,Nf) 复数
H_data = {}
for i_port in range(nports):
for j_port in range(nports):
H_mat = np.zeros((Ns, Nf), dtype=complex)
for n, unit in enumerate(datasets):
net: Network = unit.network
if param_type == "s":
sij = net.s[:, i_port, j_port]
elif param_type == "y":
sij = net.y[:, i_port, j_port]
else:
sij = net.z[:, i_port, j_port]
# 插值或对齐假设已完成
H_mat[n, :] = sij
H_data[(i_port, j_port)] = H_mat
# ---------------- 最小二乘求系数 ----------------
self.first_iter_coeffs = {}
# 可选: 预计算 A^+ (伪逆) 如果数据不巨大
# pinv = np.linalg.pinv(A)
for key, Hmat in H_data.items():
b = Hmat.reshape(Ns * Nf) # (Ns*Nf,)
# 解 x (长度 P*V)
x, *_ = np.linalg.lstsq(A, b, rcond=None)
C = x.reshape(P, V)
self.first_iter_coeffs[key] = C
# ---------------- 存储便于后续 SK 迭代使用 ----------------
self.meta_first_iter = {
"A_shape": A.shape,
"num_samples": Ns,
"num_freqs": Nf,
"freq_basis_dim": P,
"param_basis_dim": V
}
if getattr(self.config, "verbose", True):
print(f"[t=0] 线性最小二乘完成: A={A.shape}, 频率基P={P}, 参数基V={V}, 端口对={nports*nports}")
return self.first_iter_coeffs

250
core/sk_iter.py Normal file
View File

@@ -0,0 +1,250 @@
import numpy as np
from dataclasses import dataclass
from typing import List, Sequence, Tuple, Optional
@dataclass
class OPVFConfig:
n_poles: int
max_iter: int = 5
tol: float = 1e-3
add_constraint: bool = True
real_split: bool = True
lambda_reg: float = 0.0
verbose: bool = True
# ---------- 参数正交基 ----------
class ParamOrthoBasis:
def __init__(self, params: np.ndarray, total_degree: int):
# params: (Ns, d)
self.mean = params.mean(0)
self.std = params.std(0) + 1e-15
self.exps = self._gen_exps(params.shape[1], total_degree)
M = self._build_monomial_matrix(params) # (Ns,M)
Q,R = np.linalg.qr(M)
self.Q = Q
self.R = R
def _gen_exps(self, dim, D):
exps=[]
def rec(cur, i, rem):
if i==dim:
exps.append(tuple(cur)); return
for k in range(rem+1):
cur.append(k); rec(cur, i+1, rem-k); cur.pop()
rec([],0,D)
return exps
def _build_monomial_matrix(self, params):
X = (params - self.mean)/self.std
Ns = X.shape[0]
M = np.zeros((Ns, len(self.exps)))
for idx,e in enumerate(self.exps):
v = np.ones(Ns)
for j,p in enumerate(e):
if p: v *= X[:,j]**p
M[:,idx]=v
return M
def eval(self, g: np.ndarray) -> np.ndarray:
x = (g - self.mean)/self.std
mono=[]
for e in self.exps:
val=1.0
for j,p in enumerate(e):
if p: val*= x[j]**p
mono.append(val)
mono=np.array(mono)
# φ = mono @ R^{-1}
return mono @ np.linalg.inv(self.R)
# ---------- 频率正交(有理)基 ----------
class RationalFreqBasis:
def __init__(self, freqs: np.ndarray, poles: np.ndarray):
# 构造原始矩阵 G: 列0 常数 1, 后面 1/(s-a_k)
s = 1j*2*np.pi*freqs
cols=[np.ones_like(s)]
for a in poles:
cols.append(1.0/(s - a))
G = np.vstack(cols).T # (Nf, K+1)
# 加权可加 w_f这里统一 1
Q, R = np.linalg.qr(G)
self.Q = Q # Φ(f) (Nf, K+1) 频率正交基取样
self.R = R # 变换: G = Q R
self.freqs = freqs
def eval(self) -> np.ndarray:
return self.Q # 直接返回已正交基取样 (Nf, K+1)
# ---------- 主模型 ----------
class OrthonormalParametricVF:
"""
H(s, μ) = N(s,μ)/D(s,μ)
N(s,μ)= Σ_k c_k(μ) φ_k(s); D(s,μ)= Σ_k ĉ_k(μ) φ_k(s)
其中 φ_k(s) 是频率正交有理基; c_k(μ), ĉ_k(μ) 在参数正交基上展开:
c_k(μ)= Σ_q C[k,q] ψ_q(μ); ĉ_k(μ)= Σ_q Ctilde[k,q] ψ_q(μ)
"""
def __init__(self, cfg: OPVFConfig, freq_basis: RationalFreqBasis, param_basis: ParamOrthoBasis):
self.cfg = cfg
self.fb = freq_basis
self.pb = param_basis
Kp1 = self.fb.Q.shape[1]
Qp = self.pb.Q.shape[1]
self.C = np.zeros((Kp1, Qp), dtype=complex) # 分子
self.Ct = np.zeros((Kp1, Qp), dtype=complex) # 分母
# 初始化分母ĉ_0 ≈ 1其余 0
self.Ct[0,0] = 1.0
def _assemble_phi_param(self, params: np.ndarray) -> np.ndarray:
# 返回 (Ns, Qp)
return self.pb.Q
def fit(self, H_samples: List[np.ndarray], params: np.ndarray):
"""
H_samples: list 长度 Ns, 每个 (Nf,) 复
params: (Ns,d)
"""
Φf = self.fb.eval() # (Nf, K+1)
Ns = len(H_samples)
Nf, Kp1 = Φf.shape
Φμ = self._assemble_phi_param(params) # (Ns, Qp)
Qp = Φμ.shape[1]
# t=0: 只解 C (式3, D=1)
self._solve_t0(H_samples, Φf, Φμ)
D_prev = self._eval_D(Φf, Φμ) # (Nf, Ns)
for it in range(1, self.cfg.max_iter+1):
A, b = self._build_iter_system(H_samples, Φf, Φμ, D_prev)
if self.cfg.lambda_reg>0:
lam = self.cfg.lambda_reg
A = np.vstack([A, lam*np.eye(A.shape[1])])
b = np.concatenate([b, np.zeros(A.shape[1])])
x, *_ = np.linalg.lstsq(A, b, rcond=None)
self._unpack_iter_solution(x, Kp1, Qp)
D_new = self._eval_D(Φf, Φμ)
rel = np.max(np.abs(D_new-D_prev)/(np.abs(D_prev)+1e-12))
if self.cfg.verbose:
print(f"[OPVF-Iter {it}] rel_change={rel:.3e}")
D_prev = D_new
if rel < self.cfg.tol:
if self.cfg.verbose:
print(f"[OPVF] converged at {it}")
break
return self
def _solve_t0(self, H_samples, Φf, Φμ):
Ns = len(H_samples); Nf,Kp1 = Φf.shape; Qp = Φμ.shape[1]
# 设计矩阵行数 Ns*Nf未知数 Kp1*Qp
cols = Kp1*Qp
A = np.zeros((Ns*Nf, cols), dtype=complex)
b = np.zeros(Ns*Nf, dtype=complex)
r = 0
for n,Hn in enumerate(H_samples):
phiμ = Φμ[n] # (Qp,)
# Φf (Nf,Kp1) 外积 phiμ -> (Nf, Kp1*Qp)
blk = np.einsum('fk,q->fkq', Φf, phiμ).reshape(Nf, cols)
A[r:r+Nf,:] = blk
b[r:r+Nf] = Hn
r += Nf
x, *_ = np.linalg.lstsq(A, b, rcond=None)
self.C = x.reshape(Kp1, Qp)
# 分母保持初始 (ĉ_0=1)
def _build_iter_system(self, H_samples, Φf, Φμ, D_prev):
Ns = len(H_samples); Nf,Kp1 = Φf.shape; Qp=Φμ.shape[1]
# 未知C (Kp1*Qp) + Ct (Kp1*Qp) 但固定 Ct[0,0]=1可去掉该变量
mask_fix = np.zeros((Kp1,Qp), dtype=bool)
mask_fix[0,0]=True
idx_map={}
col=0
for i in range(Kp1):
for j in range(Qp):
idx_map[('C',i,j)] = col; col+=1
for i in range(Kp1):
for j in range(Qp):
if mask_fix[i,j]: continue
idx_map[('Ct',i,j)] = col; col+=1
cols = col
rows = Ns*Nf
A = np.zeros((rows, cols), dtype=complex)
b = np.zeros(rows, dtype=complex)
r=0
for n,Hn in enumerate(H_samples):
phiμ = Φμ[n]
Dp = D_prev[:,n] # (Nf,)
invDp = 1.0/(Dp + 1e-12)
# 分子块: (Φf φμ^T) / D_prev
Num_blk = np.einsum('fk,q->fkq', Φf, phiμ).reshape(Nf, Kp1*Qp)
Num_blk = (Num_blk.T * invDp).T
# 填 C 部分
for i in range(Kp1):
for j in range(Qp):
A[r:r+Nf, idx_map[('C',i,j)]] = Num_blk[:, i*Qp + j]
# 分母块: -(H * Φf φμ^T)/D_prev
Den_blk = (Num_blk.T * Hn).T * (-1.0)
for i in range(Kp1):
for j in range(Qp):
if mask_fix[i,j]: continue
A[r:r+Nf, idx_map[('Ct',i,j)]] = Den_blk[:, i*Qp + j]
# 右端 0
r += Nf
# 约束行 (式5)(8) 可选Re( Σ_k D^{(t)}/D^{(t-1)} ) = K+1
if self.cfg.add_constraint:
row_c = np.zeros(cols, dtype=complex)
# D^{(t)} ≈ Σ Ct_k φ_k(s) ; 用代表样本 n=0, 对所有频率平均
n0=0
phiμ0=Φμ[n0]
mean_phiμ = phiμ0 # 可换平均
# φ_k(s) 平均
mean_phif = Φf.mean(0) # (Kp1,)
for i in range(Kp1):
for j in range(Qp):
if mask_fix[i,j]: continue
row_c[idx_map[('Ct',i,j)]] = mean_phif[i]*mean_phiμ[j]
rhs = (Kp1) # K+1
A = np.vstack([A, np.real(row_c) if self.cfg.real_split else row_c])
b = np.concatenate([b, [rhs]])
# 拆实虚
if self.cfg.real_split:
A_real = np.vstack([np.real(A), np.imag(A)])
b_real = np.concatenate([np.real(b), np.imag(b)])
else:
A_real, b_real = A, b
return A_real, b_real
def _unpack_iter_solution(self, x, Kp1, Qp):
# 重新填回 C, Ct (保持 Ct[0,0]=1)
# 构建与 _build_iter_system 相同的 idx_map
mask_fix = np.zeros((Kp1,Qp), dtype=bool); mask_fix[0,0]=True
idx_C = Kp1*Qp
# 注意:我们当时 C 索引从 0..(Kp1*Qp-1)
self.C = x[:idx_C].reshape(Kp1, Qp)
Ct_new = self.Ct.copy()
pos = idx_C
for i in range(Kp1):
for j in range(Qp):
if mask_fix[i,j]: continue
Ct_new[i,j]=x[pos]; pos+=1
self.Ct = Ct_new
def _eval_C_mu(self, phiμ):
# 返回 c_k(μ) (Kp1,)
return self.C @ phiμ
def _eval_Ct_mu(self, phiμ):
return self.Ct @ phiμ
def _eval_D(self, Φf, Φμ):
# D(f, sample)= Σ_k ĉ_k(μ_n) φ_k(f)
Kp1 = Φf.shape[1]
Ns = Φμ.shape[0]
D = np.zeros((Φf.shape[0], Ns), dtype=complex)
for n in range(Ns):
ct_mu = self._eval_Ct_mu(Φμ[n])
D[:,n] = Φf @ ct_mu
return D
def evaluate(self, freqs: np.ndarray, g: np.ndarray):
assert np.allclose(freqs, self.fb.freqs), "频率需在训练网格上 (示例简化)"
Φf = self.fb.Q # (Nf,K+1)
phiμ = self.pb.eval(g) # (Qp,)
num = Φf @ (self.C @ phiμ)
den = Φf @ (self.Ct @ phiμ)
return num / (den + 1e-15)

15
main.py Normal file
View File

@@ -0,0 +1,15 @@
from models.capa import Capa
W = []
L = []
i = 15.52
while i <= 100:
W.append(i)
L.append(i)
i = int(i*1.05*100 +0.5) / 100.0
capa = Capa()
capa.sweep(W,L)
print(capa.network(result_dir=capa.results[0].result_dir,id=capa.results[0].id))

149
models/basic.py Normal file
View File

@@ -0,0 +1,149 @@
from abc import abstractmethod
from skrf import Network
from schemas.paramer import SimulationRequestUnit, UuidResponseUnit, SimulationResponseUnit
from typing import List, Literal, Union, Dict
import requests
import time
from utils import send_get_request
from pydantic import BaseModel, Field
import itertools
import json
import numpy as np
class ModelBasicParametersUnit(BaseModel):
name: str
type: Literal["number","integer","string","boolean"]
range: List[Union[float,int,str,bool]]
class ModelBasicInfo(BaseModel):
base_url = "http://localhost:8105/api/v1"
nports: int = Field(default=2)
cell_name: str
template_name: str
user_id: int = Field(default=0)
template_version: str = Field(default="")
class ModelBasicDatasetUnit(BaseModel):
nports: int = Field(default=2)
parameters: Dict[str, Union[float, int, str, bool]]
id: int = Field(default=0)
result_dir: str = Field(default="")
@property
def network(self) -> Network:
try:
network = Network(f"{self.result_dir}/{self.id}.s{self.nports}p")
return network
except Exception as e:
raise RuntimeError(f"Error loading network from {self.result_dir}: {e}")
@property
def s_params(self) -> np.ndarray:
return self.network.s
@property
def y_params(self) -> np.ndarray:
return self.network.y
@property
def z_params(self) -> np.ndarray:
return self.network.z
@property
def freqs(self) -> np.ndarray:
return self.network.f
class ModelBasic:
def __init__(self):
self._dataset:List[ModelBasicDatasetUnit] = []
@property
@abstractmethod
def info(self)->ModelBasicInfo:
pass
@property
@abstractmethod
def parameters(self)->List[ModelBasicParametersUnit]:
pass
@property
@abstractmethod
def settings(self)->dict:
pass
def sweep(self):
parameters_list = []
lst = [res.range for res in self.parameters]
parameters_name = [res.name for res in self.parameters]
result = [list(item) for item in itertools.product(*lst)]
for res in result:
parameters_list.append({parameters_name[i]:res[i] for i in range(len(res))})
for res in parameters_list:
request_unit = SimulationRequestUnit(
user_id=self.info.user_id,
template_name=self.info.template_name,
template_version=self.info.template_version,
cell_name=self.info.cell_name,
parameters=res,
settings=self.settings
)
response = self.simulate(request_unit)
self._dataset.append(ModelBasicDatasetUnit(nports=self.info.nports,parameters=res, id=response.id, result_dir=response.result_path))
@property
def results(self)->List[ModelBasicDatasetUnit]:
return self._dataset
def export(self, path:str|None):
if path is None:
path = f"{self.info.cell_name}_dataset.json"
with open(path,"w") as f:
json.dump([dict(item) for item in self.results],f,indent=4)
def load(self, path:str|None):
if path is None:
path = f"{self.info.cell_name}_dataset.json"
with open(path,"r") as f:
data = json.load(f)
self._dataset += [ModelBasicDatasetUnit(**item) for item in data]
def clear(self):
self._dataset = []
def simulate(self,simulation_request:SimulationRequestUnit)->UuidResponseUnit:
def send_simulate_request(url, data:list)->list[dict]:
response = requests.post(url, json = data)
if response.status_code not in [200,201,202]:
raise RuntimeError(f"send_simulate_request: {response.status_code}, {response.text}")
return response.json()
response = send_simulate_request(f"{self.info.base_url}/simulations/create", [dict(simulation_request)])
simulation_response_model:SimulationResponseUnit = SimulationResponseUnit(**(response[0]))
time.sleep(0.01)
response = send_get_request(f"{self.info.base_url}/simulations/input_hash/{simulation_response_model.input_hash}")
assert isinstance(response, dict), "Response is not a dictionary."
uuid_model = UuidResponseUnit(**response)
time.sleep(0.01) # Wait for 2 seconds before checking the status again
status = uuid_model.status
while status != "completed" and status != "failed":
time.sleep(0.01) # Wait for 2 seconds before checking again
response = send_get_request(f"{self.info.base_url}/simulations/input_hash/{simulation_response_model.input_hash}")
assert isinstance(response, dict), "Response is not a dictionary."
uuid_model = UuidResponseUnit(**response)
assert response is not None, "No response received from the server."
status = uuid_model.status
if status == "failed":
raise RuntimeError(f"Simulation failed: {uuid_model.error_message}")
else:
return uuid_model

45
models/capa.py Normal file
View File

@@ -0,0 +1,45 @@
from typing import List,Optional
from pydantic import BaseModel, Field
from schemas.paramer import SimulationRequestUnit
from skrf import Network
import re
from models.basic import ModelBasic, ModelBasicParametersUnit, ModelBasicInfo, ModelBasicDatasetUnit
W = []
L = []
i = 15.52
while i <= 100:
W.append(i)
L.append(i)
i = int(i*1.05*100 + 0.5) / 100.0
class Capa(ModelBasic):
def __init__(self):
super().__init__()
@property
def info(self) -> ModelBasicInfo:
return ModelBasicInfo(
nports=2,
cell_name="capa",
template_name="em_interface_compound",
user_id=0,
template_version=""
)
@property
def settings(self) -> dict:
return {}
@property
def parameters(self) -> List[ModelBasicParametersUnit]:
return [
ModelBasicParametersUnit(name="W",type="number",range=W),
ModelBasicParametersUnit(name="L",type="number",range=L)
]

309
outputs/capa_parametric.s2p Normal file
View File

@@ -0,0 +1,309 @@
! Created with skrf 1.8.0 (http://scikit-rf.org).
# Hz S RI R 50.0
!freq ReS11 ImS11 ReS21 ImS21 ReS12 ImS12 ReS22 ImS22
0.0 0.5169316987261682 -0.14305278198989352 0.4988694955145437 0.12530267192181432 0.4988694955145437 0.12530267192181432 0.5263854174928203 -0.14417829506357768
1000.0 0.5169316947040424 -0.14305278151191225 0.4988694984093659 0.12530266799393616 0.4988694984093659 0.12530266799393616 0.5263854133767084 -0.14417829453782283
10000.0 0.5169316585049104 -0.14305277721008075 0.4988695244627657 0.12530263264303276 0.4988695244627657 0.12530263264303276 0.5263853763317018 -0.14417828980602918
12589.0 0.5169316480916267 -0.14305277597258723 0.4988695319574604 0.12530262247375623 0.4988695319574604 0.12530262247375623 0.5263853656750881 -0.14417828844484987
15849.0 0.5169316349794967 -0.14305277441436826 0.4988695413945808 0.12530260966887344 0.4988695413945808 0.12530260966887344 0.5263853522565635 -0.14417828673088906
19953.0 0.5169316184726925 -0.1430527724527331 0.4988695532749311 0.12530259354886147 0.4988695532749311 0.12530259354886147 0.5263853353640404 -0.14417828457319115
25119.0 0.5169315976943908 -0.14305276998348182 0.4988695682295826 0.12530257325744293 0.4988695682295826 0.12530257325744293 0.5263853141002066 -0.14417828185714157
31623.0 0.5169315715344848 -0.1430527668746916 0.4988695870575062 0.1253025477105234 0.4988695870575062 0.1253025477105234 0.526385287329015 -0.14417827843763203
39811.0 0.5169315386013189 -0.14305276296098088 0.4988696107603104 0.12530251554905705 0.4988696107603104 0.12530251554905705 0.5263852536262912 -0.1441782741327513
50119.0 0.5169314971412463 -0.14305275803394987 0.49886964060013766 0.12530247506048903 0.49886964060013766 0.12530247506048903 0.5263852111974101 -0.1441782687132703
63096.0 0.5169314449461201 -0.14305275183118685 0.4988696781662454 0.1253024240884142 0.4988696781662454 0.1253024240884142 0.5263851577826266 -0.1441782618905496
79433.0 0.5169313792366513 -0.14305274402240672 0.49886972545895575 0.12530235991866878 0.49886972545895575 0.12530235991866878 0.5263850905377072 -0.1441782533012926
100000.0 0.5169312965135905 -0.14305273419176578 0.498869784996764 0.12530227913399875 0.498869784996764 0.12530227913399875 0.5263850058816346 -0.14417824248809258
125893.0 0.5169311923686877 -0.14305272181539658 0.4988698599523953 0.12530217742944966 0.4988698599523953 0.12530217742944966 0.5263848993031504 -0.1441782288747222
158489.0 0.5169310612634759 -0.14305270623511884 0.4988699543120198 0.12530204939633327 0.4988699543120198 0.12530204939633327 0.5263847651343683 -0.1441782117372171
199526.0 0.5169308962075003 -0.14305268662020118 0.49887007310683856 0.1253018882079974 0.49887007310683856 0.1253018882079974 0.5263845962214859 -0.14417819016181527
251189.0 0.5169306884124163 -0.14305266192625446 0.49887022266203807 0.12530168528202823 0.49887022266203807 0.12530168528202823 0.5263843835707991 -0.1441781629997424
316228.0 0.5169304268173779 -0.14305263083883016 0.4988704109383793 0.12530142981676085 0.4988704109383793 0.12530142981676085 0.526384115863 -0.14417812880517264
398107.0 0.5169300974897413 -0.14305259170220114 0.4988706479635265 0.12530110820602533 0.4988706479635265 0.12530110820602533 0.5263837788398773 -0.14417808575689117
501187.0 0.5169296828890162 -0.14305254243189108 0.4988709463617992 0.125300703320345 0.4988709463617992 0.125300703320345 0.5263833545510671 -0.14417803156208114
630957.0 0.5169291609377541 -0.14305248040426072 0.4988713220228765 0.12530019359959674 0.4988713220228765 0.12530019359959674 0.5263828204032315 -0.1441779633348741
794328.0 0.5169285038390437 -0.14305240231598146 0.4988717949528746 0.12529955189821454 0.4988717949528746 0.12529955189821454 0.5263821479499213 -0.14417787744177832
1000000.0 0.5169276766003909 -0.14305230400861618 0.49887239033674674 0.12529874404365846 0.49887239033674674 0.12529874404365846 0.5263813013809635 -0.14417776930872658
1258925.0 0.5169266351714739 -0.14305218024731395 0.49887313987858567 0.12529772701780695 0.49887313987858567 0.12529772701780695 0.526380235616701 -0.14417763317765178
1584893.0 0.5169253240871785 -0.14305202444071294 0.49887408349798956 0.12529644665522024 0.49887408349798956 0.12529644665522024 0.5263788938959513 -0.14417746179839447
1995262.0 0.5169236735314454 -0.14305182829201415 0.4988752714432822 0.12529483477578932 0.4988752714432822 0.12529483477578932 0.5263772047712447 -0.144177246044902
2511886.0 0.5169215956047378 -0.14305158135541474 0.49887676697790806 0.1252928055396649 0.49887676697790806 0.1252928055396649 0.5263750782890728 -0.1441769744273278
3162278.0 0.5169189796463092 -0.14305127048021582 0.4988786497471103 0.12529025087913537 0.4988786497471103 0.12529025087913537 0.5263724012028501 -0.14417663248057871
3981072.0 0.5169156863538554 -0.1430508791120138 0.49888102001016127 0.12528703475606862 0.49888102001016127 0.12528703475606862 0.5263690309551585 -0.14417620199566117
5011872.0 0.5169115403466041 -0.14305038640891315 0.4988840039928882 0.12528298589926556 0.4988840039928882 0.12528298589926556 0.5263647880670566 -0.14417566004756066
6309573.0 0.5169063208299607 -0.14304976613213158 0.49888776060655593 0.12527788868785483 0.49888776060655593 0.12527788868785483 0.5263594465845839 -0.14417497777496466
7943282.0 0.5168997498468791 -0.14304898524981696 0.4988924899036425 0.12527147167796068 0.4988924899036425 0.12527147167796068 0.5263527220555985 -0.14417411884453263
10000000.0 0.5168914774683946 -0.14304800217712021 0.4988984437365743 0.12526339314025572 0.4988984437365743 0.12526339314025572 0.5263442563742526 -0.14417303751506683
12589254.0 0.516881063163137 -0.14304676456218599 0.49890593916654286 0.12525322286602916 0.49890593916654286 0.12525322286602916 0.526333598715163 -0.14417167620221563
15848932.0 0.5168679523282272 -0.14304520649713184 0.498915375354792 0.12524041924801782 0.498915375354792 0.12524041924801782 0.5263201815158981 -0.14416996241069416
19952623.0 0.5168514467668739 -0.14304324500966592 0.49892725481061334 0.12522430044978053 0.49892725481061334 0.12522430044978053 0.5263032902647165 -0.14416780487524355
25118864.0 0.5168306674957757 -0.14304077564319373 0.49894221015976653 0.12520400808460874 0.49894221015976653 0.12520400808460874 0.5262820254388815 -0.14416508869897593
31622777.0 0.5168045079396447 -0.14303766689455033 0.49896103783152573 0.12517846150680842 0.49896103783152573 0.12517846150680842 0.5262552546054668 -0.14416166923516513
39810717.0 0.5167715750151072 -0.14303375321253045 0.49898474046203506 0.12514630027614093 0.49898474046203506 0.12514630027614093 0.5262215521285504 -0.14415736438598972
50118723.0 0.5167301149184613 -0.14302882617865584 0.49901458030667317 0.12510581168454307 0.49901458030667317 0.12510581168454307 0.5261791232228341 -0.1441519449018302
63095734.0 0.5166779197480051 -0.14302262341036215 0.49905214644624535 0.12505483956650784 0.49905214644624535 0.12505483956650784 0.5261257083939916 -0.14414512217534436
79432823.0 0.5166122099212112 -0.1430148145876941 0.4990994394142159 0.12499066947149441 0.4990994394142159 0.12499066947149441 0.5260584631082538 -0.14413653287154995
100000000.0 0.5165294861484319 -0.1430049838621606 0.49915897773484985 0.12490988410622846 0.49915897773484985 0.12490988410622846 0.525973806307144 -0.14412571957846906
125892541.0 0.5164253430918343 -0.1429926077123401 0.4992339320374304 0.12480818136003487 0.4992339320374304 0.12480818136003487 0.5258672297121321 -0.1441121064494314
158489319.0 0.5162942347507815 -0.14297702706275484 0.499328293914133 0.12468014518777729 0.499328293914133 0.12468014518777729 0.525733057727714 -0.14409496853526813
199526231.0 0.516129179129203 -0.14295741218713942 0.4994470884781358 0.12451895719754857 0.4994470884781358 0.12451895719754857 0.5255641452076658 -0.14407339317971052
251188643.0 0.5159213864101769 -0.14293271852146178 0.4995966419754571 0.1243160335379748 0.4995966419754571 0.1243160335379748 0.5253514969410836 -0.14404623141598272
316227766.0 0.5156597908770215 -0.14290163103837383 0.49978491867278524 0.1240605677874669 0.49978491867278524 0.1240605677874669 0.5250837886357498 -0.14401203678155508
398107171.0 0.5153304616115358 -0.14286249421578498 0.5000219449923526 0.12373895546115266 0.5000219449923526 0.12373895546115266 0.5247467638460045 -0.1439689882871723
501187234.0 0.5149158606330113 -0.14281322387560505 0.5003203434474182 0.12333406953339042 0.5003203434474182 0.12333406953339042 0.5243224747764942 -0.1439147934439998
630957344.0 0.514393908928449 -0.1427511961926681 0.50069600484314 0.12282434835303803 0.50069600484314 0.12282434835303803 0.5237883264880697 -0.14384656617914132
794328235.0 0.5137368106564871 -0.14267310796550947 0.5011689345257409 0.12218264739897594 0.5011689345257409 0.12218264739897594 0.5231158736265745 -0.1437606731406718
800000996.0 0.5137139940982403 -0.14267039649196073 0.5011853561602363 0.12216036548496063 0.5011853561602363 0.12216036548496063 0.5230925239077618 -0.14375769065905702
1000000000.0 0.5129095729488049 -0.14257480071256423 0.5017643177176059 0.1213747937659555 0.5017643177176059 0.1213747937659555 0.5222693056360564 -0.14365254021249166
1600000990.0 0.5104962935004823 -0.1422880114729652 0.5035012139053171 0.11901806298384085 0.5035012139053171 0.11901806298384085 0.5197996344470474 -0.14333708678134274
2400000990.0 0.5072785928785918 -0.14190562645110177 0.505817071667767 0.11587576045915382 0.505817071667767 0.11587576045915382 0.5165067449616364 -0.14291648290047396
3200000980.0 0.5040608922969224 -0.14152324143401826 0.5081329294012686 0.11273345797374554 0.5081329294012686 0.11273345797374554 0.5132138555173865 -0.14249587902486277
4000000980.0 0.5008431916750319 -0.14114085641215496 0.5104487871637186 0.10959115544905842 0.5104487871637186 0.10959115544905842 0.5099209660319755 -0.1420752751439941
4800000980.0 0.49762549105314136 -0.14075847139029166 0.5127646449261685 0.10644885292437128 0.5127646449261685 0.10644885292437128 0.5066280765465645 -0.14165467126312542
5600000970.0 0.4944077904714721 -0.1403760863732082 0.5150805026596701 0.10330655043896295 0.5150805026596701 0.10330655043896295 0.5033351871023147 -0.1412340673875143
6400000970.0 0.49119008984958146 -0.13999370135134492 0.51739636042212 0.10016424791427578 0.51739636042212 0.10016424791427578 0.5000422976169037 -0.14081346350664567
7200000960.0 0.48797238926791214 -0.1396113163342615 0.5197122181556217 0.0970219454288674 0.5197122181556217 0.0970219454288674 0.4967494081726538 -0.14039285963103457
8000000960.0 0.4847546886460215 -0.13922893131239825 0.5220280759180717 0.09387964290418022 0.5220280759180717 0.09387964290418022 0.49345651868724266 -0.13997225575016592
8800000960.0 0.48153698802413086 -0.138846546290535 0.5243439336805215 0.09073734037949305 0.5243439336805215 0.09073734037949305 0.4901636292018316 -0.1395516518692973
9600000950.0 0.47831928744246155 -0.13846416127345157 0.5266597914140232 0.08759503789408464 0.5266597914140232 0.08759503789408464 0.48687073975758166 -0.13913104799368622
10400000900.0 0.4751015870216772 -0.1380817762754874 0.5289756490317319 0.08445273556579136 0.5289756490317319 0.08445273556579136 0.48357785047797625 -0.13871044413910533
11200000900.0 0.47188388639978657 -0.13769939125362413 0.5312915067941818 0.08131043304110418 0.5312915067941818 0.08131043304110418 0.4802849609925652 -0.1382898402582367
12000000900.0 0.4686661857778959 -0.13731700623176088 0.5336073645566316 0.078168130516417 0.5336073645566316 0.078168130516417 0.4769920715071541 -0.13786923637736806
12800000900.0 0.4654484851560053 -0.13693462120989763 0.5359232223190815 0.07502582799172978 0.5359232223190815 0.07502582799172978 0.473699182021743 -0.13744863249649944
13600000900.0 0.4622307845341146 -0.1365522361880344 0.5382390800815314 0.0718835254670426 0.5382390800815314 0.0718835254670426 0.4704062925363319 -0.13702802861563082
14400000900.0 0.45901308391222395 -0.13616985116617114 0.5405549378439812 0.0687412229423554 0.5405549378439812 0.0687412229423554 0.46711340305092086 -0.13660742473476217
15200000900.0 0.4557953832903334 -0.13578746614430787 0.5428707956064311 0.06559892041766822 0.5428707956064311 0.06559892041766822 0.4638205135655099 -0.13618682085389353
16000000900.0 0.4525776826684428 -0.13540508112244465 0.545186653368881 0.06245661789298104 0.545186653368881 0.06245661789298104 0.46052762408009884 -0.1357662169730249
16800000900.0 0.44935998204655214 -0.1350226961005814 0.5475025111313307 0.059314315368293846 0.5475025111313307 0.059314315368293846 0.4572347345946877 -0.13534561309215629
17600000900.0 0.4461422814246615 -0.13464031107871813 0.5498183688937807 0.056172012843606664 0.5498183688937807 0.056172012843606664 0.45394184510927665 -0.13492500921128764
18400000900.0 0.44292458080277086 -0.13425792605685488 0.5521342266562306 0.05302971031891947 0.5521342266562306 0.05302971031891947 0.4506489556238656 -0.134504405330419
19200000900.0 0.4397068801808802 -0.13387554103499164 0.5544500844186804 0.049887407794232286 0.5544500844186804 0.049887407794232286 0.44735606613845447 -0.13408380144955034
20000000900.0 0.4364891795589896 -0.1334931560131284 0.5567659421811303 0.04674510526954509 0.5567659421811303 0.04674510526954509 0.4440631766530434 -0.13366319756868175
20800000900.0 0.43327147893709894 -0.13311077099126514 0.5590817999435801 0.04360280274485791 0.5590817999435801 0.04360280274485791 0.44077028716763234 -0.1332425936878131
21600000900.0 0.43005377831520825 -0.13272838596940187 0.56139765770603 0.040460500220170684 0.56139765770603 0.040460500220170684 0.43747739768222127 -0.13282198980694446
22400000900.0 0.4268360776933176 -0.13234600094753862 0.5637135154684798 0.03731819769548349 0.5637135154684798 0.03731819769548349 0.43418450819681015 -0.1324013859260758
23200000900.0 0.42361837707142697 -0.13196361592567538 0.5660293732309296 0.03417589517079632 0.5660293732309296 0.03417589517079632 0.4308916187113991 -0.1319807820452072
24000000900.0 0.4204006764495363 -0.1315812309038121 0.5683452309933795 0.031033592646109123 0.5683452309933795 0.031033592646109123 0.427598729225988 -0.13156017816433854
24800000900.0 0.4171829758276457 -0.13119884588194886 0.5706610887558294 0.02789129012142194 0.5706610887558294 0.02789129012142194 0.42430583974057695 -0.1311395742834699
25600000900.0 0.413965275205755 -0.13081646086008564 0.5729769465182792 0.024748987596734745 0.5729769465182792 0.024748987596734745 0.42101295025516583 -0.13071897040260128
26400000900.0 0.41074757458386435 -0.13043407583822236 0.5752928042807292 0.02160668507204755 0.5752928042807292 0.02160668507204755 0.41772006076975476 -0.13029836652173266
27200000900.0 0.4075298739619737 -0.13005169081635912 0.577608662043179 0.018464382547360367 0.577608662043179 0.018464382547360367 0.4144271712843437 -0.129877762640864
28000000900.0 0.40431217334008307 -0.12966930579449584 0.5799245198056288 0.01532208002267317 0.5799245198056288 0.01532208002267317 0.41113428179893263 -0.12945715875999536
28800000900.0 0.40109447271819243 -0.1292869207726326 0.5822403775680787 0.012179777497985989 0.5822403775680787 0.012179777497985989 0.40784139231352157 -0.1290365548791267
29600000900.0 0.3978767720963018 -0.12890453575076935 0.5845562353305285 0.009037474973298792 0.5845562353305285 0.009037474973298792 0.40454850282811045 -0.1286159509982581
30400000800.0 0.3946590718766237 -0.1285221507767042 0.5868720928034962 0.0058951728413994126 0.5868720928034962 0.0058951728413994126 0.4012556137543105 -0.12819534716996492
31200000800.0 0.39144137125473305 -0.12813976575484096 0.589187950565946 0.0027528703167122442 0.589187950565946 0.0027528703167122442 0.39796272426889945 -0.1277747432890963
32000000800.0 0.3882236706328424 -0.1277573807329777 0.5915038083283959 -0.0003894322079749657 0.5915038083283959 -0.0003894322079749657 0.3946698347834884 -0.12735413940822765
32800000800.0 0.38500597001095177 -0.12737499571111444 0.5938196660908457 -0.003531734732662134 0.5938196660908457 -0.003531734732662134 0.3913769452980773 -0.126933535527359
33333334200.0 0.38286083599488296 -0.1271200723313402 0.5953635714588004 -0.005626603344312142 0.5953635714588004 -0.005626603344312142 0.38918168536672915 -0.12665313290506292
33600000800.0 0.3817882693890611 -0.12699261068925122 0.5961355238532955 -0.00667403725734933 0.5961355238532955 -0.00667403725734933 0.38808405581266625 -0.12651293164649038
34400000800.0 0.37857056876717043 -0.12661022566738794 0.5984513816157454 -0.009816339782036526 0.5984513816157454 -0.009816339782036526 0.3847911663272552 -0.12609232776562176
35200000800.0 0.3753528681452798 -0.1262278406455247 0.6007672393781952 -0.012958642306723722 0.6007672393781952 -0.012958642306723722 0.38149827684184406 -0.12567172388475312
36000000800.0 0.37213516752338927 -0.12584545562366145 0.6030830971406451 -0.01610094483141089 0.6030830971406451 -0.01610094483141089 0.378205387356433 -0.12525112000388447
36800000800.0 0.3689174669014986 -0.12546307060179818 0.6053989549030949 -0.019243247356098087 0.6053989549030949 -0.019243247356098087 0.374912497871022 -0.12483051612301584
37600000800.0 0.365699766279608 -0.12508068557993493 0.6077148126655447 -0.022385549880785283 0.6077148126655447 -0.022385549880785283 0.3716196083856109 -0.12440991224214719
38400000800.0 0.36248206565771734 -0.12469830055807167 0.6100306704279946 -0.02552785240547245 0.6100306704279946 -0.02552785240547245 0.36832671890019986 -0.12398930836127856
39200000800.0 0.3592643650358267 -0.12431591553620841 0.6123465281904446 -0.028670154930159675 0.6123465281904446 -0.028670154930159675 0.3650338294147888 -0.12356870448040991
40000000800.0 0.35604666441393606 -0.12393353051434516 0.6146623859528944 -0.03181245745484684 0.6146623859528944 -0.03181245745484684 0.3617409399293777 -0.12314810059954127
40800000800.0 0.3528289637920454 -0.1235511454924819 0.6169782437153443 -0.03495475997953404 0.6169782437153443 -0.03495475997953404 0.35844805044396666 -0.12272749671867263
41600000800.0 0.3496112631701548 -0.12316876047061864 0.6192941014777941 -0.03809706250422121 0.6192941014777941 -0.03809706250422121 0.3551551609585556 -0.122306892837804
42400000800.0 0.3463935625482641 -0.12278637544875538 0.621609959240244 -0.041239365028908403 0.621609959240244 -0.041239365028908403 0.3518622714731445 -0.12188628895693535
43200000800.0 0.34317586192637345 -0.12240399042689212 0.6239258170026938 -0.0443816675535956 0.6239258170026938 -0.0443816675535956 0.3485693819877334 -0.12146568507606671
44000000800.0 0.3399581613044828 -0.12202160540502888 0.6262416747651436 -0.047523970078282796 0.6262416747651436 -0.047523970078282796 0.3452764925023223 -0.12104508119519806
44800000800.0 0.3367404606825921 -0.12163922038316562 0.6285575325275935 -0.05066627260297002 0.6285575325275935 -0.05066627260297002 0.3419836030169112 -0.12062447731432943
45600000800.0 0.3335227600607015 -0.12125683536130236 0.6308733902900433 -0.05380857512765719 0.6308733902900433 -0.05380857512765719 0.33869071353150015 -0.12020387343346078
46400000800.0 0.33030505943881083 -0.12087445033943911 0.6331892480524932 -0.056950877652344384 0.6331892480524932 -0.056950877652344384 0.3353978240460891 -0.11978326955259215
47200000800.0 0.3270873588169202 -0.12049206531757584 0.635505105814943 -0.06009318017703158 0.635505105814943 -0.06009318017703158 0.33210493456067797 -0.1193626656717235
48000000800.0 0.32386965819502955 -0.12010968029571262 0.6378209635773928 -0.06323548270171878 0.6378209635773928 -0.06323548270171878 0.3288120450752669 -0.11894206179085487
48800000800.0 0.3206519575731389 -0.11972729527384936 0.6401368213398427 -0.06637778522640594 0.6401368213398427 -0.06637778522640594 0.32551915558985584 -0.11852145790998625
49600000800.0 0.3174342569512483 -0.1193449102519861 0.6424526791022925 -0.06952008775109311 0.6424526791022925 -0.06952008775109311 0.32222626610444477 -0.11810085402911762
50400000700.0 0.31421655673157023 -0.11896252527792098 0.6447685365752602 -0.0726623898829925 0.6447685365752602 -0.0726623898829925 0.31893337703064484 -0.11768025020082445
51200000700.0 0.3109988561096796 -0.11858014025605772 0.64708439433771 -0.0758046924076797 0.64708439433771 -0.0758046924076797 0.31564048754523377 -0.11725964631995581
52000000700.0 0.30778115548778895 -0.11819775523419446 0.6494002521001598 -0.07894699493236687 0.6494002521001598 -0.07894699493236687 0.3123475980598227 -0.11683904243908717
52800000700.0 0.3045634548658982 -0.11781537021233121 0.6517161098626097 -0.0820892974570541 0.6517161098626097 -0.0820892974570541 0.30905470857441164 -0.11641843855821853
53600000700.0 0.3013457542440076 -0.11743298519046795 0.6540319676250597 -0.08523159998174126 0.6540319676250597 -0.08523159998174126 0.3057618190890005 -0.11599783467734989
54400000700.0 0.298128053622117 -0.11705060016860469 0.6563478253875095 -0.08837390250642846 0.6563478253875095 -0.08837390250642846 0.30246892960358945 -0.11557723079648125
55200000700.0 0.29491035300022633 -0.11666821514674144 0.6586636831499593 -0.09151620503111563 0.6586636831499593 -0.09151620503111563 0.2991760401181784 -0.11515662691561261
56000000700.0 0.29169265237833564 -0.11628583012487817 0.6609795409124092 -0.09465850755580285 0.6609795409124092 -0.09465850755580285 0.29588315063276727 -0.11473602303474396
56800000700.0 0.288474951756445 -0.11590344510301492 0.663295398674859 -0.09780081008049002 0.663295398674859 -0.09780081008049002 0.2925902611473562 -0.11431541915387533
57600000700.0 0.28525725113455436 -0.11552106008115166 0.6656112564373089 -0.10094311260517722 0.6656112564373089 -0.10094311260517722 0.28929737166194514 -0.11389481527300668
58400000700.0 0.2820395505126637 -0.1151386750592884 0.6679271141997587 -0.10408541512986441 0.6679271141997587 -0.10408541512986441 0.28600448217653407 -0.11347421139213805
59200000700.0 0.2788218498907731 -0.11475629003742516 0.6702429719622085 -0.10722771765455161 0.6702429719622085 -0.10722771765455161 0.282711592691123 -0.1130536075112694
60000000700.0 0.27560414926888244 -0.1143739050155619 0.6725588297246584 -0.11037002017923878 0.6725588297246584 -0.11037002017923878 0.27941870320571194 -0.11263300363040077
60800000700.0 0.2723864486469918 -0.11399151999369864 0.6748746874871082 -0.11351232270392594 0.6748746874871082 -0.11351232270392594 0.2761258137203008 -0.11221239974953212
61600000700.0 0.2691687480251011 -0.11360913497183538 0.6771905452495581 -0.11665462522861317 0.6771905452495581 -0.11665462522861317 0.2728329242348897 -0.11179179586866347
62400000700.0 0.26595104740321046 -0.11322674994997212 0.6795064030120079 -0.11979692775330034 0.6795064030120079 -0.11979692775330034 0.26954003474947863 -0.11137119198779484
63200000700.0 0.2627333467813198 -0.11284436492810887 0.6818222607744578 -0.12293923027798753 0.6818222607744578 -0.12293923027798753 0.26624714526406756 -0.1109505881069262
64000000700.0 0.2595156461594292 -0.11246197990624561 0.6841381185369076 -0.1260815328026747 0.6841381185369076 -0.1260815328026747 0.2629542557786565 -0.11052998422605756
64800000700.0 0.25629794553753854 -0.11207959488438235 0.6864539762993576 -0.12922383532736192 0.6864539762993576 -0.12922383532736192 0.2596613662932454 -0.11010938034518891
65600000700.0 0.2530802449156479 -0.1116972098625191 0.6887698340618074 -0.1323661378520491 0.6887698340618074 -0.1323661378520491 0.2563684768078343 -0.10968877646432028
66400000700.0 0.24986254429375726 -0.11131482484065584 0.6910856918242572 -0.13550844037673626 0.6910856918242572 -0.13550844037673626 0.25307558732242325 -0.10926817258345164
66666667300.0 0.24878997768793537 -0.11118736319856684 0.6918576442187524 -0.1365558742897735 0.6918576442187524 -0.1365558742897735 0.25197795776836035 -0.10912797132487909
67200000700.0 0.24664484367186656 -0.11093243981879258 0.6934015495867071 -0.13865074290142348 0.6934015495867071 -0.13865074290142348 0.24978269783701218 -0.108847568702583
68000000700.0 0.24342714304997592 -0.11055005479692932 0.6957174073491569 -0.14179304542611065 0.6957174073491569 -0.14179304542611065 0.24648980835160106 -0.10842696482171435
68800000700.0 0.24020944242808528 -0.11016766977506606 0.6980332651116068 -0.14493534795079788 0.6980332651116068 -0.14493534795079788 0.24319691886619 -0.10800636094084572
69600000700.0 0.23699174180619464 -0.10978528475320282 0.7003491228740566 -0.14807765047548505 0.7003491228740566 -0.14807765047548505 0.23990402938077893 -0.10758575705997708
70400000600.0 0.23377404158651655 -0.10940289977913768 0.7026649803470242 -0.1512199526073844 0.7026649803470242 -0.1512199526073844 0.23661114030697905 -0.10716515323168392
71200000600.0 0.2305563409646259 -0.10902051475727442 0.7049808381094741 -0.15436225513207158 0.7049808381094741 -0.15436225513207158 0.23331825082156799 -0.10674454935081529
72000000600.0 0.22733864034273527 -0.10863812973541118 0.7072966958719239 -0.1575045576567588 0.7072966958719239 -0.1575045576567588 0.23002536133615692 -0.10632394546994664
72800000600.0 0.22412093972084463 -0.1082557447135479 0.7096125536343738 -0.16064686018144603 0.7096125536343738 -0.16064686018144603 0.2267324718507458 -0.10590334158907799
73600000600.0 0.22090323909895399 -0.10787335969168466 0.7119284113968236 -0.1637891627061332 0.7119284113968236 -0.1637891627061332 0.22343958236533473 -0.10548273770820936
74400000600.0 0.21768553847706335 -0.10749097466982141 0.7142442691592734 -0.16693146523082036 0.7142442691592734 -0.16693146523082036 0.22014669287992367 -0.10506213382734073
75200000600.0 0.2144678378551727 -0.10710858964795814 0.7165601269217233 -0.17007376775550753 0.7165601269217233 -0.17007376775550753 0.2168538033945126 -0.10464152994647208
76000000600.0 0.211250137233282 -0.10672620462609489 0.7188759846841732 -0.17321607028019476 0.7188759846841732 -0.17321607028019476 0.21356091390910148 -0.10422092606560343
76800000600.0 0.20803243661139137 -0.10634381960423163 0.721191842446623 -0.17635837280488192 0.721191842446623 -0.17635837280488192 0.21026802442369041 -0.1038003221847348
77600000600.0 0.20481473598950073 -0.10596143458236837 0.7235077002090728 -0.1795006753295691 0.7235077002090728 -0.1795006753295691 0.20697513493827935 -0.10337971830386616
78400000600.0 0.2015970353676101 -0.10557904956050512 0.7258235579715228 -0.18264297785425632 0.7258235579715228 -0.18264297785425632 0.20368224545286823 -0.10295911442299752
79200000600.0 0.19837933474571945 -0.10519666453864185 0.7281394157339726 -0.18578528037894348 0.7281394157339726 -0.18578528037894348 0.20038935596745716 -0.10253851054212887
80000000600.0 0.1951616341238288 -0.1048142795167786 0.7304552734964225 -0.1889275829036307 0.7304552734964225 -0.1889275829036307 0.1970964664820461 -0.10211790666126024
80800000600.0 0.19194393350193817 -0.10443189449491538 0.7327711312588723 -0.19206988542831788 0.7327711312588723 -0.19206988542831788 0.19380357699663503 -0.1016973027803916
81600000600.0 0.18872623288004747 -0.10404950947305211 0.7350869890213221 -0.1952121879530051 0.7350869890213221 -0.1952121879530051 0.1905106875112239 -0.10127669889952295
82400000600.0 0.18550853225815683 -0.10366712445118886 0.737402846783772 -0.19835449047769227 0.737402846783772 -0.19835449047769227 0.18721779802581284 -0.10085609501865433
83200000600.0 0.1822908316362662 -0.1032847394293256 0.7397187045462218 -0.20149679300237944 0.7397187045462218 -0.20149679300237944 0.18392490854040178 -0.1004354911377857
84000000600.0 0.17907313101437555 -0.10290235440746234 0.7420345623086717 -0.2046390955270666 0.7420345623086717 -0.2046390955270666 0.1806320190549907 -0.10001488725691707
84800000600.0 0.1758554303924849 -0.1025199693855991 0.7443504200711215 -0.20778139805175383 0.7443504200711215 -0.20778139805175383 0.1773391295695796 -0.09959428337604842
85600000600.0 0.17263772977059427 -0.10213758436373582 0.7466662778335714 -0.210923700576441 0.7466662778335714 -0.210923700576441 0.17404624008416852 -0.09917367949517977
86400000600.0 0.16942002914870363 -0.10175519934187258 0.7489821355960212 -0.21406600310112817 0.7489821355960212 -0.21406600310112817 0.17075335059875746 -0.09875307561431114
87200000600.0 0.16620232852681294 -0.10137281432000932 0.7512979933584711 -0.2172083056258154 0.7512979933584711 -0.2172083056258154 0.16746046111334634 -0.09833247173344249
88000000600.0 0.16298462790492235 -0.10099042929814606 0.7536138511209209 -0.22035060815050256 0.7536138511209209 -0.22035060815050256 0.16416757162793533 -0.09791186785257386
88800000600.0 0.15976692728303166 -0.10060804427628281 0.7559297088833707 -0.22349291067518978 0.7559297088833707 -0.22349291067518978 0.16087468214252415 -0.09749126397170521
89600000600.0 0.15654922666114102 -0.10022565925441954 0.7582455666458207 -0.226635213199877 0.7582455666458207 -0.226635213199877 0.15758179265711308 -0.09707066009083656
90400000500.0 0.15333152644146297 -0.09984327428035442 0.7605614241187882 -0.22977751533177632 0.7605614241187882 -0.22977751533177632 0.15428890358331326 -0.09665005626254342
91200000500.0 0.15011382581957228 -0.09946088925849116 0.7628772818812382 -0.23291981785646354 0.7628772818812382 -0.23291981785646354 0.1509960140979021 -0.09622945238167477
92000000500.0 0.14689612519768164 -0.0990785042366279 0.765193139643688 -0.2360621203811507 0.765193139643688 -0.2360621203811507 0.14770312461249102 -0.09580884850080613
92800000500.0 0.143678424575791 -0.09869611921476465 0.7675089974061378 -0.23920442290583793 0.7675089974061378 -0.23920442290583793 0.14441023512707996 -0.0953882446199375
93600000500.0 0.14046072395390036 -0.09831373419290139 0.7698248551685877 -0.2423467254305251 0.7698248551685877 -0.2423467254305251 0.1411173456416689 -0.09496764073906885
94400000500.0 0.13724302333200972 -0.09793134917103813 0.7721407129310376 -0.24548902795521227 0.7721407129310376 -0.24548902795521227 0.13782445615625782 -0.0945470368582002
95200000500.0 0.13402532271011908 -0.09754896414917488 0.7744565706934874 -0.24863133047989944 0.7744565706934874 -0.24863133047989944 0.13453156667084676 -0.09412643297733159
96000000500.0 0.13080762208822844 -0.09716657912731162 0.7767724284559372 -0.2517736330045866 0.7767724284559372 -0.2517736330045866 0.1312386771854357 -0.09370582909646294
96800000500.0 0.12758992146633774 -0.09678419410544836 0.7790882862183871 -0.2549159355292739 0.7790882862183871 -0.2549159355292739 0.12794578770002457 -0.09328522521559429
97600000500.0 0.1243722208444471 -0.0964018090835851 0.781404143980837 -0.25805823805396105 0.781404143980837 -0.25805823805396105 0.12465289821461345 -0.09286462133472564
98400000500.0 0.12115452022255646 -0.09601942406172184 0.7837200017432868 -0.2612005405786482 0.7837200017432868 -0.2612005405786482 0.12136000872920238 -0.09244401745385701
99200000500.0 0.11793681960066582 -0.0956370390398586 0.7860358595057366 -0.2643428431033354 0.7860358595057366 -0.2643428431033354 0.11806711924379132 -0.09202341357298838
100000000000.0 0.11471912098983805 -0.09525465425698598 0.7883517158207753 -0.2674851436640835 0.7883517158207753 -0.2674851436640835 0.1147742318164362 -0.09160280995499716
100800000000.0 0.11150142036794741 -0.09487226923512272 0.7906675735832251 -0.2706274461887707 0.7906675735832251 -0.2706274461887707 0.11148134233102514 -0.09118220607412852
101600000000.0 0.10828371974605677 -0.09448988421325946 0.7929834313456751 -0.2737697487134579 0.7929834313456751 -0.2737697487134579 0.10818845284561407 -0.09076160219325988
102400000000.0 0.10506601912416613 -0.09410749919139622 0.7952992891081249 -0.27691205123814505 0.7952992891081249 -0.27691205123814505 0.104895563360203 -0.09034099831239123
103200000000.0 0.10184831850227544 -0.09372511416953294 0.7976151468705748 -0.28005435376283233 0.7976151468705748 -0.28005435376283233 0.10160267387479183 -0.08992039443152258
104000000000.0 0.0986306178803848 -0.0933427291476697 0.7999310046330246 -0.2831966562875195 0.7999310046330246 -0.2831966562875195 0.09830978438938076 -0.08949979055065395
104800000000.0 0.09541291725849416 -0.09296034412580644 0.8022468623954745 -0.28633895881220667 0.8022468623954745 -0.28633895881220667 0.0950168949039697 -0.08907918666978532
105600000000.0 0.09219521663660352 -0.09257795910394317 0.8045627201579243 -0.28948126133689384 0.8045627201579243 -0.28948126133689384 0.09172400541855863 -0.08865858278891667
106400000000.0 0.08897751601471288 -0.09219557408207993 0.8068785779203742 -0.292623563861581 0.8068785779203742 -0.292623563861581 0.08843111593314756 -0.08823797890804803
107200000000.0 0.08575981539282224 -0.09181318906021667 0.809194435682824 -0.2957658663862682 0.809194435682824 -0.2957658663862682 0.0851382264477365 -0.0878173750271794
108000000000.0 0.0825421147709316 -0.09143080403835341 0.8115102934452738 -0.2989081689109554 0.8115102934452738 -0.2989081689109554 0.08184533696232543 -0.08739677114631075
108800000000.0 0.0793244141490409 -0.09104841901649015 0.8138261512077237 -0.3020504714356426 0.8138261512077237 -0.3020504714356426 0.07855244747691426 -0.0869761672654421
109600000000.0 0.07610671352715026 -0.09066603399462689 0.8161420089701736 -0.3051927739603298 0.8161420089701736 -0.3051927739603298 0.07525955799150319 -0.08655556338457346
110400000000.0 0.07288901290525962 -0.09028364897276364 0.8184578667326234 -0.308335076485017 0.8184578667326234 -0.308335076485017 0.07196666850609212 -0.08613495950370482
111200000000.0 0.06967131228336898 -0.08990126395090038 0.8207737244950732 -0.3114773790097042 0.8207737244950732 -0.3114773790097042 0.06867377902068106 -0.08571435562283619
112000000000.0 0.06645361166147834 -0.08951887892903712 0.8230895822575232 -0.31461968153439135 0.8230895822575232 -0.31461968153439135 0.06538088953526999 -0.08529375174196754
112800000000.0 0.0632359110395877 -0.08913649390717387 0.8254054400199731 -0.3177619840590785 0.8254054400199731 -0.3177619840590785 0.06208800004985893 -0.08487314786109891
113600000000.0 0.06001821041769706 -0.08875410888531061 0.8277212977824229 -0.3209042865837657 0.8277212977824229 -0.3209042865837657 0.05879511056444786 -0.08445254398023028
114400000000.0 0.05680050979580642 -0.08837172386344735 0.8300371555448727 -0.3240465891084529 0.8300371555448727 -0.3240465891084529 0.055502221079036795 -0.08403194009936163
115200000000.0 0.053582809173915724 -0.0879893388415841 0.8323530133073226 -0.32718889163314013 0.8323530133073226 -0.32718889163314013 0.05220933159362562 -0.08361133621849298
116000000000.0 0.050365108552025084 -0.08760695381972083 0.8346688710697725 -0.3303311941578273 0.8346688710697725 -0.3303311941578273 0.04891644210821455 -0.08319073233762433
116800000000.0 0.047147407930134444 -0.08722456879785759 0.8369847288322223 -0.33347349668251447 0.8369847288322223 -0.33347349668251447 0.04562355262280349 -0.0827701284567557
117600000000.0 0.043929707308243804 -0.08684218377599433 0.8393005865946721 -0.3366157992072017 0.8393005865946721 -0.3366157992072017 0.04233066313739242 -0.08234952457588707
118400000000.0 0.040712006686353164 -0.08645979875413107 0.8416164443571219 -0.33975810173188886 0.8416164443571219 -0.33975810173188886 0.039037773651981356 -0.08192892069501842
119200000000.0 0.037494306064462524 -0.08607741373226782 0.8439323021195718 -0.34290040425657603 0.8439323021195718 -0.34290040425657603 0.03574488416657029 -0.08150831681414979
120000000000.0 0.034276605442571884 -0.08569502871040456 0.8462481598820216 -0.3460427067812632 0.8462481598820216 -0.3460427067812632 0.032451994681159224 -0.08108771293328114
120800000000.0 0.031058904820681188 -0.0853126436885413 0.8485640176444715 -0.3491850093059505 0.8485640176444715 -0.3491850093059505 0.029159105195748103 -0.08066710905241249
121600000000.0 0.027841204198790548 -0.08493025866667804 0.8508798754069213 -0.35232731183063765 0.8508798754069213 -0.35232731183063765 0.02586621571033698 -0.08024650517154386
122400000000.0 0.024623503576899908 -0.08454787364481478 0.8531957331693713 -0.3554696143553248 0.8531957331693713 -0.3554696143553248 0.022573326224925916 -0.07982590129067521
123200000000.0 0.021405802955009268 -0.08416548862295153 0.855511590931821 -0.358611916880012 0.855511590931821 -0.358611916880012 0.01928043673951485 -0.07940529740980658
124000000000.0 0.018188102333118628 -0.08378310360108827 0.857827448694271 -0.36175421940469915 0.857827448694271 -0.36175421940469915 0.015987547254103784 -0.07898469352893794
124800000000.0 0.014970401711227987 -0.08340071857922501 0.8601433064567208 -0.3648965219293864 0.8601433064567208 -0.3648965219293864 0.012694657768692719 -0.0785640896480693
125600000000.0 0.011752701089337347 -0.08301833355736177 0.8624591642191706 -0.36803882445407354 0.8624591642191706 -0.36803882445407354 0.009401768283281653 -0.07814348576720066
126400000000.0 0.008535000467446596 -0.0826359485354985 0.8647750219816205 -0.37118112697876077 0.8647750219816205 -0.37118112697876077 0.006108878797870476 -0.07772288188633202
127200000000.0 0.005317299845555956 -0.08225356351363525 0.8670908797440704 -0.374323429503448 0.8670908797440704 -0.374323429503448 0.0028159893124594104 -0.07730227800546337
128000000000.0 0.002099599223665316 -0.08187117849177199 0.8694067375065202 -0.37746573202813516 0.8694067375065202 -0.37746573202813516 -0.0004769001729516553 -0.07688167412459473
128800000000.0 -0.001118101398225324 -0.08148879346990873 0.87172259526897 -0.3806080345528223 0.87172259526897 -0.3806080345528223 -0.003769789658362721 -0.07646107024372609
129600000000.0 -0.004335802020115853 -0.08110640844804548 0.8740384530314198 -0.3837503370775095 0.8740384530314198 -0.3837503370775095 -0.007062679143773787 -0.07604046636285745
130400000000.0 -0.007553502642006493 -0.08072402342618222 0.8763543107938697 -0.38689263960219666 0.8763543107938697 -0.38689263960219666 -0.010355568629184853 -0.07561986248198882
131200000000.0 -0.010771203263897133 -0.08034163840431896 0.8786701685563195 -0.39003494212688383 0.8786701685563195 -0.39003494212688383 -0.013648458114595918 -0.07519925860112017
132000000000.0 -0.013988903885787773 -0.07995925338245571 0.8809860263187694 -0.393177244651571 0.8809860263187694 -0.393177244651571 -0.016941347600006984 -0.07477865472025154
132800000000.0 -0.017206604507678525 -0.07957686836059244 0.8833018840812192 -0.3963195471762583 0.8833018840812192 -0.3963195471762583 -0.02023423708541816 -0.07435805083938289
133333334000.0 -0.019351740937022743 -0.07932194469402942 0.8848457911860673 -0.3984144181446352 0.8848457911860673 -0.3984144181446352 -0.022429499486433357 -0.07407764790163389
133600000000.0 -0.020424305129569165 -0.0791944833387292 0.8856177418436691 -0.39946184970094545 0.8856177418436691 -0.39946184970094545 -0.023527126570829227 -0.07393744695851424
134400000000.0 -0.023642005751459805 -0.07881209831686593 0.887933599606119 -0.4026041522256326 0.887933599606119 -0.4026041522256326 -0.026820016056240292 -0.07351684307764561
135200000000.0 -0.026859706373350445 -0.07842971329500267 0.8902494573685689 -0.4057464547503198 0.8902494573685689 -0.4057464547503198 -0.030112905541651358 -0.07309623919677696
136000000000.0 -0.030077406995241085 -0.07804732827313943 0.8925653151310187 -0.40888875727500695 0.8925653151310187 -0.40888875727500695 -0.033405795027062424 -0.07267563531590833
136800000000.0 -0.033295107617131725 -0.07766494325127617 0.8948811728934685 -0.41203105979969423 0.8948811728934685 -0.41203105979969423 -0.03669868451247349 -0.0722550314350397
137600000000.0 -0.036512808239022365 -0.0772825582294129 0.8971970306559183 -0.4151733623243814 0.8971970306559183 -0.4151733623243814 -0.039991573997884555 -0.07183442755417105
138400000000.0 -0.039730508860913116 -0.07690017320754965 0.8995128884183683 -0.41831566484906857 0.8995128884183683 -0.41831566484906857 -0.04328446348329573 -0.0714138236733024
139200000000.0 -0.042948209482803756 -0.07651778818568639 0.9018287461808181 -0.42145796737375585 0.9018287461808181 -0.42145796737375585 -0.0465773529687068 -0.07099321979243377
140000000000.0 -0.046165910104694396 -0.07613540316382314 0.9041446039432679 -0.424600269898443 0.9041446039432679 -0.424600269898443 -0.049870242454117863 -0.07057261591156512
140800000000.0 -0.04938361072658504 -0.07575301814195988 0.9064604617057177 -0.4277425724231302 0.9064604617057177 -0.4277425724231302 -0.05316313193952893 -0.07015201203069649
141600000000.0 -0.05260131134847568 -0.07537063312009662 0.9087763194681676 -0.43088487494781735 0.9087763194681676 -0.43088487494781735 -0.056456021424939995 -0.06973140814982784
142400000000.0 -0.05581901197036632 -0.07498824809823337 0.9110921772306175 -0.4340271774725045 0.9110921772306175 -0.4340271774725045 -0.05974891091035106 -0.0693108042689592
143200000000.0 -0.059036712592256846 -0.07460586307637011 0.9134080349930673 -0.4371694799971917 0.9134080349930673 -0.4371694799971917 -0.06304180039576213 -0.06889020038809056
144000000000.0 -0.0622544132141476 -0.07422347805450685 0.9157238927555171 -0.44031178252187897 0.9157238927555171 -0.44031178252187897 -0.06633468988117319 -0.06846959650722191
144800000000.0 -0.06547211383603824 -0.07384109303264359 0.918039750517967 -0.44345408504656614 0.918039750517967 -0.44345408504656614 -0.06962757936658437 -0.06804899262635328
145600000000.0 -0.06868981445792888 -0.07345870801078033 0.9203556082804168 -0.4465963875712533 0.9203556082804168 -0.4465963875712533 -0.07292046885199543 -0.06762838874548464
146400000000.0 -0.07190751507981952 -0.07307632298891709 0.9226714660428668 -0.4497386900959405 0.9226714660428668 -0.4497386900959405 -0.0762133583374065 -0.067207784864616
147200000000.0 -0.07512521570171016 -0.07269393796705383 0.9249873238053166 -0.45288099262062764 0.9249873238053166 -0.45288099262062764 -0.07950624782281757 -0.06678718098374736
148000000000.0 -0.0783429163236008 -0.07231155294519057 0.9273031815677664 -0.4560232951453148 0.9273031815677664 -0.4560232951453148 -0.08279913730822863 -0.06636657710287872
148800000000.0 -0.08156061694549144 -0.07192916792332732 0.9296190393302162 -0.459165597670002 0.9296190393302162 -0.459165597670002 -0.0860920267936397 -0.06594597322201008
149600000000.0 -0.08477831756738208 -0.07154678290146406 0.9319348970926661 -0.46230790019468915 0.9319348970926661 -0.46230790019468915 -0.08938491627905076 -0.06552536934114143
150400000000.0 -0.08799601818927283 -0.0711643978796008 0.934250754855116 -0.4654502027193764 0.934250754855116 -0.4654502027193764 -0.09267780576446183 -0.06510476546027279
151200000000.0 -0.09121371881116347 -0.07078201285773754 0.9365666126175658 -0.4685925052440636 0.9365666126175658 -0.4685925052440636 -0.0959706952498729 -0.06468416157940415
152000000000.0 -0.09443141943305411 -0.07039962783587428 0.9388824703800156 -0.47173480776875076 0.9388824703800156 -0.47173480776875076 -0.09926358473528407 -0.0642635576985355
152800000000.0 -0.09764912005494475 -0.07001724281401103 0.9411983281424655 -0.47487711029343793 0.9411983281424655 -0.47487711029343793 -0.10255647422069514 -0.06384295381766687
153600000000.0 -0.10086682067683539 -0.06963485779214777 0.9435141859049154 -0.4780194128181252 0.9435141859049154 -0.4780194128181252 -0.1058493637061062 -0.06342234993679824
154400000000.0 -0.10408452129872603 -0.06925247277028451 0.9458300436673652 -0.4811617153428124 0.9458300436673652 -0.4811617153428124 -0.10914225319151727 -0.06300174605592959
155200000000.0 -0.10730222192061667 -0.06887008774842127 0.948145901429815 -0.48430401786749955 0.948145901429815 -0.48430401786749955 -0.11243514267692833 -0.06258114217506096
156000000000.0 -0.11051992254250731 -0.06848770272655799 0.9504617591922649 -0.4874463203921868 0.9504617591922649 -0.4874463203921868 -0.1157280321623394 -0.06216053829419231
156800000000.0 -0.11373762316439795 -0.06810531770469475 0.9527776169547149 -0.490588622916874 0.9527776169547149 -0.490588622916874 -0.11902092164775047 -0.06173993441332366
157600000000.0 -0.11695532378628859 -0.06772293268283149 0.9550934747171647 -0.49373092544156116 0.9550934747171647 -0.49373092544156116 -0.12231381113316153 -0.06131933053245503
158400000000.0 -0.12017302440817923 -0.06734054766096823 0.9574093324796145 -0.49687322796624833 0.9574093324796145 -0.49687322796624833 -0.1256067006185726 -0.06089872665158638
159200000000.0 -0.12339072503006987 -0.06695816263910498 0.9597251902420643 -0.5000155304909355 0.9597251902420643 -0.5000155304909355 -0.12889959010398377 -0.06047812277071775
160000000000.0 -0.1266084256519605 -0.06657577761724172 0.9620410480045141 -0.5031578330156227 0.9620410480045141 -0.5031578330156227 -0.13219247958939484 -0.060057518889849115
160800000000.0 -0.12982612627385115 -0.06619339259537846 0.964356905766964 -0.5063001355403098 0.964356905766964 -0.5063001355403098 -0.1354853690748059 -0.05963691500898047
161600000000.0 -0.1330438268957419 -0.0658110075735152 0.9666727635294139 -0.5094424380649971 0.9666727635294139 -0.5094424380649971 -0.13877825856021697 -0.05921631112811182
162400000000.0 -0.13626152751763254 -0.06542862255165194 0.9689886212918637 -0.5125847405896843 0.9689886212918637 -0.5125847405896843 -0.14207114804562804 -0.05879570724724319
163200000000.0 -0.13947922813952318 -0.06504623752978869 0.9713044790543135 -0.5157270431143715 0.9713044790543135 -0.5157270431143715 -0.1453640375310391 -0.05837510336637454
164000000000.0 -0.14269692876141382 -0.06466385250792543 0.9736203368167634 -0.5188693456390586 0.9736203368167634 -0.5188693456390586 -0.14865692701645017 -0.057954499485505906
164800000000.0 -0.14591462938330446 -0.06428146748606217 0.9759361945792133 -0.5220116481637458 0.9759361945792133 -0.5220116481637458 -0.15194981650186123 -0.05753389560463726
165600000000.0 -0.1491323300051951 -0.06389908246419893 0.9782520523416631 -0.525153950688433 0.9782520523416631 -0.525153950688433 -0.1552427059872723 -0.057113291723768625
166400000000.0 -0.15235003062708574 -0.06351669744233567 0.9805679101041129 -0.5282962532131201 0.9805679101041129 -0.5282962532131201 -0.15853559547268348 -0.05669268784289999
167200000000.0 -0.15556773124897638 -0.0631343124204724 0.9828837678665627 -0.5314385557378074 0.9828837678665627 -0.5314385557378074 -0.16182848495809454 -0.056272083962031344
168000000000.0 -0.15878543187086702 -0.06275192739860914 0.9851996256290128 -0.5345808582624946 0.9851996256290128 -0.5345808582624946 -0.1651213744435056 -0.0558514800811627
168800000000.0 -0.16200313249275766 -0.062369542376745885 0.9875154833914626 -0.5377231607871817 0.9875154833914626 -0.5377231607871817 -0.16841426392891667 -0.05543087620029406
169600000000.0 -0.1652208331146483 -0.06198715735488264 0.9898313411539124 -0.5408654633118689 0.9898313411539124 -0.5408654633118689 -0.17170715341432774 -0.055010272319425416
170400000000.0 -0.16843853373653894 -0.06160477233301938 0.9921471989163622 -0.5440077658365562 0.9921471989163622 -0.5440077658365562 -0.1750000428997388 -0.05458966843855678
171200000000.0 -0.17165623435842958 -0.06122238731115612 0.9944630566788121 -0.5471500683612434 0.9944630566788121 -0.5471500683612434 -0.17829293238514987 -0.054169064557688135
172000000000.0 -0.17487393498032022 -0.06084000228929287 0.9967789144412619 -0.5502923708859305 0.9967789144412619 -0.5502923708859305 -0.18158582187056094 -0.0537484606768195
172800000000.0 -0.17809163560221086 -0.06045761726742961 0.9990947722037118 -0.5534346734106177 0.9990947722037118 -0.5534346734106177 -0.184878711355972 -0.05332785679595087
173600000000.0 -0.1813093362241016 -0.06007523224556635 1.0014106299661616 -0.556576975935305 1.0014106299661616 -0.556576975935305 -0.18817160084138318 -0.052907252915082206
174400000000.0 -0.18452703684599225 -0.05969284722370309 1.0037264877286116 -0.5597192784599921 1.0037264877286116 -0.5597192784599921 -0.19146449032679425 -0.05248664903421357
175200000000.0 -0.1877447374678829 -0.05931046220183983 1.0060423454910614 -0.5628615809846793 1.0060423454910614 -0.5628615809846793 -0.1947573798122053 -0.05206604515334494
176000000000.0 -0.19096243808977353 -0.058928077179976585 1.0083582032535112 -0.5660038835093665 1.0083582032535112 -0.5660038835093665 -0.19805026929761638 -0.05164544127247629
176800000000.0 -0.19418013871166417 -0.058545692158113324 1.010674061015961 -0.5691461860340536 1.010674061015961 -0.5691461860340536 -0.20134315878302744 -0.05122483739160766
177600000000.0 -0.19739783933355481 -0.058163307136250064 1.0129899187784108 -0.5722884885587408 1.0129899187784108 -0.5722884885587408 -0.2046360482684385 -0.05080423351073901
178400000000.0 -0.20061553995544545 -0.05778092211438682 1.0153057765408606 -0.575430791083428 1.0153057765408606 -0.575430791083428 -0.20792893775384957 -0.05038362962987038
179200000000.0 -0.2038332405773361 -0.05739853709252356 1.0176216343033104 -0.5785730936081152 1.0176216343033104 -0.5785730936081152 -0.21122182723926064 -0.049963025749001744
180000000000.0 -0.20705094119922673 -0.0570161520706603 1.0199374920657602 -0.5817153961328023 1.0199374920657602 -0.5817153961328023 -0.2145147167246717 -0.049542421868133096
180800000000.0 -0.21026864182111737 -0.05663376704879705 1.0222533498282103 -0.5848576986574895 1.0222533498282103 -0.5848576986574895 -0.21780760621008277 -0.04912181798726446
181600000000.0 -0.21348634244300801 -0.05625138202693379 1.02456920759066 -0.5880000011821768 1.02456920759066 -0.5880000011821768 -0.22110049569549395 -0.048701214106395815
182400000000.0 -0.21670404306489877 -0.05586899700507052 1.02688506535311 -0.591142303706864 1.02688506535311 -0.591142303706864 -0.22439338518090512 -0.048280610225527154
183200000000.0 -0.2199217436867894 -0.05548661198320726 1.0292009231155599 -0.5942846062315512 1.0292009231155599 -0.5942846062315512 -0.2276862746663162 -0.04786000634465852
184000000000.0 -0.22313944430868005 -0.05510422696134401 1.0315167808780097 -0.5974269087562384 1.0315167808780097 -0.5974269087562384 -0.23097916415172726 -0.04743940246378989
184800000000.0 -0.2263571449305707 -0.05472184193948075 1.0338326386404595 -0.6005692112809256 1.0338326386404595 -0.6005692112809256 -0.23427205363713832 -0.04701879858292124
185600000000.0 -0.22957484555246133 -0.05433945691761749 1.0361484964029093 -0.6037115138056127 1.0361484964029093 -0.6037115138056127 -0.2375649431225494 -0.046598194702052606
186400000000.0 -0.23279254617435197 -0.053957071895754244 1.038464354165359 -0.6068538163302999 1.038464354165359 -0.6068538163302999 -0.24085783260796045 -0.04617759082118396
187200000000.0 -0.2360102467962426 -0.053574686873890984 1.0407802119278091 -0.6099961188549872 1.0407802119278091 -0.6099961188549872 -0.24415072209337152 -0.045756986940315325
188000000000.0 -0.23922794741813325 -0.053192301852027724 1.043096069690259 -0.6131384213796743 1.043096069690259 -0.6131384213796743 -0.24744361157878259 -0.04533638305944668
188800000000.0 -0.2424456480400239 -0.05280991683016448 1.0454119274527087 -0.6162807239043615 1.0454119274527087 -0.6162807239043615 -0.25073650106419365 -0.044915779178578044
189600000000.0 -0.24566334866191453 -0.05242753180830122 1.0477277852151587 -0.6194230264290487 1.0477277852151587 -0.6194230264290487 -0.2540293905496047 -0.04449517529770941
190400000000.0 -0.24888104928380517 -0.05204514678643796 1.0500436429776085 -0.6225653289537358 1.0500436429776085 -0.6225653289537358 -0.2573222800350158 -0.04407457141684076
191200000000.0 -0.2520987499056958 -0.05166276176457471 1.0523595007400584 -0.625707631478423 1.0523595007400584 -0.625707631478423 -0.26061516952042685 -0.04365396753597213
192000000000.0 -0.25531645052758645 -0.05128037674271145 1.0546753585025082 -0.6288499340031102 1.0546753585025082 -0.6288499340031102 -0.2639080590058379 -0.04323336365510348
192800000000.0 -0.2585341511494771 -0.05089799172084819 1.056991216264958 -0.6319922365277973 1.056991216264958 -0.6319922365277973 -0.267200948491249 -0.04281275977423485
193600000000.0 -0.2617518517713677 -0.050515606698984944 1.0593070740274078 -0.6351345390524845 1.0593070740274078 -0.6351345390524845 -0.27049383797666005 -0.042392155893366215
194400000000.0 -0.2649695523932585 -0.05013322167712167 1.0616229317898578 -0.6382768415771719 1.0616229317898578 -0.6382768415771719 -0.27378672746207133 -0.041971552012497554
195200000000.0 -0.2681872530151491 -0.04975083665525841 1.0639387895523076 -0.6414191441018591 1.0639387895523076 -0.6414191441018591 -0.2770796169474824 -0.041550948131628906
196000000000.0 -0.27140495363703976 -0.04936845163339515 1.0662546473147576 -0.6445614466265462 1.0662546473147576 -0.6445614466265462 -0.28037250643289346 -0.04113034425076027
196800000000.0 -0.2746226542589304 -0.0489860666115319 1.0685705050772074 -0.6477037491512334 1.0685705050772074 -0.6477037491512334 -0.28366539591830453 -0.040709740369891625
197600000000.0 -0.27784035488082104 -0.04860368158966864 1.0708863628396572 -0.6508460516759206 1.0708863628396572 -0.6508460516759206 -0.2869582854037156 -0.04028913648902299
198400000000.0 -0.2810580555027117 -0.04822129656780538 1.073202220602107 -0.6539883542006077 1.073202220602107 -0.6539883542006077 -0.29025117488912666 -0.03986853260815436
199200000000.0 -0.2842757561246023 -0.04783891154594214 1.0755180783645568 -0.6571306567252949 1.0755180783645568 -0.6571306567252949 -0.2935440643745377 -0.03944792872728571
200000000000.0 -0.28749345674649296 -0.047456526524078876 1.0778339361270066 -0.6602729592499821 1.0778339361270066 -0.6602729592499821 -0.2968369538599488 -0.03902732484641708

309
outputs/pvf_test_sample.s2p Normal file
View File

@@ -0,0 +1,309 @@
! Created with skrf 1.8.0 (http://scikit-rf.org).
# Hz S RI R 50.0
!freq ReS11 ImS11 ReS21 ImS21 ReS12 ImS12 ReS22 ImS22
0.0 0.54669299140207 -0.1662104177109195 0.46100154888068945 0.1530653599528759 0.46100154888068945 0.1530653599528759 0.5593473899566386 -0.16509997898188067
1000.0 0.5466929861541492 -0.16621041680285528 0.46100155138238874 0.1530653541325667 0.46100155138238874 0.1530653541325667 0.559347384635358 -0.16509997772031268
10000.0 0.5466929389228627 -0.16621040863027736 0.4610015738976825 0.15306530174978375 0.4610015738976825 0.15306530174978375 0.5593473367438332 -0.16509996636620083
12589.0 0.546692925335996 -0.16621040627929912 0.46100158037458194 0.15306528668100317 0.46100158037458194 0.15306528668100317 0.5593473229670379 -0.16509996310000133
15849.0 0.5466929082277745 -0.16621040331900977 0.4610015885301217 0.15306526770679513 0.4610015885301217 0.15306526770679513 0.5593473056196633 -0.1650999589872897
19953.0 0.5466928866903079 -0.16621039959231423 0.4610015987970956 0.1530652438202461 0.4610015987970956 0.1530652438202461 0.559347283781128 -0.1650999538098147
25119.0 0.5466928595795495 -0.1662103949012545 0.46100161172087417 0.15306521375252868 0.46100161172087417 0.15306521375252868 0.5593472562913927 -0.16509994729255453
31623.0 0.5466928254470731 -0.16621038899520488 0.46100162799192645 0.15306517589723756 0.46100162799192645 0.15306517589723756 0.5593472216817841 -0.16509993908731635
39811.0 0.5466927824770983 -0.16621038155997508 0.4610016484758403 0.1530651282405457 0.4610016484758403 0.1530651282405457 0.5593471781111391 -0.1650999287575977
50119.0 0.5466927283815316 -0.16621037219964918 0.4610016742633567 0.1530650682447983 0.4610016742633567 0.1530650682447983 0.5593471232593793 -0.16509991575335498
63096.0 0.5466926602792644 -0.16621036041569986 0.4610017067279085 0.15306499271464558 0.4610017067279085 0.15306499271464558 0.5593470542051218 -0.16509989938198727
79433.0 0.5466925745439837 -0.1662103455806548 0.46100174759817003 0.15306489762825393 0.46100174759817003 0.15306489762825393 0.5593469672713616 -0.16509987877175114
100000.0 0.5466924666099984 -0.16621032690449813 0.46100179905061955 0.15306477792195428 0.46100179905061955 0.15306477792195428 0.5593468578285848 -0.16509985282508244
125893.0 0.5466923307255872 -0.16621030339199147 0.46100186382711955 0.15306462721668773 0.46100186382711955 0.15306462721668773 0.5593467200446678 -0.16509982015930266
158489.0 0.5466921596643636 -0.16621027379273035 0.46100194537250994 0.1530644374978885 0.46100194537250994 0.1530644374978885 0.5593465465922074 -0.16509977903723272
199526.0 0.5466919443054411 -0.16621023652849923 0.46100204803474415 0.1530641986498592 0.46100204803474415 0.1530641986498592 0.5593463282228179 -0.16509972726626743
251189.0 0.5466916731821132 -0.16621018961517778 0.4610021772800351 0.15306389795522415 0.4610021772800351 0.15306389795522415 0.5593460533095016 -0.16509966208988075
316228.0 0.5466913318625978 -0.1662101305555894 0.46100233998805595 0.15306351940813304 0.46100233998805595 0.15306351940813304 0.5593457072187367 -0.16509958003876077
398107.0 0.5466909021680975 -0.16621005620419965 0.46100254482469305 0.1530630428470347 0.46100254482469305 0.1530630428470347 0.5593452715176075 -0.16509947674283593
501187.0 0.54669036121243 -0.16620996260094054 0.46100280269985694 0.1530624428895607 0.46100280269985694 0.1530624428895607 0.5593447230000097 -0.16509934670040832
630957.0 0.5466896801897587 -0.16620984476144754 0.46100312734537524 0.15306168758803368 0.46100312734537524 0.15306168758803368 0.5593440324574342 -0.16509918298673124
794328.0 0.5466888228317034 -0.16620969641008893 0.4610035360504917 0.1530607367182967 0.4610035360504917 0.1530607367182967 0.5593431631145115 -0.1650989768831084
1000000.0 0.5466877434813538 -0.166209509646706 0.46100405057999033 0.15305953964365956 0.46100405057999033 0.15305953964365956 0.5593420686761007 -0.16509871741389834
1258925.0 0.5466863846634824 -0.16620927452617953 0.4610046983324818 0.15305803262009574 0.4610046983324818 0.15305803262009574 0.5593406908635374 -0.16509839076240854
1584893.0 0.5466846740092625 -0.16620897852630398 0.46100551380639954 0.1530561353855411 0.46100551380639954 0.1530561353855411 0.5593389562963631 -0.16509797953161645
1995262.0 0.5466825204252861 -0.16620860588490077 0.4610065404262399 0.1530537469110683 0.4610065404262399 0.1530537469110683 0.5593367726077901 -0.16509746182322513
2511886.0 0.546679809223494 -0.16620813675713456 0.46100783286413954 0.15305073999963972 0.46100783286413954 0.15305073999963972 0.5593340235065535 -0.16509681006692783
3162278.0 0.5466763960178437 -0.16620754615943462 0.4610094599493512 0.15304695451708789 0.4610094599493512 0.15304695451708789 0.559330562588262 -0.16509598955320468
3981072.0 0.5466720990518489 -0.166206802641905 0.4610115083257286 0.1530421888828234 0.4610115083257286 0.1530421888828234 0.5593262055556852 -0.16509495658891016
5011872.0 0.5466666894951747 -0.16620586660931375 0.46101408707736796 0.15303618930808321 0.46101408707736796 0.15303618930808321 0.5593207203797069 -0.16509365616463398
6309573.0 0.5466598792632135 -0.16620468821347584 0.4610173335350524 0.15302863628699287 0.4610173335350524 0.15302863628699287 0.5593138149486316 -0.16509201902660173
7943282.0 0.5466513056879083 -0.1662032047007977 0.46102142058371554 0.15301912759544334 0.46102142058371554 0.15301912759544334 0.5593051215247256 -0.1650899579916349
10000000.0 0.546640512194909 -0.16620133706878468 0.4610265658736982 0.15300715686071253 0.4610265658736982 0.15300715686071253 0.5592941771512603 -0.16508736330205745
12589254.0 0.5466269239952031 -0.16619898585988765 0.46103304340861984 0.15299208660179292 0.46103304340861984 0.15299208660179292 0.5592803990043426 -0.16508409678211294
15848932.0 0.5466098174634991 -0.16619602586294838 0.46104119814279354 0.15297311426788723 0.46104119814279354 0.15297311426788723 0.5592630533432417 -0.16507998447671546
19952623.0 0.5465882816184877 -0.1661922994480081 0.46105146434369926 0.1529492295173389 0.46105146434369926 0.1529492295173389 0.55924121645219 -0.1650748073915405
25118864.0 0.5465611695953194 -0.16618760816943778 0.4610643887251971 0.1529191603972328 0.4610643887251971 0.1529191603972328 0.5592137254345031 -0.16506828982730595
31622777.0 0.546527037575551 -0.16618170219879488 0.4610806595598022 0.15288130561245666 0.4610806595598022 0.15288130561245666 0.5591791162888364 -0.16506008469890535
39810717.0 0.5464840679156028 -0.16617426702349875 0.4611011433235758 0.15283364926981186 0.4611011433235758 0.15283364926981186 0.5591355459630696 -0.16504975505596017
50118723.0 0.5464299723173738 -0.1661649066921378 0.46112693085497947 0.152773653487488 0.46112693085497947 0.152773653487488 0.559080694171358 -0.16503675080562896
63095734.0 0.5463618699925138 -0.1661531227328507 0.4611593954343257 0.15269812327076424 0.4611593954343257 0.15269812327076424 0.5590116398552845 -0.16502037942404513
79432823.0 0.5462761342447099 -0.16613828760697735 0.46120026591845537 0.15260303636108943 0.46120026591845537 0.15260303636108943 0.5589247056215441 -0.16499976907563838
100000000.0 0.5461681993304599 -0.1661196112895713 0.4612517188107773 0.15248332903124232 0.4612517188107773 0.15248332903124232 0.5588152619028559 -0.1649738221836484
125892541.0 0.5460323173281535 -0.1660960991996931 0.46131649416249504 0.15233262643622567 0.46131649416249504 0.15233262643622567 0.5586774804283577 -0.16494115698294182
158489319.0 0.5458612520216092 -0.16606649923211647 0.46139804149922853 0.1521429031088094 0.46139804149922853 0.1521429031088094 0.5585040238279905 -0.16490003393149014
199526231.0 0.5456458935609996 -0.16602923508089748 0.46150070351328915 0.15190405559168585 0.46150070351328915 0.15190405559168585 0.5582856549068324 -0.16484826307721756
251188643.0 0.545374773318821 -0.16598232229337812 0.46162994733327123 0.1516033643789841 0.46162994733327123 0.1516033643789841 0.5580107447193196 -0.1647830874323488
316227766.0 0.5450334531578723 -0.1659232625933056 0.4617926556618101 0.1512248165719648 0.4617926556618101 0.1512248165719648 0.5576646532999023 -0.16470103615717366
398107171.0 0.5446037565321509 -0.1658489108358039 0.46199749331205503 0.1507482531164152 0.46199749331205503 0.1507482531164152 0.5572289500156269 -0.164597739721414
501187234.0 0.5440628005341162 -0.16575530751947015 0.4622553686335967 0.15014829527571583 0.4622553686335967 0.15014829527571583 0.556680432082547 -0.16446769721431742
630957344.0 0.5433817772855165 -0.16563746792659956 0.46258001442705865 0.1493929931084779 0.46258001442705865 0.1493929931084779 0.5559898889218124 -0.16430398339847893
794328235.0 0.5425244198022299 -0.16548911666695781 0.4629887192708573 0.14844212400590961 0.4629887192708573 0.14844212400590961 0.5551205465790867 -0.1640978799131498
800000996.0 0.5424946496022605 -0.16548396543570207 0.46300291081308503 0.14840910678277924 0.46300291081308503 0.14840910678277924 0.5550903602263816 -0.16409072333950084
1000000000.0 0.5414450706859694 -0.16530235349743766 0.4635032481815683 0.14724505073654004 0.4635032481815683 0.14724505073654004 0.5540261094188117 -0.163838410999558
1600000990.0 0.5382963130608676 -0.16475751407036499 0.46500427023877794 0.1437528594446324 0.46500427023877794 0.1437528594446324 0.5508333358280478 -0.16308146896121212
2400000990.0 0.5340979764879871 -0.16403106269957954 0.467005629679481 0.13909661207156374 0.467005629679481 0.13909661207156374 0.5465763113977863 -0.16207221457535398
3200000980.0 0.5298996399675858 -0.16330461133787472 0.4690069890951671 0.13444036475669813 0.4690069890951671 0.13444036475669813 0.5423192870207375 -0.16106296020211155
4000000980.0 0.5257013033947053 -0.16257815996708924 0.47100834853587015 0.12978411738362944 0.47100834853587015 0.12978411738362944 0.538062262590476 -0.16005370581625342
4800000980.0 0.521502966821825 -0.16185170859630377 0.47300970797657327 0.12512787001056075 0.47300970797657327 0.12512787001056075 0.5338052381602144 -0.1590444514303953
5600000970.0 0.5173046303014237 -0.16112525723459895 0.47501106739225935 0.12047162269569517 0.47501106739225935 0.12047162269569517 0.5295482137831657 -0.15803519705715285
6400000970.0 0.5131062937285432 -0.1603988058638135 0.4770124268329624 0.11581537532262648 0.4770124268329624 0.11581537532262648 0.5252911893529042 -0.15702594267129472
7200000960.0 0.508907957208142 -0.15967235450210868 0.47901378624864854 0.1111591280077609 0.47901378624864854 0.1111591280077609 0.5210341649758555 -0.1560166882980523
8000000960.0 0.5047096206352615 -0.1589459031313232 0.4810151456893516 0.10650288063469221 0.4810151456893516 0.10650288063469221 0.516777140545594 -0.15500743391219415
8800000960.0 0.5005112840623811 -0.15821945176053775 0.4830165051300547 0.10184663326162352 0.4830165051300547 0.10184663326162352 0.5125201161153324 -0.15399817952633604
9600000950.0 0.4963129475419798 -0.15749300039883293 0.48501786454574075 0.09719038594675794 0.48501786454574075 0.09719038594675794 0.5082630917382837 -0.1529889251530936
10400000900.0 0.49211461123149536 -0.15676654907345067 0.4870192238613589 0.09253413886470471 0.4870192238613589 0.09253413886470471 0.5040060675740862 -0.15197967083031386
11200000900.0 0.4879162746586149 -0.15604009770266522 0.48902058330206194 0.08787789149163604 0.48902058330206194 0.08787789149163604 0.4997490431438247 -0.15097041644445575
12000000900.0 0.4837179380857345 -0.15531364633187975 0.49102194274276506 0.08322164411856735 0.49102194274276506 0.08322164411856735 0.49549201871356313 -0.1499611620585976
12800000900.0 0.479519601512854 -0.15458719496109427 0.4930233021834681 0.07856539674549864 0.4930233021834681 0.07856539674549864 0.4912349942833016 -0.1489519076727395
13600000900.0 0.47532126493997356 -0.15386074359030882 0.4950246616241712 0.07390914937242997 0.4950246616241712 0.07390914937242997 0.4869779698530401 -0.14794265328688136
14400000900.0 0.47112292836709313 -0.15313429221952335 0.4970260210648743 0.06925290199936128 0.4970260210648743 0.06925290199936128 0.48272094542277855 -0.14693339890102325
15200000900.0 0.46692459179421264 -0.1524078408487379 0.4990273805055774 0.0645966546262926 0.4990273805055774 0.0645966546262926 0.478463920992517 -0.1459241445151651
16000000900.0 0.4627262552213322 -0.15168138947795243 0.5010287399462805 0.059940407253223915 0.5010287399462805 0.059940407253223915 0.47420689656225545 -0.144914890129307
16800000900.0 0.45852791864845177 -0.15095493810716698 0.5030300993869835 0.05528415988015524 0.5030300993869835 0.05528415988015524 0.4699498721319939 -0.14390563574344886
17600000900.0 0.4543295820755713 -0.1502284867363815 0.5050314588276866 0.05062791250708655 0.5050314588276866 0.05062791250708655 0.4656928477017324 -0.14289638135759075
18400000900.0 0.45013124550269085 -0.14950203536559603 0.5070328182683898 0.045971665134017875 0.5070328182683898 0.045971665134017875 0.46143582327147087 -0.1418871269717326
19200000900.0 0.4459329089298104 -0.14877558399481058 0.5090341777090928 0.041315417760949186 0.5090341777090928 0.041315417760949186 0.4571787988412094 -0.1408778725858745
20000000900.0 0.4417345723569299 -0.1480491326240251 0.5110355371497959 0.036659170387880496 0.5110355371497959 0.036659170387880496 0.45292177441094783 -0.13986861820001636
20800000900.0 0.4375362357840495 -0.14732268125323966 0.5130368965904989 0.03200292301481182 0.5130368965904989 0.03200292301481182 0.4486647499806863 -0.13885936381415825
21600000900.0 0.433337899211169 -0.1465962298824542 0.515038256031202 0.027346675641743118 0.515038256031202 0.027346675641743118 0.44440772555042474 -0.13785010942830012
22400000900.0 0.42913956263828856 -0.1458697785116687 0.5170396154719051 0.02269042826867443 0.5170396154719051 0.02269042826867443 0.4401507011201632 -0.136840855042442
23200000900.0 0.4249412260654081 -0.14514332714088327 0.5190409749126081 0.018034180895605767 0.5190409749126081 0.018034180895605767 0.4358936766899017 -0.13583160065658387
24000000900.0 0.42074288949252764 -0.1444168757700978 0.5210423343533113 0.013377933522537078 0.5210423343533113 0.013377933522537078 0.43163665225964015 -0.13482234627072576
24800000900.0 0.4165445529196472 -0.14369042439931234 0.5230436937940144 0.008721686149468444 0.5230436937940144 0.008721686149468444 0.42737962782937866 -0.13381309188486762
25600000900.0 0.4123462163467667 -0.14296397302852687 0.5250450532347174 0.004065438776399727 0.5250450532347174 0.004065438776399727 0.4231226033991171 -0.13280383749900948
26400000900.0 0.4081478797738862 -0.1422375216577414 0.5270464126754205 -0.0005908085966689625 0.5270464126754205 -0.0005908085966689625 0.41886557896885557 -0.13179458311315137
27200000900.0 0.40394954320100585 -0.14151107028695595 0.5290477721161236 -0.005247055969737624 0.5290477721161236 -0.005247055969737624 0.414608554538594 -0.13078532872729326
28000000900.0 0.39975120662812536 -0.14078461891617047 0.5310491315568266 -0.009903303342806341 0.5310491315568266 -0.009903303342806341 0.4103515301083325 -0.12977607434143512
28800000900.0 0.3955528700552449 -0.14005816754538503 0.5330504909975298 -0.014559550715875003 0.5330504909975298 -0.014559550715875003 0.406094505678071 -0.128766819955577
29600000900.0 0.3913545334823645 -0.13933171617459955 0.5350518504382329 -0.019215798088943692 0.5350518504382329 -0.019215798088943692 0.40183748124780944 -0.12775756556971887
30400000800.0 0.3871561974342761 -0.1386052648946205 0.537053209628766 -0.023872044879981458 0.537053209628766 -0.023872044879981458 0.39758045734967595 -0.12674831131001754
31200000800.0 0.3829578608613956 -0.13787881352383505 0.539054569069469 -0.02852829225305012 0.539054569069469 -0.02852829225305012 0.3933234329194144 -0.12573905692415943
32000000800.0 0.3787595242885151 -0.13715236215304957 0.5410559285101721 -0.033184539626118836 0.5410559285101721 -0.033184539626118836 0.38906640848915286 -0.1247298025383013
32800000800.0 0.37456118771563474 -0.13642591078226413 0.5430572879508753 -0.0378407869991875 0.5430572879508753 -0.0378407869991875 0.3848093840588914 -0.12372054815244318
33333334200.0 0.3717622963171864 -0.13594160980786954 0.5443915277447906 -0.04094495230258724 0.5443915277447906 -0.04094495230258724 0.3819713674172983 -0.12304771181109989
33600000800.0 0.37036285114275425 -0.13569945941147865 0.5450586473915783 -0.04249703437225619 0.5450586473915783 -0.04249703437225619 0.3805523596286299 -0.12271129376658504
34400000800.0 0.3661645145698738 -0.1349730080406932 0.5470600068322814 -0.04715328174532485 0.5470600068322814 -0.04715328174532485 0.37629533519836833 -0.12170203938072693
35200000800.0 0.3619661779969933 -0.13424655666990773 0.5490613662729845 -0.051809529118393566 0.5490613662729845 -0.051809529118393566 0.3720383107681068 -0.1206927849948688
36000000800.0 0.3577678414241129 -0.13352010529912228 0.5510627257136875 -0.05646577649146223 0.5510627257136875 -0.05646577649146223 0.36778128633784524 -0.11968353060901069
36800000800.0 0.3535695048512324 -0.1327936539283368 0.5530640851543906 -0.06112202386453092 0.5530640851543906 -0.06112202386453092 0.3635242619075837 -0.11867427622315255
37600000800.0 0.34937116827835196 -0.13206720255755133 0.5550654445950938 -0.06577827123759963 0.5550654445950938 -0.06577827123759963 0.35926723747732214 -0.11766502183729442
38400000800.0 0.34517283170547153 -0.13134075118676589 0.5570668040357968 -0.0704345186106683 0.5570668040357968 -0.0704345186106683 0.35501021304706065 -0.1166557674514363
39200000800.0 0.34097449513259104 -0.1306142998159804 0.5590681634764999 -0.07509076598373698 0.5590681634764999 -0.07509076598373698 0.35075318861679916 -0.11564651306557817
40000000800.0 0.3367761585597106 -0.12988784844519496 0.561069522917203 -0.07974701335680565 0.561069522917203 -0.07974701335680565 0.3464961641865376 -0.11463725867972002
40800000800.0 0.33257782198683017 -0.12916139707440946 0.563070882357906 -0.08440326072987436 0.563070882357906 -0.08440326072987436 0.34223913975627607 -0.1136280042938619
41600000800.0 0.3283794854139497 -0.128434945703624 0.5650722417986092 -0.08905950810294302 0.5650722417986092 -0.08905950810294302 0.3379821153260145 -0.11261874990800377
42400000800.0 0.32418114884106924 -0.12770849433283854 0.5670736012393122 -0.09371575547601171 0.5670736012393122 -0.09371575547601171 0.333725090895753 -0.11160949552214565
43200000800.0 0.3199828122681888 -0.12698204296205307 0.5690749606800153 -0.0983720028490804 0.5690749606800153 -0.0983720028490804 0.3294680664654915 -0.11060024113628752
44000000800.0 0.3157844756953083 -0.12625559159126762 0.5710763201207183 -0.10302825022214904 0.5710763201207183 -0.10302825022214904 0.32521104203523 -0.10959098675042941
44800000800.0 0.31158613912242783 -0.12552914022048214 0.5730776795614214 -0.10768449759521778 0.5730776795614214 -0.10768449759521778 0.3209540176049684 -0.10858173236457128
45600000800.0 0.30738780254954745 -0.12480268884969667 0.5750790390021245 -0.11234074496828647 0.5750790390021245 -0.11234074496828647 0.3166969931747069 -0.10757247797871315
46400000800.0 0.30318946597666696 -0.12407623747891122 0.5770803984428275 -0.1169969923413551 0.5770803984428275 -0.1169969923413551 0.31243996874444535 -0.10656322359285503
47200000800.0 0.29899112940378647 -0.12334978610812575 0.5790817578835307 -0.12165323971442385 0.5790817578835307 -0.12165323971442385 0.3081829443141838 -0.10555396920699689
48000000800.0 0.29479279283090604 -0.12262333473734029 0.5810831173242338 -0.12630948708749254 0.5810831173242338 -0.12630948708749254 0.30392591988392226 -0.10454471482113878
48800000800.0 0.2905944562580256 -0.12189688336655483 0.5830844767649368 -0.13096573446056115 0.5830844767649368 -0.13096573446056115 0.29966889545366077 -0.10353546043528065
49600000800.0 0.28639611968514517 -0.12117043199576934 0.5850858362056399 -0.13562198183362983 0.5850858362056399 -0.13562198183362983 0.2954118710233992 -0.1025262060494225
50400000700.0 0.2821977836370567 -0.1204439807157903 0.587087195396173 -0.1402782286246676 0.587087195396173 -0.1402782286246676 0.29115484712526574 -0.10151695178972117
51200000700.0 0.2779994470641763 -0.11971752934500482 0.5890885548368762 -0.1449344759977363 0.5890885548368762 -0.1449344759977363 0.28689782269500425 -0.10050769740386305
52000000700.0 0.27380111049129585 -0.11899107797421937 0.5910899142775792 -0.14959072337080498 0.5910899142775792 -0.14959072337080498 0.2826407982647427 -0.09949844301800494
52800000700.0 0.26960277391841536 -0.1182646266034339 0.5930912737182823 -0.15424697074387367 0.5930912737182823 -0.15424697074387367 0.27838377383448115 -0.0984891886321468
53600000700.0 0.2654044373455349 -0.11753817523264844 0.5950926331589854 -0.15890321811694236 0.5950926331589854 -0.15890321811694236 0.2741267494042196 -0.09747993424628865
54400000700.0 0.2612061007726545 -0.11681172386186295 0.5970939925996884 -0.16355946549001096 0.5970939925996884 -0.16355946549001096 0.2698697249739581 -0.09647067986043052
55200000700.0 0.25700776419977406 -0.11608527249107749 0.5990953520403915 -0.16821571286307965 0.5990953520403915 -0.16821571286307965 0.26561270054369657 -0.09546142547457241
56000000700.0 0.25280942762689357 -0.11535882112029203 0.6010967114810947 -0.1728719602361484 0.6010967114810947 -0.1728719602361484 0.261355676113435 -0.09445217108871427
56800000700.0 0.24861109105401313 -0.11463236974950652 0.6030980709217977 -0.177528207609217 0.6030980709217977 -0.177528207609217 0.25709865168317353 -0.09344291670285612
57600000700.0 0.24441275448113264 -0.11390591837872108 0.6050994303625008 -0.1821844549822857 0.6050994303625008 -0.1821844549822857 0.252841627252912 -0.092433662316998
58400000700.0 0.24021441790825215 -0.1131794670079356 0.6071007898032039 -0.1868407023553544 0.6071007898032039 -0.1868407023553544 0.24858460282265044 -0.09142440793113984
59200000700.0 0.23601608133537183 -0.1124530156371501 0.6091021492439069 -0.19149694972842304 0.6091021492439069 -0.19149694972842304 0.244327578392389 -0.09041515354528172
60000000700.0 0.2318177447624914 -0.11172656426636465 0.61110350868461 -0.1961531971014917 0.61110350868461 -0.1961531971014917 0.2400705539621275 -0.0894058991594236
60800000700.0 0.22761940818961096 -0.11100011289557918 0.6131048681253132 -0.2008094444745604 0.6131048681253132 -0.2008094444745604 0.23581352953186596 -0.08839664477356547
61600000700.0 0.22342107161673058 -0.11027366152479372 0.6151062275660163 -0.20546569184762906 0.6151062275660163 -0.20546569184762906 0.23155650510160453 -0.08738739038770735
62400000700.0 0.21922273504385015 -0.10954721015400828 0.6171075870067194 -0.21012193922069775 0.6171075870067194 -0.21012193922069775 0.22729948067134298 -0.08637813600184925
63200000700.0 0.2150243984709697 -0.10882075878322288 0.6191089464474225 -0.2147781865937664 0.6191089464474225 -0.2147781865937664 0.2230424562410815 -0.08536888161599118
64000000700.0 0.21082606189808928 -0.10809430741243745 0.6211103058881257 -0.21943443396683512 0.6211103058881257 -0.21943443396683512 0.21878543181082 -0.0843596272301331
64800000700.0 0.2066277253252088 -0.10736785604165203 0.6231116653288288 -0.2240906813399039 0.6231116653288288 -0.2240906813399039 0.2145284073805584 -0.08335037284427502
65600000700.0 0.2024293887523283 -0.10664140467086661 0.6251130247695318 -0.22874692871297256 0.6251130247695318 -0.22874692871297256 0.2102713829502969 -0.08234111845841692
66400000700.0 0.19823105217944786 -0.10591495330008116 0.6271143842102349 -0.23340317608604128 0.6271143842102349 -0.23340317608604128 0.20601435852003536 -0.08133186407255882
66666667300.0 0.19683160700501573 -0.10567280290369029 0.6277815038570227 -0.23495525815571028 0.6277815038570227 -0.23495525815571028 0.20459535073136687 -0.08099544602804397
67200000700.0 0.19403271560656726 -0.10518850192929571 0.629115743650938 -0.23805942345911005 0.629115743650938 -0.23805942345911005 0.2017573340897737 -0.08032260968670073
68000000700.0 0.18983437903368683 -0.10446205055851027 0.631117103091641 -0.24271567083217868 0.631117103091641 -0.24271567083217868 0.19750030965951215 -0.0793133553008426
68800000700.0 0.1856360424608064 -0.10373559918772479 0.633118462532344 -0.2473719182052474 0.633118462532344 -0.2473719182052474 0.19324328522925066 -0.07830410091498448
69600000700.0 0.18143770588792596 -0.10300914781693934 0.6351198219730472 -0.2520281655783161 0.6351198219730472 -0.2520281655783161 0.18898626079898911 -0.07729484652912635
70400000600.0 0.17723936983983757 -0.10228269653696029 0.6371211811635804 -0.25668441236935385 0.6371211811635804 -0.25668441236935385 0.18472923690085563 -0.07628559226942502
71200000600.0 0.17304103326695708 -0.10155624516617483 0.6391225406042834 -0.26134065974242254 0.6391225406042834 -0.26134065974242254 0.18047221247059414 -0.0752763378835669
72000000600.0 0.16884269669407664 -0.10082979379538937 0.6411239000449864 -0.2659969071154912 0.6411239000449864 -0.2659969071154912 0.1762151880403326 -0.07426708349770879
72800000600.0 0.16464436012119615 -0.1001033424246039 0.6431252594856895 -0.27065315448856 0.6431252594856895 -0.27065315448856 0.17195816361007105 -0.07325782911185065
73600000600.0 0.16044602354831572 -0.09937689105381842 0.6451266189263927 -0.27530940186162867 0.6451266189263927 -0.27530940186162867 0.1677011391798095 -0.0722485747259925
74400000600.0 0.15624768697543517 -0.09865043968303296 0.6471279783670957 -0.27996564923469724 0.6471279783670957 -0.27996564923469724 0.163444114749548 -0.07123932034013437
75200000600.0 0.15204935040255474 -0.0979239883122475 0.6491293378077987 -0.28462189660776593 0.6491293378077987 -0.28462189660776593 0.15918709031928635 -0.07023006595427626
76000000600.0 0.14785101382967425 -0.09719753694146202 0.6511306972485018 -0.28927814398083473 0.6511306972485018 -0.28927814398083473 0.1549300658890248 -0.06922081156841813
76800000600.0 0.14365267725679381 -0.09647108557067656 0.6531320566892049 -0.2939343913539033 0.6531320566892049 -0.2939343913539033 0.15067304145876326 -0.06821155718256
77600000600.0 0.13945434068391338 -0.0957446341998911 0.655133416129908 -0.298590638726972 0.655133416129908 -0.298590638726972 0.14641601702850177 -0.06720230279670188
78400000600.0 0.1352560041110329 -0.09501818282910562 0.6571347755706112 -0.3032468861000407 0.6571347755706112 -0.3032468861000407 0.14215899259824022 -0.06619304841084375
79200000600.0 0.1310576675381524 -0.09429173145832016 0.6591361350113142 -0.3079031334731094 0.6591361350113142 -0.3079031334731094 0.13790196816797867 -0.06518379402498563
80000000600.0 0.12685933096527197 -0.0935652800875347 0.6611374944520172 -0.31255938084617807 0.6611374944520172 -0.31255938084617807 0.13364494373771718 -0.0641745396391275
80800000600.0 0.12266099439239153 -0.09283882871674924 0.6631388538927203 -0.31721562821924676 0.6631388538927203 -0.31721562821924676 0.12938791930745563 -0.06316528525326938
81600000600.0 0.11846265781951104 -0.09211237734596378 0.6651402133334234 -0.32187187559231545 0.6651402133334234 -0.32187187559231545 0.1251308948771941 -0.062156030867411255
82400000600.0 0.1142643212466306 -0.09138592597517832 0.6671415727741266 -0.32652812296538414 0.6671415727741266 -0.32652812296538414 0.12087387044693254 -0.06114677648155313
83200000600.0 0.11006598467375017 -0.09065947460439283 0.6691429322148296 -0.3311843703384528 0.6691429322148296 -0.3311843703384528 0.11661684601667105 -0.060137522095695006
84000000600.0 0.10586764810086974 -0.08993302323360737 0.6711442916555327 -0.3358406177115215 0.6711442916555327 -0.3358406177115215 0.1123598215864095 -0.059128267709836854
84800000600.0 0.10166931152798925 -0.0892065718628219 0.6731456510962357 -0.3404968650845902 0.6731456510962357 -0.3404968650845902 0.10810279715614796 -0.05811901332397873
85600000600.0 0.09747097495510881 -0.08848012049203643 0.6751470105369388 -0.3451531124576589 0.6751470105369388 -0.3451531124576589 0.10384577272588646 -0.057109758938120606
86400000600.0 0.09327263838222832 -0.08775366912125097 0.6771483699776419 -0.3498093598307276 0.6771483699776419 -0.3498093598307276 0.09958874829562492 -0.05610050455226248
87200000600.0 0.08907430180934783 -0.0870272177504655 0.6791497294183451 -0.3544656072037963 0.6791497294183451 -0.3544656072037963 0.09533172386536337 -0.05509125016640436
88000000600.0 0.08487596523646745 -0.08630076637968005 0.6811510888590481 -0.35912185457686496 0.6811510888590481 -0.35912185457686496 0.09107469943510188 -0.054081995780546246
88800000600.0 0.08067762866358691 -0.08557431500889458 0.6831524482997512 -0.3637781019499336 0.6831524482997512 -0.3637781019499336 0.08681767500484028 -0.053072741394688094
89600000600.0 0.07647929209070647 -0.08484786363810912 0.6851538077404542 -0.3684343493230023 0.6851538077404542 -0.3684343493230023 0.08256065057457873 -0.05206348700882997
90400000500.0 0.0722809560426182 -0.08412141235813009 0.6871551669309873 -0.37309059611404 0.6871551669309873 -0.37309059611404 0.07830362667644536 -0.05105423274912867
91200000500.0 0.06808261946973765 -0.0833949609873446 0.6891565263716904 -0.3777468434871088 0.6891565263716904 -0.3777468434871088 0.07404660224618376 -0.050044978363270515
92000000500.0 0.06388428289685716 -0.08266850961655914 0.6911578858123935 -0.3824030908601775 0.6911578858123935 -0.3824030908601775 0.06978957781592221 -0.049035723977412404
92800000500.0 0.059685946323976724 -0.08194205824577368 0.6931592452530966 -0.38705933823324606 0.6931592452530966 -0.38705933823324606 0.06553255338566072 -0.04802646959155428
93600000500.0 0.05548760975109629 -0.08121560687498822 0.6951606046937997 -0.39171558560631475 0.6951606046937997 -0.39171558560631475 0.06127552895539917 -0.047017215205696156
94400000500.0 0.051289273178215855 -0.08048915550420276 0.6971619641345027 -0.39637183297938344 0.6971619641345027 -0.39637183297938344 0.05701850452513768 -0.04600796081983803
95200000500.0 0.04709093660533542 -0.0797627041334173 0.6991633235752058 -0.40102808035245213 0.6991633235752058 -0.40102808035245213 0.052761480094876134 -0.04499870643397992
96000000500.0 0.042892600032454986 -0.07903625276263183 0.7011646830159088 -0.4056843277255208 0.7011646830159088 -0.4056843277255208 0.04850445566461459 -0.0439894520481218
96800000500.0 0.038694263459574385 -0.07830980139184636 0.703166042456612 -0.4103405750985895 0.703166042456612 -0.4103405750985895 0.04424743123435304 -0.042980197662263644
97600000500.0 0.034495926886694006 -0.0775833500210609 0.7051674018973151 -0.4149968224716582 0.7051674018973151 -0.4149968224716582 0.039990406804091494 -0.04197094327640552
98400000500.0 0.030297590313813516 -0.07685689865027544 0.7071687613380182 -0.4196530698447269 0.7071687613380182 -0.4196530698447269 0.03573338237382995 -0.04096168889054741
99200000500.0 0.026099253740933137 -0.07613044727948998 0.7091701207787212 -0.4243093172177956 0.7091701207787212 -0.4243093172177956 0.03147635794356851 -0.03995243450468927
100000000000.0 0.02190091979201303 -0.07540399636273662 0.7111714789685747 -0.4289655616807096 0.7111714789685747 -0.4289655616807096 0.02721933617394723 -0.03894318074961514
100800000000.0 0.01770258321913254 -0.07467754499195116 0.7131728384092777 -0.4336218090537783 0.7131728384092777 -0.4336218090537783 0.02296231174368568 -0.03793392636375703
101600000000.0 0.01350424664625216 -0.0739510936211657 0.7151741978499808 -0.438278056426847 0.7151741978499808 -0.438278056426847 0.018705287313424135 -0.03692467197789892
102400000000.0 0.00930591007337167 -0.07322464225038024 0.7171755572906839 -0.44293430379991566 0.7171755572906839 -0.44293430379991566 0.0144482628831627 -0.03591541759204078
103200000000.0 0.00510757350049118 -0.07249819087959476 0.7191769167313871 -0.44759055117298446 0.7191769167313871 -0.44759055117298446 0.010191238452901041 -0.034906163206182644
104000000000.0 0.0009092369276106904 -0.0717717395088093 0.7211782761720901 -0.45224679854605304 0.7211782761720901 -0.45224679854605304 0.005934214022639495 -0.033896908820324534
104800000000.0 -0.0032890996452696886 -0.07104528813802384 0.7231796356127932 -0.45690304591912173 0.7231796356127932 -0.45690304591912173 0.0016771895923780589 -0.032887654434466396
105600000000.0 -0.007487436218150179 -0.07031883676723838 0.7251809950534962 -0.4615592932921904 0.7251809950534962 -0.4615592932921904 -0.002579834837883488 -0.031878400048608285
106400000000.0 -0.011685772791030558 -0.06959238539645292 0.7271823544941993 -0.4662155406652591 0.7271823544941993 -0.4662155406652591 -0.006836859268145035 -0.030869145662750147
107200000000.0 -0.015884109363911048 -0.06886593402566746 0.7291837139349024 -0.4708717880383278 0.7291837139349024 -0.4708717880383278 -0.011093883698406581 -0.029859891276892037
108000000000.0 -0.020082445936791538 -0.068139482654882 0.7311850733756055 -0.4755280354113965 0.7311850733756055 -0.4755280354113965 -0.015350908128668017 -0.028850636891033926
108800000000.0 -0.024280782509672028 -0.06741303128409652 0.7331864328163086 -0.4801842827844652 0.7331864328163086 -0.4801842827844652 -0.019607932558929675 -0.02784138250517576
109600000000.0 -0.028479119082552518 -0.06668657991331106 0.7351877922570116 -0.48484053015753387 0.7351877922570116 -0.48484053015753387 -0.02386495698919122 -0.02683212811931765
110400000000.0 -0.0326774556554329 -0.0659601285425256 0.7371891516977147 -0.48949677753060256 0.7371891516977147 -0.48949677753060256 -0.028121981419452657 -0.02582287373345954
111200000000.0 -0.03687579222831339 -0.06523367717174014 0.7391905111384178 -0.49415302490367125 0.7391905111384178 -0.49415302490367125 -0.032379005849714204 -0.0248136193476014
112000000000.0 -0.041074128801193766 -0.06450722580095468 0.741191870579121 -0.49880927227673993 0.741191870579121 -0.49880927227673993 -0.03663603027997575 -0.02380436496174329
112800000000.0 -0.045272465374074256 -0.0637807744301692 0.743193230019824 -0.5034655196498086 0.743193230019824 -0.5034655196498086 -0.0408930547102373 -0.022795110575885152
113600000000.0 -0.049470801946954635 -0.06305432305938374 0.745194589460527 -0.5081217670228773 0.745194589460527 -0.5081217670228773 -0.04515007914049873 -0.021785856190027042
114400000000.0 -0.053669138519835125 -0.06232787168859828 0.7471959489012301 -0.512778014395946 0.7471959489012301 -0.512778014395946 -0.04940710357076028 -0.02077660180416893
115200000000.0 -0.057867475092715726 -0.06160142031781281 0.7491973083419332 -0.5174342617690146 0.7491973083419332 -0.5174342617690146 -0.05366412800102194 -0.019767347418310766
116000000000.0 -0.062065811665596105 -0.06087496894702735 0.7511986677826363 -0.5220905091420833 0.7511986677826363 -0.5220905091420833 -0.057921152431283485 -0.018758093032452655
116800000000.0 -0.0662641482384766 -0.060148517576241886 0.7532000272233395 -0.526746756515152 0.7532000272233395 -0.526746756515152 -0.06217817686154492 -0.017748838646594545
117600000000.0 -0.07046248481135697 -0.059422066205456425 0.7552013866640425 -0.5314030038882207 0.7552013866640425 -0.5314030038882207 -0.06643520129180647 -0.016739584260736406
118400000000.0 -0.07466082138423746 -0.058695614834670964 0.7572027461047455 -0.5360592512612894 0.7572027461047455 -0.5360592512612894 -0.07069222572206801 -0.015730329874878296
119200000000.0 -0.07885915795711784 -0.057969163463885504 0.7592041055454486 -0.5407154986343581 0.7592041055454486 -0.5407154986343581 -0.07494925015232945 -0.014721075489020158
120000000000.0 -0.08305749452999833 -0.05724271209310004 0.7612054649861517 -0.5453717460074268 0.7612054649861517 -0.5453717460074268 -0.079206274582591 -0.013711821103162047
120800000000.0 -0.08725583110287882 -0.05651626072231457 0.7632068244268548 -0.5500279933804955 0.7632068244268548 -0.5500279933804955 -0.08346329901285265 -0.01270256671730391
121600000000.0 -0.09145416767575931 -0.05578980935152911 0.765208183867558 -0.5546842407535642 0.765208183867558 -0.5546842407535642 -0.0877203234431142 -0.011693312331445771
122400000000.0 -0.0956525042486398 -0.055063357980743646 0.767209543308261 -0.5593404881266328 0.767209543308261 -0.5593404881266328 -0.09197734787337564 -0.01068405794558766
123200000000.0 -0.09985084082152018 -0.054336906609958185 0.769210902748964 -0.5639967354997015 0.769210902748964 -0.5639967354997015 -0.09623437230363718 -0.00967480355972955
124000000000.0 -0.10404917739440067 -0.053610455239172725 0.7712122621896671 -0.5686529828727702 0.7712122621896671 -0.5686529828727702 -0.10049139673389873 -0.008665549173871412
124800000000.0 -0.10824751396728105 -0.052884003868387264 0.7732136216303702 -0.5733092302458389 0.7732136216303702 -0.5733092302458389 -0.10474842116416028 -0.007656294788013301
125600000000.0 -0.11244585054016154 -0.0521575524976018 0.7752149810710733 -0.5779654776189076 0.7752149810710733 -0.5779654776189076 -0.10900544559442171 -0.006647040402155163
126400000000.0 -0.11664418711304203 -0.05143110112681633 0.7772163405117765 -0.5826217249919763 0.7772163405117765 -0.5826217249919763 -0.11326247002468337 -0.005637786016297025
127200000000.0 -0.12084252368592252 -0.05070464975603087 0.7792176999524795 -0.587277972365045 0.7792176999524795 -0.587277972365045 -0.11751949445494492 -0.004628531630438915
128000000000.0 -0.1250408602588029 -0.04997819838524539 0.7812190593931825 -0.5919342197381137 0.7812190593931825 -0.5919342197381137 -0.12177651888520635 -0.0036192772445807764
128800000000.0 -0.1292391968316834 -0.049251747014459904 0.7832204188338856 -0.5965904671111824 0.7832204188338856 -0.5965904671111824 -0.1260335433154679 -0.002610022858722666
129600000000.0 -0.13343753340456388 -0.04852529564367444 0.7852217782745887 -0.601246714484251 0.7852217782745887 -0.601246714484251 -0.13029056774572945 -0.0016007684728645277
130400000000.0 -0.13763586997744426 -0.04779884427288898 0.7872231377152918 -0.6059029618573195 0.7872231377152918 -0.6059029618573195 -0.134547592175991 -0.0005915140870063895
131200000000.0 -0.14183420655032475 -0.04707239290210352 0.7892244971559949 -0.6105592092303882 0.7892244971559949 -0.6105592092303882 -0.13880461660625243 0.0004177402988517209
132000000000.0 -0.14603254312320513 -0.04634594153131806 0.7912258565966979 -0.6152154566034569 0.7912258565966979 -0.6152154566034569 -0.14306164103651398 0.0014269946847098591
132800000000.0 -0.15023087969608573 -0.045619490160532586 0.793227216037401 -0.6198717039765258 0.793227216037401 -0.6198717039765258 -0.14731866546677563 0.0024362490705679973
133333334000.0 -0.15302977424328645 -0.04513518864129948 0.794561457332336 -0.6229758727721109 0.794561457332336 -0.6229758727721109 -0.1501566853011369 0.0031090861688520544
133600000000.0 -0.1544292162689661 -0.044893038789747125 0.7952285754781041 -0.6245279513495945 0.7952285754781041 -0.6245279513495945 -0.15157568989703707 0.0034455034564261078
134400000000.0 -0.1586275528418466 -0.044166587418961664 0.7972299349188072 -0.6291841987226632 0.7972299349188072 -0.6291841987226632 -0.15583271432729862 0.004454757842284246
135200000000.0 -0.16282588941472698 -0.0434401360481762 0.7992312943595102 -0.6338404460957316 0.7992312943595102 -0.6338404460957316 -0.16008973875756016 0.005464012228142356
136000000000.0 -0.16702422598760747 -0.04271368467739074 0.8012326538002134 -0.6384966934688003 0.8012326538002134 -0.6384966934688003 -0.1643467631878217 0.006473266614000467
136800000000.0 -0.17122256256048796 -0.04198723330660528 0.8032340132409164 -0.643152940841869 0.8032340132409164 -0.643152940841869 -0.16860378761808315 0.007482520999858605
137600000000.0 -0.17542089913336834 -0.04126078193581982 0.8052353726816195 -0.6478091882149377 0.8052353726816195 -0.6478091882149377 -0.1728608120483447 0.008491775385716716
138400000000.0 -0.17961923570624894 -0.04053433056503433 0.8072367321223226 -0.6524654355880066 0.8072367321223226 -0.6524654355880066 -0.17711783647860635 0.009501029771574854
139200000000.0 -0.18381757227912932 -0.039807879194248885 0.8092380915630257 -0.6571216829610751 0.8092380915630257 -0.6571216829610751 -0.18137486090886779 0.010510284157432992
140000000000.0 -0.1880159088520098 -0.03908142782346341 0.8112394510037287 -0.6617779303341438 0.8112394510037287 -0.6617779303341438 -0.18563188533912933 0.011519538543291102
140800000000.0 -0.19221424542489018 -0.038354976452677964 0.8132408104444319 -0.6664341777072125 0.8132408104444319 -0.6664341777072125 -0.18988890976939088 0.01252879292914924
141600000000.0 -0.19641258199777067 -0.03762852508189249 0.8152421698851349 -0.6710904250802812 0.8152421698851349 -0.6710904250802812 -0.19414593419965243 0.013538047315007351
142400000000.0 -0.20061091857065105 -0.03690207371110704 0.817243529325838 -0.6757466724533499 0.817243529325838 -0.6757466724533499 -0.19840295862991386 0.014547301700865461
143200000000.0 -0.20480925514353154 -0.03617562234032157 0.8192448887665411 -0.6804029198264185 0.8192448887665411 -0.6804029198264185 -0.2026599830601754 0.0155565560867236
144000000000.0 -0.20900759171641203 -0.03544917096953609 0.8212462482072442 -0.6850591671994872 0.8212462482072442 -0.6850591671994872 -0.20691700749043707 0.016565810472581738
144800000000.0 -0.21320592828929252 -0.034722719598750645 0.8232476076479472 -0.6897154145725559 0.8232476076479472 -0.6897154145725559 -0.2111740319206985 0.01757506485843985
145600000000.0 -0.217404264862173 -0.03399626822796517 0.8252489670886504 -0.6943716619456246 0.8252489670886504 -0.6943716619456246 -0.21543105635096005 0.018584319244297987
146400000000.0 -0.2216026014350534 -0.033269816857179724 0.8272503265293534 -0.6990279093186933 0.8272503265293534 -0.6990279093186933 -0.2196880807812216 0.019593573630156097
147200000000.0 -0.22580093800793388 -0.03254336548639425 0.8292516859700565 -0.703684156691762 0.8292516859700565 -0.703684156691762 -0.22394510521148314 0.020602828016014235
148000000000.0 -0.22999927458081426 -0.0318169141156088 0.8312530454107596 -0.7083404040648307 0.8312530454107596 -0.7083404040648307 -0.22820212964174458 0.021612082401872346
148800000000.0 -0.23419761115369475 -0.031090462744823327 0.8332544048514626 -0.7129966514378994 0.8332544048514626 -0.7129966514378994 -0.23245915407200612 0.022621336787730456
149600000000.0 -0.23839594772657513 -0.03036401137403788 0.8352557642921656 -0.717652898810968 0.8352557642921656 -0.717652898810968 -0.23671617850226767 0.023630591173588594
150400000000.0 -0.24259428429945573 -0.029637560003252406 0.8372571237328688 -0.7223091461840367 0.8372571237328688 -0.7223091461840367 -0.24097320293252933 0.024639845559446732
151200000000.0 -0.2467926208723361 -0.02891110863246693 0.8392584831735719 -0.7269653935571054 0.8392584831735719 -0.7269653935571054 -0.24523022736279076 0.025649099945304843
152000000000.0 -0.2509909574452166 -0.028184657261681484 0.841259842614275 -0.7316216409301741 0.841259842614275 -0.7316216409301741 -0.2494872517930523 0.02665835433116298
152800000000.0 -0.2551892940180971 -0.02745820589089601 0.8432612020549781 -0.7362778883032428 0.8432612020549781 -0.7362778883032428 -0.25374427622331386 0.02766760871702109
153600000000.0 -0.25938763059097747 -0.026731754520110562 0.8452625614956811 -0.7409341356763115 0.8452625614956811 -0.7409341356763115 -0.2580013006535753 0.02867686310287923
154400000000.0 -0.26358596716385796 -0.026005303149325087 0.8472639209363841 -0.7455903830493802 0.8472639209363841 -0.7455903830493802 -0.26225832508383684 0.02968611748873734
155200000000.0 -0.26778430373673834 -0.02527885177853964 0.8492652803770873 -0.7502466304224489 0.8492652803770873 -0.7502466304224489 -0.2665153495140984 0.03069537187459545
156000000000.0 -0.27198264030961894 -0.024552400407754138 0.8512666398177904 -0.7549028777955176 0.8512666398177904 -0.7549028777955176 -0.27077237394436005 0.03170462626045362
156800000000.0 -0.2761809768824993 -0.02382594903696869 0.8532679992584935 -0.7595591251685863 0.8532679992584935 -0.7595591251685863 -0.2750293983746215 0.03271388064631173
157600000000.0 -0.2803793134553798 -0.023099497666183216 0.8552693586991966 -0.764215372541655 0.8552693586991966 -0.764215372541655 -0.279286422804883 0.03372313503216984
158400000000.0 -0.2845776500282602 -0.02237304629539777 0.8572707181398996 -0.7688716199147236 0.8572707181398996 -0.7688716199147236 -0.2835434472351446 0.034732389418027976
159200000000.0 -0.2887759866011407 -0.021646594924612295 0.8592720775806026 -0.7735278672877923 0.8592720775806026 -0.7735278672877923 -0.287800471665406 0.035741643803886086
160000000000.0 -0.29297432317402117 -0.020920143553826848 0.8612734370213058 -0.778184114660861 0.8612734370213058 -0.778184114660861 -0.29205749609566756 0.036750898189744224
160800000000.0 -0.29717265974690155 -0.020193692183041373 0.8632747964620089 -0.7828403620339297 0.8632747964620089 -0.7828403620339297 -0.2963145205259291 0.037760152575602335
161600000000.0 -0.30137099631978215 -0.019467240812255898 0.865276155902712 -0.7874966094069984 0.865276155902712 -0.7874966094069984 -0.30057154495619076 0.03876940696146047
162400000000.0 -0.3055693328926625 -0.01874078944147045 0.8672775153434151 -0.7921528567800671 0.8672775153434151 -0.7921528567800671 -0.3048285693864522 0.03977866134731861
163200000000.0 -0.309767669465543 -0.018014338070684977 0.8692788747841181 -0.7968091041531358 0.8692788747841181 -0.7968091041531358 -0.30908559381671374 0.04078791573317672
164000000000.0 -0.3139660060384234 -0.01728788669989953 0.8712802342248211 -0.8014653515262045 0.8712802342248211 -0.8014653515262045 -0.3133426182469753 0.04179717011903483
164800000000.0 -0.3181643426113039 -0.016561435329114055 0.8732815936655243 -0.8061215988992732 0.8732815936655243 -0.8061215988992732 -0.31759964267723684 0.04280642450489297
165600000000.0 -0.32236267918418426 -0.015834983958328608 0.8752829531062274 -0.8107778462723418 0.8752829531062274 -0.8107778462723418 -0.3218566671074983 0.04381567889075108
166400000000.0 -0.32656101575706475 -0.015108532587543133 0.8772843125469305 -0.8154340936454103 0.8772843125469305 -0.8154340936454103 -0.3261136915377598 0.04482493327660922
167200000000.0 -0.33075935232994524 -0.014382081216757686 0.8792856719876335 -0.820090341018479 0.8792856719876335 -0.820090341018479 -0.33037071596802137 0.04583418766246733
168000000000.0 -0.33495768890282573 -0.013655629845972211 0.8812870314283366 -0.8247465883915479 0.8812870314283366 -0.8247465883915479 -0.3346277403982829 0.04684344204832547
168800000000.0 -0.3391560254757062 -0.012929178475186737 0.8832883908690397 -0.8294028357646166 0.8832883908690397 -0.8294028357646166 -0.33888476482854446 0.047852696434183606
169600000000.0 -0.3433543620485866 -0.01220272710440129 0.8852897503097428 -0.8340590831376853 0.8852897503097428 -0.8340590831376853 -0.343141789258806 0.048861950820041716
170400000000.0 -0.3475526986214671 -0.011476275733615815 0.8872911097504459 -0.8387153305107538 0.8872911097504459 -0.8387153305107538 -0.34739881368906755 0.04987120520589983
171200000000.0 -0.35175103519434747 -0.010749824362830368 0.889292469191149 -0.8433715778838224 0.889292469191149 -0.8433715778838224 -0.351655838119329 0.050880459591757965
172000000000.0 -0.35594937176722796 -0.010023372992044893 0.891293828631852 -0.8480278252568911 0.891293828631852 -0.8480278252568911 -0.35591286254959054 0.051889713977616075
172800000000.0 -0.36014770834010834 -0.009296921621259446 0.893295188072555 -0.8526840726299598 0.893295188072555 -0.8526840726299598 -0.3601698869798521 0.052898968363474214
173600000000.0 -0.36434604491298894 -0.008570470250473944 0.8952965475132582 -0.8573403200030285 0.8952965475132582 -0.8573403200030285 -0.36442691141011363 0.05390822274933235
174400000000.0 -0.3685443814858693 -0.007844018879688497 0.8972979069539613 -0.8619965673760972 0.8972979069539613 -0.8619965673760972 -0.3686839358403752 0.05491747713519046
175200000000.0 -0.3727427180587498 -0.007117567508903022 0.8992992663946644 -0.8666528147491659 0.8992992663946644 -0.8666528147491659 -0.3729409602706367 0.0559267315210486
176000000000.0 -0.3769410546316303 -0.006391116138117575 0.9013006258353674 -0.8713090621222346 0.9013006258353674 -0.8713090621222346 -0.37719798470089827 0.05693598590690671
176800000000.0 -0.3811393912045107 -0.0056646647673321004 0.9033019852760705 -0.8759653094953033 0.9033019852760705 -0.8759653094953033 -0.3814550091311597 0.05794524029276482
177600000000.0 -0.38533772777739117 -0.0049382133965466535 0.9053033447167735 -0.880621556868372 0.9053033447167735 -0.880621556868372 -0.38571203356142125 0.05895449467862296
178400000000.0 -0.38953606435027155 -0.004211762025761179 0.9073047041574767 -0.8852778042414406 0.9073047041574767 -0.8852778042414406 -0.3899690579916828 0.05996374906448107
179200000000.0 -0.39373440092315204 -0.0034853106549757318 0.9093060635981798 -0.8899340516145093 0.9093060635981798 -0.8899340516145093 -0.39422608242194435 0.06097300345033921
180000000000.0 -0.3979327374960324 -0.002758859284190257 0.9113074230388828 -0.894590298987578 0.9113074230388828 -0.894590298987578 -0.3984831068522058 0.06198225783619732
180800000000.0 -0.4021310740689129 -0.00203240791340481 0.9133087824795859 -0.8992465463606467 0.9133087824795859 -0.8992465463606467 -0.40274013128246733 0.06299151222205543
181600000000.0 -0.4063294106417933 -0.0013059565426193354 0.9153101419202889 -0.9039027937337152 0.9153101419202889 -0.9039027937337152 -0.4069971557127289 0.06400076660791357
182400000000.0 -0.410527747214674 -0.0005795051718338606 0.9173115013609922 -0.9085590411067841 0.9173115013609922 -0.9085590411067841 -0.41125418014299053 0.06501002099377173
183200000000.0 -0.4147260837875544 0.0001469461989516141 0.9193128608016952 -0.9132152884798528 0.9193128608016952 -0.9132152884798528 -0.4155112045732521 0.06601927537962984
184000000000.0 -0.41892442036043487 0.0008733975697370611 0.9213142202423983 -0.9178715358529215 0.9213142202423983 -0.9178715358529215 -0.4197682290035136 0.06702852976548798
184800000000.0 -0.42312275693331536 0.0015998489405225358 0.9233155796831014 -0.9225277832259902 0.9233155796831014 -0.9225277832259902 -0.4240252534337752 0.06803778415134609
185600000000.0 -0.42732109350619574 0.0023263003113079828 0.9253169391238044 -0.9271840305990589 0.9253169391238044 -0.9271840305990589 -0.4282822778640366 0.0690470385372042
186400000000.0 -0.4315194300790762 0.0030527516820934575 0.9273182985645074 -0.9318402779721275 0.9273182985645074 -0.9318402779721275 -0.43253930229429816 0.07005629292306234
187200000000.0 -0.4357177666519566 0.0037792030528789045 0.9293196580052105 -0.9364965253451962 0.9293196580052105 -0.9364965253451962 -0.4367963267245597 0.07106554730892045
188000000000.0 -0.4399161032248371 0.004505654423664379 0.9313210174459137 -0.9411527727182649 0.9313210174459137 -0.9411527727182649 -0.44105335115482114 0.07207480169477859
188800000000.0 -0.4441144397977175 0.005232105794449826 0.9333223768866168 -0.9458090200913336 0.9333223768866168 -0.9458090200913336 -0.4453103755850827 0.0730840560806367
189600000000.0 -0.44831277637059797 0.005958557165235301 0.9353237363273198 -0.9504652674644023 0.9353237363273198 -0.9504652674644023 -0.44956740001534423 0.07409331046649481
190400000000.0 -0.45251111294347846 0.006685008536020748 0.9373250957680228 -0.9551215148374708 0.9373250957680228 -0.9551215148374708 -0.4538244244456058 0.07510256485235295
191200000000.0 -0.45670944951635883 0.007411459906806223 0.9393264552087259 -0.9597777622105395 0.9393264552087259 -0.9597777622105395 -0.4580814488758673 0.07611181923821106
192000000000.0 -0.4609077860892392 0.00813791127759167 0.941327814649429 -0.9644340095836081 0.941327814649429 -0.9644340095836081 -0.46233847330612887 0.0771210736240692
192800000000.0 -0.4651061226621198 0.008864362648377144 0.9433291740901322 -0.9690902569566768 0.9433291740901322 -0.9690902569566768 -0.4665954977363902 0.07813032800992731
193600000000.0 -0.4693044592350002 0.009590814019162591 0.9453305335308352 -0.9737465043297455 0.9453305335308352 -0.9737465043297455 -0.47085252216665174 0.07913958239578542
194400000000.0 -0.4735027958078808 0.010317265389948094 0.9473318929715384 -0.9784027517028144 0.9473318929715384 -0.9784027517028144 -0.4751095465969135 0.08014883678164358
195200000000.0 -0.4777011323807612 0.011043716760733568 0.9493332524122414 -0.9830589990758831 0.9493332524122414 -0.9830589990758831 -0.47936657102717506 0.08115809116750172
196000000000.0 -0.4818994689536418 0.011770168131519015 0.9513346118529444 -0.9877152464489518 0.9513346118529444 -0.9877152464489518 -0.4836235954574366 0.08216734555335983
196800000000.0 -0.48609780552652215 0.01249661950230449 0.9533359712936476 -0.9923714938220205 0.9533359712936476 -0.9923714938220205 -0.48788061988769815 0.08317659993921797
197600000000.0 -0.49029614209940253 0.013223070873089937 0.9553373307343507 -0.9970277411950892 0.9553373307343507 -0.9970277411950892 -0.4921376443179597 0.08418585432507608
198400000000.0 -0.49449447867228313 0.013949522243875412 0.9573386901750538 -1.0016839885681579 0.9573386901750538 -1.0016839885681579 -0.496394668748221 0.08519510871093419
199200000000.0 -0.4986928152451635 0.014675973614660859 0.9593400496157568 -1.0063402359412263 0.9593400496157568 -1.0063402359412263 -0.5006516931784826 0.08620436309679233
200000000000.0 -0.5028911518180439 0.015402424985446334 0.9613414090564599 -1.010996483314295 0.9613414090564599 -1.010996483314295 -0.5049087176087441 0.08721361748265047

583
param_vf.py Normal file
View File

@@ -0,0 +1,583 @@
"""
Parametric (multivariate) orthonormal vector fitting for geometry + frequency.
根据论文: Robust Parametric Macromodeling Using Multivariate Orthonormal Vector Fitting
核心思想 (简化实现版本):
1. 在频域上使用一组全局极点 a_k, 通过所有参数样本共享。
2. 对每个几何样本 s (由 (W,L) 给出) 与端口对 (i,j) 构建线性最小二乘问题, 固定极点估计该样本的残值 r_{k,s}, 以及常数/斜率项 d_s, e_s。
3. 将随几何参数变化的残值/常数/斜率在一个离散正交 (QR) 的多元多项式基 Φ_q(W,L) 上展开: r_k(W,L) ≈ Σ_q c_{k,q} Φ_q(W,L)。
4. 评价阶段: 先用 (W,L) 计算 Φ(W,L), 再恢复 r_k,d,e, 组合成有理函数 Σ_k r_k/(p-a_k)+d+p e。
该文件实现一个最小可用版本, 方便后续扩展(极点迭代 / 被动性约束 / 模型压缩等)。
"""
from __future__ import annotations
from dataclasses import dataclass
from typing import List, Tuple, Dict, Any, Optional
import numpy as np
from skrf import Network
import skrf as rf
from models.capa import Capa
from models.basic import ModelBasicDatasetUnit
import warnings
@dataclass
class ParametricVFConfig:
# 有理函数项数量 (K 个极点)
n_poles: int = 8
# 参数多项式最大总次数 (a+b <= degree)
param_total_degree: int = 3
# 频率单位: Hz (Network 中 f 默认 Hz)
damping: float = 0.02 # 极点实部相对于 2π f_max 的比例, 保证稳定
# 最大保留频率点 (特征频率抽样); None 表示不裁剪
max_freq_points: Optional[int] = None
# 频率选择方法: 'curvature' 或 'uniform'
freq_selection_method: str = 'curvature'
# 曲率阈值(可选), 仅 method='curvature' 时生效
curvature_threshold: Optional[float] = None
# VF 极点迭代次数 (0 表示不迭代)
vf_iterations: int = 0
# 极点迭代时是否打印警告
verbose: bool = True
# 未来可添加: 加权, 正则, 被动性投影等
def generate_monomial_exponents(dim: int, total_degree: int) -> List[Tuple[int, ...]]:
"""生成所有满足指数和 <= total_degree 的多元单项式指数。
对于 2 维 (W,L) 返回 (a,b) 列表。
"""
exps: List[Tuple[int, ...]] = []
def rec(prefix: Tuple[int, ...], remaining_dim: int, max_sum: int):
if remaining_dim == 1:
for i in range(max_sum + 1):
exps.append(prefix + (i,))
return
for i in range(max_sum + 1):
rec(prefix + (i,), remaining_dim - 1, max_sum - i)
rec(tuple(), dim, total_degree)
return exps
class OrthonormalParamBasis:
"""离散点集上 (W,L) 的多项式基 QR 正交化封装。"""
def __init__(self, W: np.ndarray, L: np.ndarray, total_degree: int):
assert W.shape == L.shape
self.W_mean = W.mean()
self.W_std = W.std() or 1.0
self.L_mean = L.mean()
self.L_std = L.std() or 1.0
self.exps = generate_monomial_exponents(2, total_degree)
# 构建单项式矩阵 M (Ns x M)
M = []
Wn = (W - self.W_mean) / self.W_std
Ln = (L - self.L_mean) / self.L_std
for a, b in self.exps:
M.append((Wn ** a) * (Ln ** b))
M = np.stack(M, axis=1) # (Ns, M)
# QR 分解获得离散正交基 Q, R 上三角
Q, R = np.linalg.qr(M)
self.Q = Q # (Ns, Q)
self.R = R # (Q, Q)
self.R_inv = np.linalg.inv(R)
@property
def n_basis(self) -> int:
return self.Q.shape[1]
def phi_matrix(self) -> np.ndarray:
return self.Q # 对应样本点的基函数值
def eval(self, W: float, L: float) -> np.ndarray:
Wn = (W - self.W_mean) / self.W_std
Ln = (L - self.L_mean) / self.L_std
monomials = []
for a, b in self.exps:
monomials.append((Wn ** a) * (Ln ** b))
m = np.asarray(monomials) # (M,)
# M = Q R => 对新点 m = phi R => phi = m R^{-1}
phi = m @ self.R_inv
return phi # (Q,)
class ParametricVectorFitting:
"""多参数 (W,L) 二端口/多端口 S 参数的简化 Parametric VF。
模型形式 (单个端口对):
H(p; μ) ≈ Σ_{k=1..K} r_k(μ)/(p - a_k) + d(μ) + p e(μ)
其中 μ = (W,L)。r_k, d, e 在参数域被正交基展开。
"""
def __init__(self, config: ParametricVFConfig):
self.cfg = config
self.frequencies: np.ndarray | None = None # (Nf,)
self.poles: np.ndarray | None = None # (K,)
self.basis: OrthonormalParamBasis | None = None
# 残值系数: (nports, nports, K, Q)
self.residue_coeffs: np.ndarray | None = None
# d,e 系数: (nports, nports, Q)
self.d_coeffs: np.ndarray | None = None
self.e_coeffs: np.ndarray | None = None
self.meta: Dict[str, Any] = {}
def _init_global_poles(self, freqs: np.ndarray) -> np.ndarray:
f_min, f_max = freqs.min(), freqs.max()
# 使用对数均匀分布 (排除 0) + 负实部保证稳定
f_samples = np.logspace(np.log10(max(f_min, freqs[1] if len(freqs) > 1 else f_min*1.1)), np.log10(f_max), self.cfg.n_poles)
# 极点: -σ + j 2π f_k
sigma = self.cfg.damping * 2 * np.pi * f_max
poles = -sigma + 1j * 2 * np.pi * f_samples
return poles
# ----------------- 内部工具函数 (前置以便类型检查) -----------------
def _build_frequency_matrix(self, p_vec: np.ndarray, poles: np.ndarray) -> np.ndarray:
K = len(poles)
F_base = np.zeros((len(p_vec), K + 2), dtype=complex)
for k, a_k in enumerate(poles):
F_base[:, k] = 1.0 / (p_vec - a_k)
F_base[:, K] = 1.0
F_base[:, K + 1] = p_vec
return F_base
def _solve_residues_given_poles(self, aligned_S: List[np.ndarray], p_vec: np.ndarray):
assert self.poles is not None, "Poles not initialized"
nports = aligned_S[0].shape[1]
Ns = len(aligned_S)
K = len(self.poles)
residues_samples = np.zeros((nports, nports, K, Ns), dtype=complex)
d_samples = np.zeros((nports, nports, Ns), dtype=complex)
e_samples = np.zeros((nports, nports, Ns), dtype=complex)
F_base = self._build_frequency_matrix(p_vec, self.poles)
for s_idx, Sdata in enumerate(aligned_S):
for i in range(nports):
for j in range(nports):
y = Sdata[:, i, j]
x, *_ = np.linalg.lstsq(F_base, y, rcond=None)
residues_samples[i, j, :, s_idx] = x[:K]
d_samples[i, j, s_idx] = x[K]
e_samples[i, j, s_idx] = x[K+1]
return residues_samples, d_samples, e_samples
def _select_characteristic_freqs(self, freqs: np.ndarray, S_list: List[np.ndarray], max_points: int,
method: str = 'curvature', threshold: Optional[float] = None) -> np.ndarray:
Nf = len(freqs)
if max_points >= Nf:
return np.arange(Nf)
if method == 'uniform':
idx = np.linspace(0, Nf-1, max_points, dtype=int)
return np.unique(idx)
mags = []
for S in S_list:
mags.append(np.mean(np.abs(S), axis=(1,2))) # (Nf,)
agg = np.mean(np.stack(mags, axis=1), axis=1) # (Nf,)
curv = np.zeros_like(agg)
curv[1:-1] = np.abs(agg[2:] - 2*agg[1:-1] + agg[:-2])
base = {0, Nf-1}
if threshold is not None:
cand = np.where(curv >= threshold)[0]
else:
order = np.argsort(-curv)
cand = order
selected = list(base)
for idx in cand:
if idx in base:
continue
selected.append(idx)
if len(selected) >= max_points:
break
return np.array(sorted(selected))
def _vf_iterate_poles(self, aligned_S: List[np.ndarray], p_vec: np.ndarray,
residues_samples: np.ndarray, d_samples: np.ndarray, e_samples: np.ndarray) -> np.ndarray:
assert self.poles is not None, "Poles not initialized"
nports = residues_samples.shape[0]
K = len(self.poles)
Ns = len(aligned_S)
Nf = len(p_vec)
n_pairs = nports * nports
n_r = n_pairs * K
n_c = K
n_d = n_pairs
n_e = n_pairs
total_unknowns = n_r + n_c + n_d + n_e
rows = Ns * Nf * n_pairs
A = np.zeros((rows, total_unknowns), dtype=complex)
b = np.zeros(rows, dtype=complex)
def pair_index(i,j):
return i*nports + j
row = 0
for s_idx, Sdata in enumerate(aligned_S):
for f_idx, p in enumerate(p_vec):
denom = p - self.poles
basis_freq = 1.0/denom
for i in range(nports):
for j in range(nports):
H = Sdata[f_idx, i, j]
b[row] = H
pair = pair_index(i,j)
r_offset = pair*K
A[row, r_offset:r_offset+K] = basis_freq
A[row, n_r:n_r+K] = -H * basis_freq
A[row, n_r + n_c + pair] = 1.0
A[row, n_r + n_c + n_d + pair] = p
row += 1
x, *_ = np.linalg.lstsq(A, b, rcond=None)
c_k = x[n_r:n_r+n_c]
poly_total = np.poly(self.poles)
acc = poly_total.copy()
for k in range(K):
others = [self.poles[m] for m in range(K) if m != k]
term = c_k[k] * np.poly(others)
acc = np.polyadd(acc, term)
new_poles = np.roots(acc)
return new_poles
def fit(self, dataset: List[ModelBasicDatasetUnit], network_loader=Capa.network):
# 载入所有 Network
networks: List[Network] = []
W_list, L_list = [], []
for unit in dataset:
net = network_loader(unit.result_dir, unit.id)
networks.append(net)
W_list.append(unit.parameters["W"])
L_list.append(unit.parameters["L"])
assert len(networks) > 0, "Empty dataset"
# 处理不同频率点数量: 取公共重叠频段并插值到统一网格
freqs_list = [n.f for n in networks]
f_start = max(f[0] for f in freqs_list)
f_stop = min(f[-1] for f in freqs_list)
if f_stop <= f_start:
raise ValueError("No overlapping frequency range among networks")
# 选择基准网格: 使用第一个网络在重叠区间内的频点, 若其它网络缺该点则插值
base_freqs = networks[0].f
mask = (base_freqs >= f_start) & (base_freqs <= f_stop)
freqs = base_freqs[mask]
# 如果其它网络点数差异较大, 可选: 统一稠密度 (这里只在差异>5%时使用最小长度网格)
for f in freqs_list[1:]:
# 判断差异比例
if abs(len(f) - len(freqs)) / max(len(freqs),1) > 0.2:
# 使用所有网络在重叠区间内最少点数, 构造等间距网格
n_common = min(len(ff[(ff>=f_start)&(ff<=f_stop)]) for ff in freqs_list)
freqs = np.linspace(f_start, f_stop, n_common)
warnings.warn("Frequency grids differ significantly; using uniform linspace for interpolation.")
break
# 对每个网络插值到 freqs (实部/虚部分开线性插值)
aligned_S = [] # List[(Nf, nports, nports)]
for net in networks:
f_src = net.f
# 获取在目标范围内原始数据 (若后面改用插值网格不同于原点, 仍需完整插值)
S_src = net.s # (Nf_src, nports, nports)
nports = net.nports
if not np.array_equal(f_src, freqs):
# 线性插值 (对每个端口对实部与虚部)
S_interp = np.zeros((len(freqs), nports, nports), dtype=complex)
for i in range(nports):
for j in range(nports):
y = S_src[:, i, j]
# numpy.interp 需要单调递增; 为类型检查器显式转为 np.ndarray
y_arr = np.asarray(y)
y_real = np.real(y_arr)
y_imag = np.imag(y_arr)
real_part = np.interp(freqs, f_src, y_real)
imag_part = np.interp(freqs, f_src, y_imag)
S_interp[:, i, j] = real_part + 1j * imag_part
aligned_S.append(S_interp)
else:
aligned_S.append(S_src[mask] if len(S_src)==len(base_freqs) and mask.sum()!=len(base_freqs) else S_src)
self.frequencies = freqs
nports = networks[0].nports
Ns = len(networks)
# 参数正交基
self.basis = OrthonormalParamBasis(np.array(W_list), np.array(L_list), self.cfg.param_total_degree)
Phi = self.basis.phi_matrix() # (Ns, Q)
Qn = Phi.shape[1]
# (可选) 特征频率子采样
if self.cfg.max_freq_points is not None and len(freqs) > self.cfg.max_freq_points:
sel_idx = self._select_characteristic_freqs(freqs, aligned_S, self.cfg.max_freq_points,
method=self.cfg.freq_selection_method,
threshold=self.cfg.curvature_threshold)
freqs = freqs[sel_idx]
aligned_S = [S[sel_idx, :, :] for S in aligned_S]
if self.cfg.verbose:
warnings.warn(f"Frequency reduced to {len(freqs)} points (method={self.cfg.freq_selection_method}).")
# 初始化极点
self.poles = self._init_global_poles(freqs)
p_vec = 1j * 2 * np.pi * freqs
# 首次求解残值
residues_samples, d_samples, e_samples = self._solve_residues_given_poles(aligned_S, p_vec)
# 极点迭代 (简化共享极点 VF)
if self.cfg.vf_iterations > 0:
for it in range(self.cfg.vf_iterations):
new_poles = self._vf_iterate_poles(aligned_S, p_vec, residues_samples, d_samples, e_samples)
# 反射不稳定极点
new_poles = np.array([p if p.real < 0 else complex(-p.real, p.imag) for p in new_poles])
# 去重: 近似重复 (距离 < 1e-3 * |p|) 过滤
filtered = []
for p in new_poles:
if all(abs(p - q) > 1e-3*max(1.0, abs(p)) for q in filtered):
filtered.append(p)
if self.cfg.verbose:
print(f"[VF-Iter {it+1}] poles -> {len(filtered)} kept")
self.poles = np.array(filtered, dtype=complex)
p_vec = 1j * 2 * np.pi * freqs
residues_samples, d_samples, e_samples = self._solve_residues_given_poles(aligned_S, p_vec)
# 在参数基上再拟合: 由于 Phi 正交, 系数 = Phi^H * values
PhiH = Phi.conj().T # (Q, Ns)
K = self.poles.shape[0]
self.residue_coeffs = np.zeros((nports, nports, K, Qn), dtype=complex)
self.d_coeffs = np.zeros((nports, nports, Qn), dtype=complex)
self.e_coeffs = np.zeros((nports, nports, Qn), dtype=complex)
for i in range(nports):
for j in range(nports):
for k in range(K):
vk = residues_samples[i, j, k, :] # (Ns,)
self.residue_coeffs[i, j, k, :] = PhiH @ vk
self.d_coeffs[i, j, :] = PhiH @ d_samples[i, j, :]
self.e_coeffs[i, j, :] = PhiH @ e_samples[i, j, :]
# 简单误差评估 (训练点重建 RMS)
F_base = self._build_frequency_matrix(p_vec, self.poles)
train_rms = self._compute_training_rms(residues_samples, d_samples, e_samples, F_base, aligned_S)
self.meta['train_rms'] = train_rms
self.meta['nports'] = nports
self.meta['Ns'] = Ns
self.meta['Q'] = Qn
return self
def _compute_training_rms(self, residues_samples, d_samples, e_samples, F_base, original_S_list):
"""计算每个样本的平均端口对 RMS 误差。"""
nports = residues_samples.shape[0]
K = residues_samples.shape[2]
Ns = residues_samples.shape[3]
Nf = F_base.shape[0]
rms = []
for s in range(Ns):
err_sq_sum = 0.0
count = 0
S_ref = original_S_list[s]
for i in range(nports):
for j in range(nports):
x = np.concatenate([
residues_samples[i, j, :, s],
[d_samples[i, j, s], e_samples[i, j, s]]
]) # (K+2,)
y_hat = F_base @ x # (Nf,)
y_ref = S_ref[:, i, j]
err = y_ref - y_hat
err_sq_sum += np.mean(np.abs(err)**2)
count += 1
rms.append(np.sqrt(err_sq_sum / max(count,1)))
return rms
def evaluate(self, W: float, L: float, freqs: np.ndarray | None = None) -> np.ndarray:
"""返回插值后的 S 参数 (Nf, nports, nports)。"""
assert self.frequencies is not None and self.poles is not None
assert self.basis is not None
assert self.residue_coeffs is not None and self.d_coeffs is not None and self.e_coeffs is not None, "Model not fitted"
if freqs is None:
freqs = self.frequencies
# 若请求频率网格不同, 需要重建频率矩阵
p_vec = 1j * 2 * np.pi * freqs
K = len(self.poles)
nports = self.residue_coeffs.shape[0]
phi = self.basis.eval(W, L) # (Q,)
# 预分配
S_eval = np.zeros((len(freqs), nports, nports), dtype=complex)
denom_cache = np.zeros((len(freqs), K), dtype=complex)
for k, a_k in enumerate(self.poles):
denom_cache[:, k] = 1.0 / (p_vec - a_k)
for i in range(nports):
for j in range(nports):
# 恢复参数依赖的残值/常数/斜率
r_k = (self.residue_coeffs[i, j, :, :] @ phi) # (K,)
d = self.d_coeffs[i, j, :] @ phi
e = self.e_coeffs[i, j, :] @ phi
Hf = denom_cache @ r_k + d + p_vec * e # (Nf,)
S_eval[:, i, j] = Hf
return S_eval
def export_s2p(self, W: float, L: float, filepath: str, freqs: np.ndarray | None = None, z0: float | complex = 50) -> str:
"""在给定几何参数 (W,L) 下计算 S 并写入 Touchstone (.sNp) 文件。
参数:
W, L: 几何参数
filepath: 目标文件完整路径, 可包含或不包含 .s2p/.sNp 后缀
freqs: 可选自定义频率数组 (需在训练频率范围内); 默认使用训练频率
z0: 端口参考阻抗 (标量或与端口数相同长度可扩展)
返回:
实际写入的文件路径
"""
assert self.frequencies is not None, "Model not fitted"
S_eval = self.evaluate(W, L, freqs)
if freqs is None:
freqs = self.frequencies
nports = S_eval.shape[1]
freqs_arr = np.asarray(freqs)
# 构建 Network 对象
ntw = rf.Network(f=freqs_arr, s=S_eval, z0=z0)
# 解析输出路径
import os
base_dir = os.path.dirname(filepath) or '.'
os.makedirs(base_dir, exist_ok=True)
base_name = os.path.basename(filepath)
# 去掉可能已有的扩展名, 由 skrf 自动加 .sNp
if '.' in base_name:
base_name = '.'.join(base_name.split('.')[:-1]) or base_name
# 写文件
ntw.write_touchstone(base_name, dir=base_dir)
# 构造最终文件名 (.sNp)
final_path = os.path.join(base_dir, f"{base_name}.s{nports}p")
return final_path
def to_dict(self) -> Dict[str, Any]:
return {
'config': self.cfg.__dict__,
'frequencies': self.frequencies.tolist() if self.frequencies is not None else None,
'poles': self.poles.tolist() if self.poles is not None else None,
'basis': {
'W_mean': getattr(self.basis, 'W_mean', None),
'W_std': getattr(self.basis, 'W_std', None),
'L_mean': getattr(self.basis, 'L_mean', None),
'L_std': getattr(self.basis, 'L_std', None),
'exps': getattr(self.basis, 'exps', None),
'R': (lambda _R: _R.tolist() if _R is not None else None)(getattr(self.basis, 'R', None)),
},
'residue_coeffs': self.residue_coeffs.tolist() if self.residue_coeffs is not None else None,
'd_coeffs': self.d_coeffs.tolist() if self.d_coeffs is not None else None,
'e_coeffs': self.e_coeffs.tolist() if self.e_coeffs is not None else None,
'meta': self.meta,
}
@staticmethod
def from_dict(data: Dict[str, Any]) -> 'ParametricVectorFitting':
cfg = ParametricVFConfig(**data['config'])
obj = ParametricVectorFitting(cfg)
obj.frequencies = np.array(data['frequencies']) if data['frequencies'] is not None else None
obj.poles = np.array(data['poles']) if data['poles'] is not None else None
# 重建 basis (仅用于 eval); 重新构造 R_inv
if data.get('basis') and data['basis']['R'] is not None:
basis_stub = OrthonormalParamBasis(np.array([0.0, 1.0]), np.array([0.0, 1.0]), 1) # 占位
basis_stub.W_mean = data['basis']['W_mean']
basis_stub.W_std = data['basis']['W_std']
basis_stub.L_mean = data['basis']['L_mean']
basis_stub.L_std = data['basis']['L_std']
basis_stub.exps = [tuple(e) for e in data['basis']['exps']]
R = np.array(data['basis']['R'])
basis_stub.R = R
basis_stub.R_inv = np.linalg.inv(R)
# Q 不需要 (仅用于训练点), 设为 None
basis_stub.Q = None # type: ignore
obj.basis = basis_stub
if data.get('residue_coeffs') is not None:
obj.residue_coeffs = np.array(data['residue_coeffs'])
if data.get('d_coeffs') is not None:
obj.d_coeffs = np.array(data['d_coeffs'])
if data.get('e_coeffs') is not None:
obj.e_coeffs = np.array(data['e_coeffs'])
obj.meta = data.get('meta', {})
return obj
# 划分
def split_dataset(dataset: List[ModelBasicDatasetUnit], train_ratio: float = 0.7, shuffle: bool = True, seed: int = 0) -> Tuple[List[ModelBasicDatasetUnit], List[ModelBasicDatasetUnit]]:
"""划分数据集 70% 训练 / 30% 测试 (默认可改)。"""
ds = list(dataset)
if shuffle:
rng = np.random.default_rng(seed)
rng.shuffle(ds)
n_train = int(len(ds) * train_ratio)
return ds[:n_train], ds[n_train:]
def _interp_s_to_freqs(S: np.ndarray, f_src: np.ndarray, f_tgt: np.ndarray) -> np.ndarray:
"""将 S(f_src) 线性插值到 f_tgt (复数分离实虚部)。"""
if np.array_equal(f_src, f_tgt):
return S
nports = S.shape[1]
S_new = np.zeros((len(f_tgt), nports, nports), dtype=complex)
for i in range(nports):
for j in range(nports):
y = S[:, i, j]
real_part = np.interp(f_tgt, f_src, np.real(y))
imag_part = np.interp(f_tgt, f_src, np.imag(y))
S_new[:, i, j] = real_part + 1j * imag_part
return S_new
def evaluate_dataset(model: ParametricVectorFitting,
subset: List[ModelBasicDatasetUnit],
network_loader=Capa.network) -> Dict[str, Any]:
"""对一个子集评估拟合质量,输出每样本与整体统计."""
assert model.frequencies is not None
freqs = model.frequencies
results = []
mag_err_db_all = []
rms_all = []
for unit in subset:
net = network_loader(unit.result_dir, unit.id)
S_ref = _interp_s_to_freqs(net.s, net.f, freqs) # (Nf, nports, nports)
S_pred = model.evaluate(unit.parameters["W"], unit.parameters["L"], freqs)
err = S_pred - S_ref
rms = float(np.sqrt(np.mean(np.abs(err)**2)))
# 幅度 dB 误差
mag_ref_db = 20*np.log10(np.clip(np.abs(S_ref), 1e-15, None))
mag_pred_db = 20*np.log10(np.clip(np.abs(S_pred), 1e-15, None))
mag_err_db = float(np.mean(np.abs(mag_pred_db - mag_ref_db)))
rms_all.append(rms)
mag_err_db_all.append(mag_err_db)
results.append({
'id': unit.id,
'W': unit.parameters['W'],
'L': unit.parameters['L'],
'rms': rms,
'mag_err_db': mag_err_db
})
summary = {
'count': len(subset),
'rms_mean': float(np.mean(rms_all)) if rms_all else None,
'rms_max': float(np.max(rms_all)) if rms_all else None,
'mag_err_db_mean': float(np.mean(mag_err_db_all)) if mag_err_db_all else None,
'mag_err_db_max': float(np.max(mag_err_db_all)) if mag_err_db_all else None,
'details': results
}
return summary
# 简要使用示例 (非执行):
if __name__ == "__main__":
capa = Capa()
capa.sweep()
print("sweep finished")
capa.export('capa_results.json')
capa.clear()
capa.load('capa_results.json')
dataset = capa.results
# 70% 训练 / 30% 测试
train_set, test_set = split_dataset(dataset, train_ratio=0.7, shuffle=True, seed=42)
print(f"Train: {len(train_set)} Test: {len(test_set)}")
cfg = ParametricVFConfig(n_poles=10, param_total_degree=3, vf_iterations=2,
max_freq_points=50)
pvf = ParametricVectorFitting(cfg).fit(train_set)
train_metrics = evaluate_dataset(pvf, train_set)
test_metrics = evaluate_dataset(pvf, test_set)
pvf.meta['train_eval'] = train_metrics
pvf.meta['test_eval'] = test_metrics
def _print_metrics(title: str, m: Dict[str, Any]):
print(f"[{title}] samples={m['count']}"
f" RMS_mean={m['rms_mean']:.4e} RMS_max={m['rms_max']:.4e}"
f" |Δ|dB_mean={m['mag_err_db_mean']:.3f}dB |Δ|dB_max={m['mag_err_db_max']:.3f}dB")
_print_metrics("TRAIN", train_metrics)
_print_metrics("TEST", test_metrics)
# 示例:导出一个测试点的拟合结果为 s2p
if test_set:
sample = test_set[0]
out_path = pvf.export_s2p(sample.parameters["W"], sample.parameters["L"], filepath='outputs/pvf_test_sample')
print("Exported:", out_path)

50
schemas/paramer.py Normal file
View File

@@ -0,0 +1,50 @@
from pydantic import BaseModel, Field
from typing import List,Union,Literal,Optional
class SimulationRequestUnit(BaseModel):
user_id:int = Field(default=0)
template_name:str = Field(default="em_interface_compound")
template_version:str = Field(default="")
cell_name:str = Field(default="capa")
parameters:dict = Field(default={"W":10,"L":10})
settings:dict = Field(default={})
class UuidResponseUnit(BaseModel):
id:int
user_id:Optional[int]
template_name:str
template_version:str
cell_name:str
status:Literal["pending","running","completed","failed"]
parameters:dict
settings:dict
input_hash:str
storage_type: str
result_path:str
started_at:str
completed_at:str
result_json:Optional[dict]
error_message:Optional[str]
failure_count:Optional[int]
last_failed_at:Optional[str]
cpu_usage:Optional[float]
memory_usage:Optional[float]
disk_usage:Optional[float]
gpu_usage:Optional[float]
node_name:Optional[str]
jobs:Optional[List]
results:Optional[List]
created_at:str
updated_at:str
class SimulationResponseUnit(BaseModel):
template_name:str
template_version:str
template_id:int
cell_name:str
cell_id:int
parameters:dict
settings:dict
input_hash:str
status:str
message:str

125
test/lazy_evaulation.py Normal file
View File

@@ -0,0 +1,125 @@
import numpy as np
class PhiBasisIterator:
"""
逐步生成有理正交 (类 Muntz-Laguerre) 基函数 φ_p(s) / (或复对产生两列) 的迭代器。
给定:
s: 标量或数组 (复频率采样点) s = j*2*pi*f
poles: 极点序列 (允许包含复共轭对). 约定:
- 纯实极点按自身顺序出现: a = -alpha (alpha>0)
- 复极点以正虚部在前, 紧跟其共轭: a = -σ + jω, a* = -σ - jω
迭代:
每次 __next__ 返回一个 list:
- 实极点 -> [φ_p(s)]
- 复成对 -> [φ_p^(1)(s), φ_p^(2)(s)]
使用时可把返回列表中函数 append 到总基函数数组中。
说明:
这里实现的公式与用户原始代码意图相同, 但修正了:
1) 原代码 sqrt(2*Re(a)) 在 Re(a)<0 (典型稳定极点) 下产生 NaN, 改为 alpha=-Re(a) >0.
2) 原来在 __next__ 中使用 yield (非法); 改为标准迭代协议返回 list。
3) 复极点的乘积与后续迭代用的累计乘积 product 分开维护。
若需严格匹配论文中“多变量正交化”可再加数值正交 (QR) 步骤。
注意:
本实现假设 poles 已排序; 若不确定, 可预处理把正虚部极点放在其共轭之前。
"""
def __init__(self, s, poles):
self.s = np.asarray(s, dtype=complex) # (Nf,) 或标量
self.poles = list(poles)
self.k = 0 # 当前处理到第 k 个极点(或复对的首元素)
self.N = len(self.poles)
# 累计乘积 Π_{已完成的块} ( (s - a_i*)/(s + a_i) ) (复对时使用 (s - a)(s - a*) / (s + a)(s + a*))
self.product = np.ones_like(self.s, dtype=complex)
def __iter__(self):
return self
def __next__(self):
if self.k >= self.N:
raise StopIteration
a = self.poles[self.k]
# 复对: 需要检查正虚部并且下一个是共轭
if np.iscomplex(a) and np.imag(a) > 0:
if self.k + 1 >= self.N or not np.isclose(self.poles[self.k + 1], np.conj(a)):
raise ValueError(f"极点序列中复极点 {a} 未紧跟其共轭, 请排序.")
a_conj = self.poles[self.k + 1]
sigma = -np.real(a) # >0
alpha = sigma
# (s + a)(s + a*) = (s + a)(s + conj(a))
denom = (self.s + a) * (self.s + a_conj)
# |a| 用于生成两组分子 (参考原代码的构造方式)
r = np.abs(a)
scale = np.sqrt(2 * alpha)
numerator1 = scale * (self.s - r)
numerator2 = scale * (self.s + r)
phi1 = numerator1 / denom * self.product
phi2 = numerator2 / denom * self.product
# 更新累计乘积用于后续阶次:
# 对复对的“整体”传统一致写成 ((s - a)(s - a*) / (s + a)(s + a*))
self.product = self.product * ((self.s - a) * (self.s - a_conj)) / denom
self.k += 2
return [phi1, phi2]
else:
# 实极点 (允许传入 float 或实部为负的 complex(实数))
a_real = np.real(a)
# 稳定极点: a_real < 0, 令 alpha = -a_real > 0
if a_real >= 0:
raise ValueError(f"实极点需要在左半平面 (负实部), 得到 {a_real}")
alpha = -a_real
scale = np.sqrt(2 * alpha)
# Laguerre 风格: (s - alpha)/(s + alpha)
numerator = scale * (self.s - alpha)
denom = (self.s + alpha)
phi = numerator / denom * self.product
# 更新累计乘积
self.product = self.product * (self.s - alpha) / (self.s + alpha)
self.k += 1
return [phi]
# ------------------ 辅助函数: 批量生成全部基函数 ------------------
def generate_phi_basis(s, poles):
"""
返回一个 list, 其中包含依次生成的所有基函数 (按 real → 1 函数, complex pair → 2 函数).
"""
basis = []
it = PhiBasisIterator(s, poles)
for block in it:
basis.extend(block)
return basis
# ------------------ 示例与自测 ------------------
if __name__ == "__main__":
# 示例极点: 1 个实极点 (-1), 一个复对 (-2+0.5j, -2-0.5j), 再一个复对 (-3+1.2j, -3-1.2j)
poles = [-0.005+500j, -0.005-500j, -0.012+1200j, -0.012-1200j]
f = np.linspace(1e9, 1e11, 200) # 频率 (Hz)
s = 1j * 2 * np.pi * f
basis_funcs = generate_phi_basis(s, poles)
print(f"生成基函数数量 = {len(basis_funcs)}") # 实极点 1 →1, 两个复对 →2+2 共 5 个
# 简单数值检查 (避免 NaN/Inf)
for i, bf in enumerate(basis_funcs):
if not np.all(np.isfinite(bf)):
print(f"{i} 个基函数存在非有限值")
else:
# print(f"phi[{i}] max|.|={np.max(np.abs(bf)):.3e}, min|.|={np.min(np.abs(bf)):.3e}")
print(f"phi[{i}] = {bf}")
# 验证是否为正交基
for i, bf in enumerate(basis_funcs):
print(f"phi[{i}]*phi[{i}] = {np.vdot(bf, bf)}") # 自身内积
for j in range(i+1, len(basis_funcs)):
bf2 = basis_funcs[j]
ip = np.vdot(bf, bf2)
print(f"phi[{i}] 与 phi[{j}] 内积 = {ip}")
if np.abs(ip) > 1e-6:
print(f"phi[{i}] 与 phi[{j}] 非正交, 内积={ip}")

55
utils.py Normal file
View File

@@ -0,0 +1,55 @@
import requests
import time
from schemas.paramer import SimulationRequestUnit, SimulationResponseUnit, UuidResponseUnit
import skrf as rf
from typing import Literal
import matplotlib.pyplot as plt
def send_get_request(url):
try:
response = requests.get(url)
response.raise_for_status() # Raise an error for bad responses
return response.json()
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
return None
def get_network(file_path: str) -> rf.Network:
network = rf.Network(file_path)
return network
def get_rms_error(vf: rf.VectorFitting,parameter_type:Literal['s','y','z']):
rms_error = []
for i in range(vf.network.nports):
rms_error_row = []
for j in range(vf.network.nports):
rms_error = vf.get_rms_error(i, j, parameter_type)
rms_error_row.append(rms_error)
rms_error.append(rms_error_row)
return rms_error
def show_rms_error(vf: rf.VectorFitting,parameter_type:Literal['s','y','z'],show_plot:bool=True,save_path:str|None=None):
freqs = vf.network.f
nports = vf.network.nports
fig, ax = plt.subplots(nports, nports)
fig.set_size_inches(6*nports, 4*nports)
for i in range(nports):
for j in range(nports):
vf.plot("mag",0,1,freqs,ax=ax[i][j],parameter=parameter_type)
fig.tight_layout()
if show_plot:
plt.show()
if save_path:
plt.savefig(save_path)
def remove_simulation_with_high_rms_error(simulations:list[rf.VectorFitting],limit:float=0.015,parameter_type:Literal['s','y','z']='s'):
nports = simulations[0].network.nports
index_of_filtered_simulations = []
for res in simulations:
for i in range(nports):
for j in range(nports):
rms_error = res.get_rms_error(i, j, parameter_type)
if rms_error > limit:
index_of_filtered_simulations.append(i*nports+j)
break