-2
Обычный Linest легко, но я не знаю, как «b устанавливается равным 0, а значения m настраиваются так, чтобы они соответствовали y = mx».Как рассчитать LINEST в C# с нулевым перехватом?
static class Program
{
static void Main(string[] args)
{
var yValues = new double[] { 1, 9, 5, 7 };
var xValues = new double[] { 0, 4, 2, 3 };
var noConst = Linest(yValues, xValues);
Console.WriteLine("m = {0}, b = {1}", noConst.Slope, noConst.Intercept);
}
public static LineSpec Linest(IList<double> yValues, IList<double> xValues)
{
var yAvg = yValues.Sum()/yValues.Count;
var xAvg = xValues.Sum()/xValues.Count;
double upperSum = 0;
double lowerSum = 0;
for (var i = 0; i < yValues.Count; i++)
{
upperSum += (xValues[i] - xAvg) * (yValues[i] - yAvg);
lowerSum += (xValues[i] - xAvg) * (xValues[i] - xAvg);
}
var m = upperSum/lowerSum;
var b = yAvg - m * xAvg;
return new LineSpec() { Slope = m, Intercept = b };
}
}
struct LineSpec
{
public double Slope { get; set; }
public double Intercept { get; set; }
}
Я не понимаю, о чем вы просите. Вы не знаете, как вычислить LINEST с нулевым перехватом? Или у вас есть конкретная проблема с внедрением метода, который вы используете на C#? Если первый, ваш вопрос лучше подготовлен в математике SE. Если последний, вы должны предоставить подробную информацию о своей реализации, желательно с кодом, и указать, где у вас проблемы. – iheanyi