# 算法说明

## 1. 分配关系

平衡两相浓度分别记为 `x` 和 `y`，分配系数为：

```text
K_D = y / x
```

选择性是两个溶质分配系数之比。萃取因子采用 `E = K_D V / L`。所有流量和浓度必须使用同一基准。

## 2. 单级液液萃取

恒定 `K` 时，联立 `y = Kx` 和级物料衡算：

```text
L xF + V yS = L x + V y
```

得到：

```text
x = (L xF + V yS) / (L + KV)
```

表格相平衡时，程序在数据范围内求解 `Lx + V y*(x) - inlet = 0`。当前求解器要求该残差在区间端点异号，并使用二分法；这对单调常见相平衡关系稳定，但不处理多根问题。

## 3. 错流多级萃取

每一级使用新的或给定预载浓度的溶剂。前一级萃余相浓度作为后一级进料浓度，逐级调用单级平衡。程序同时累计新转移的溶质量并报告总衡算残差。

## 4. 逆流多级萃取

恒流、恒定 `K` 下，第 `i` 级满足：

```text
L x[i-1] + V y[i+1] = L x[i] + V y[i]
y[i] = K x[i]
```

对 `x[1..N]` 形成三对角线性方程组，用 Thomas 算法求解。`x[0]` 是进料浓度，`y[N+1]` 是入口溶剂浓度。该方法不需要在 `E≈1` 时使用特殊的闭式公式，因此没有相消分支。

## 5. 固液浸取

单级模型把初始附液和洗液完全混合。混合液浓度为总溶质量除以总溶液质量，底流最多保留 `R B` 的溶液，其余作为溢流。

错流洗涤把每一级保留液带入下一级。目标洗液量反算先倍增找到可行上界，再用二分法搜索最小总洗液量。这个设计只适用于“洗液增加会单调降低底流残余量”的当前模型。

## 6. 一维插值

相邻数据点之间采用线性插值。积分按每个线性分段的梯形面积精确累加。反插值要求 `y` 也严格递增；若数据含平台或回折，应由调用者选择物理分支并重新建表。

## 7. 三元相图

三元组成的顺序固定为载体、溶质、溶剂。绘图坐标采用边长为 1 的等边三角形：

```text
carrier = (0, 0)
solvent = (1, 0)
solute = (1/2, sqrt(3)/2)
```

混合点按各组分质量加权。杠杆规则把总组成投影到联络线端点形成的三维线段，投影参数给出第一相分率。程序会检查参数是否落在线段内，并用投影残差检查共线性。

联络线表目前按萃余相溶质分数排序，对两侧端点分别做线性插值。邻近联络线选择只用于数据探索；严谨相分割应使用物系认可的联络线插值方法并检查闭合误差。

## 8. McCabe–Thiele 风格级数

从目标萃余相端开始，已知第 `i` 级的 `x[i]` 和进入该级的 `y[i+1]`：

```text
y[i] = y*(x[i])
x[i-1] = x[i] + V/L × (y[i] - y[i+1])
```

逐级向进料端推进，直到达到 `xF`。若最后一步跨过 `xF`，用该步的浓度跨度计算分数级。该分数级是图解估算，不等同于基于传质效率的实际塔级设计。

## 9. 数值与输入约束

- 所有物理量必须是有限数；流量和容差必须为正。
- 质量分数必须在 `[0,1]` 内。
- 表格横坐标必须严格递增。
- 结果结构包含衡算残差，便于调用者建立更严格的质量阈值。
- 当前计算使用 `Double`，没有自动单位换算。
