C#调用MathNet.Numerics的Polynomial.Evaluate处理数组是否需要循环?
Matlab转C#多项式向量化求值解决方案
内置方法调用(匹配你当前使用的API风格)
你当前使用的数值库(从Fourier.Forward、Vector.ABS、Polynomial.Fit的调用格式判断为MathNet.Numerics)已自带批量求值重载,无需自行实现循环:
- 直接调用
Polynomial.Evaluate(double[] xArray, double[] coefficients),传入你需要计算的完整X数组以及Polynomial.Fit返回的系数数组,方法会直接返回对应长度的Y值数组。 - 如果你使用Vector类型的X变量,可调用
Vector<double>.EvaluatePolynomial(double[] coefficients)扩展方法,直接返回Vector类型的Y结果。
自定义扩展方案(若库版本无内置重载)
如果你的当前依赖版本未提供上述重载,仅需写一次通用扩展方法即可保持无手动循环的调用习惯:
// 多项式批量求值扩展方法 public static class PolyEvaluateExtension { // 支持数组输入 public static double[] EvaluateArray(this Polynomial poly, double[] xInput) { return xInput.Select(x => poly.Evaluate(x)).ToArray(); } // 支持Vector输入 public static Vector<double> EvaluateVector(this Polynomial poly, Vector<double> xInput) { return Vector<double>.Build.Dense(xInput.Count, idx => poly.Evaluate(xInput[idx])); } }
调用方式和你之前的操作逻辑完全一致:
// 数组输入调用 var yArray = poly.EvaluateArray(x.AsArray()); // Vector输入调用 var yVector = poly.EvaluateVector(x);
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

