多项式拟合之Math.NET Numerics
**多项式拟合
今日新认识的工业编程思想之传感器测温;热敏电阻测温如何计算通过温度计算阻值的方式:多项式拟合,通常C#中使用Math.NET Numerics
Math.NET Numerics 旨在为数值计算提供方法和算法 在科学、工程和日常使用中。涵盖的主题包括特殊功能、 线性代数, 概率模型, 随机数, 插值, 积分, 回归、优化问题等等。
Math.NET Numerics 是 Math.NET 计划的一部分,是 dnAnalytics 与 Math.NET Iridium 合并并取代两者的结果。 在 MIT 许可证下免费提供。 它面向 Microsoft .NET 5.0、.NET 4.6.1 和更高版本以及 .NET Standard 2.0 和更高。除了纯托管的实现之外,它还支持 本机硬件优化。有关完整详细信息,请参阅 Platform Support 。
doub![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2dbd9585acd04e71bc6d1c224c8a9e2a.png)
le[] temperatures = { -70, -60, -50, -40, -30, -20,
-10, 0, 10, 20, 30, 40,
50, 60, 70, 80, 90, 100,
110, 120, 130, 140, 150, 200,
250, 300 };
double[] resistances = { 68.27, 71.19, 74.24, 77.39, 80.56, 83.77,
87.04, 90.38,93.80, 97.31, 100.91, 104.60,
108.39, 112.28, 116.27, 120.36, 124.55, 128.85,
133.26,137.78, 142.40, 147.11, 151.91, 177.95,
208.00, 242.70 };
// 将数据转为 Math.NET 的向量
//using MathNet.Numerics;
//using MathNet.Numerics.LinearAlgebra;
var x = Vector<double>.Build.DenseOfArray(temperatures);
var y = Vector<double>.Build.DenseOfArray(resistances);
// 使用最小二乘法拟合一个多项式模型
var polyFit = Fit.Polynomial(x.ToArray(), y.ToArray(), 3); // 3次多项式拟合
// 显示拟合的多项式系数
Console.WriteLine("Polynomial fit coefficients:");
for (int i = 0; i < polyFit.Length; i++)
{
Console.WriteLine($"a{i}: {polyFit[i]}");
}
// 预测目标温度的电阻
double targetTemperature = 25; // 目标温度
double predictedResistance = 0;
for (int i = 0; i < polyFit.Length; i++)
{
predictedResistance += polyFit[i] * Math.Pow(targetTemperature, i);
}
Console.WriteLine($"The estimated resistance at {targetTemperature}°C is: {predictedResistance} Ohms");