25 lines
756 B
C#
25 lines
756 B
C#
using System;
|
|
|
|
namespace MembranePoreTester.Helpers
|
|
{
|
|
public static class Interpolation
|
|
{
|
|
// 线性插值
|
|
public static double Linear(double[] xs, double[] ys, double x)
|
|
{
|
|
if (xs.Length == 0 || ys.Length == 0 || xs.Length != ys.Length)
|
|
throw new ArgumentException("数组长度不匹配或为空");
|
|
|
|
if (x <= xs[0]) return ys[0];
|
|
if (x >= xs[^1]) return ys[^1];
|
|
|
|
int i = Array.BinarySearch(xs, x);
|
|
if (i >= 0) return ys[i];
|
|
|
|
i = ~i; // 大于 x 的第一个索引
|
|
double x0 = xs[i - 1], x1 = xs[i];
|
|
double y0 = ys[i - 1], y1 = ys[i];
|
|
return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
|
|
}
|
|
}
|
|
} |