c#求slope线性回归斜率
2015-05-31 16:42
579 查看
public class mySlope
{
// public List<double> Values { get; set; }
public double SlopeResult { get; set; }
}
//-------------------------------------------------------------------------------------------------------------------------------
#region 计算slope
/// <summary>
/// Calculates slope()
/// </summary>
/// <param name="input">Input y_signal</param>
/// <param name="period">Number of periods</param>
/// <returns>Object containing operation results</returns>
public static mySlope Slope(IEnumerable<double> input_y, int period)
{ // var returnValues = new List<double>();
List<double> input_x = new List<double>();
for (int i = 1; i <= period; i++)
{
input_x.Add(i);
}
var copyInputValues_x = input_x.ToList();
var copyInputValues_y = input_y.ToList();
List<double> arr_xy=new List<double>();
List<double> arr_xx=new List<double>();
List<double> arr_x = new List<double>();
List<double> arr_y = new List<double>();
arr_x = copyInputValues_x;
for(int j=copyInputValues_y.Count-period;j<copyInputValues_y.Count;j++)
{
//arr_x.Add(copyInputValues_x[j]);
arr_y.Add(copyInputValues_y[j]);
}
double x_arr_dataAv = arr_x.Take(period).Average();
double y_arr_dataAv = arr_y.Take(period).Average();
for(int i=0;i<arr_x.Count;i++)
{
arr_x[i] = arr_x[i] - x_arr_dataAv;
arr_y[i] = arr_y[i] - y_arr_dataAv;
arr_xx.Add( arr_x[i] * arr_x[i]);
arr_xy.Add ( arr_y[i] * arr_x[i]);
}
double sumxx = arr_xx.Sum();
double sumxy = arr_xy.Sum();
var result = new mySlope()
{
SlopeResult = sumxy/sumxx,
// Values = returnValues,
};
return result;
}
#endregion
}
{
// public List<double> Values { get; set; }
public double SlopeResult { get; set; }
}
//-------------------------------------------------------------------------------------------------------------------------------
#region 计算slope
/// <summary>
/// Calculates slope()
/// </summary>
/// <param name="input">Input y_signal</param>
/// <param name="period">Number of periods</param>
/// <returns>Object containing operation results</returns>
public static mySlope Slope(IEnumerable<double> input_y, int period)
{ // var returnValues = new List<double>();
List<double> input_x = new List<double>();
for (int i = 1; i <= period; i++)
{
input_x.Add(i);
}
var copyInputValues_x = input_x.ToList();
var copyInputValues_y = input_y.ToList();
List<double> arr_xy=new List<double>();
List<double> arr_xx=new List<double>();
List<double> arr_x = new List<double>();
List<double> arr_y = new List<double>();
arr_x = copyInputValues_x;
for(int j=copyInputValues_y.Count-period;j<copyInputValues_y.Count;j++)
{
//arr_x.Add(copyInputValues_x[j]);
arr_y.Add(copyInputValues_y[j]);
}
double x_arr_dataAv = arr_x.Take(period).Average();
double y_arr_dataAv = arr_y.Take(period).Average();
for(int i=0;i<arr_x.Count;i++)
{
arr_x[i] = arr_x[i] - x_arr_dataAv;
arr_y[i] = arr_y[i] - y_arr_dataAv;
arr_xx.Add( arr_x[i] * arr_x[i]);
arr_xy.Add ( arr_y[i] * arr_x[i]);
}
double sumxx = arr_xx.Sum();
double sumxy = arr_xy.Sum();
var result = new mySlope()
{
SlopeResult = sumxy/sumxx,
// Values = returnValues,
};
return result;
}
#endregion
}
相关文章推荐
- C#从一个窗体传递参数到另一个窗体的链接
- C#Socket 案例
- C#--web水印+++++验证码
- C# web实现文件下载
- .NET中的范型与集合
- Some practices to write better C#/.NET code(译)
- Illustrated C#2012--第一章节--C#和.NET Framework--.NET之前
- EMA计算的C#实现(c# Exponential Moving Average (EMA) indicator )
- C#实现图像的鼠标裁剪
- C#--web中上传图片与浏览
- 【C#】窗口之间通信
- C# 前台线程与后台线程区别
- 【C# 基础】访问级别
- C#特性
- C# 堆和栈
- C#摇奖程序
- C#进程与线程
- C#进阶 WPF基础一 XAML控件基础、布局
- C# 中XML序列化与反序列化学习笔记
- C# 线程测试cpu