StatisticFormula 类计算统计公式。
二、DataFormula.FinancialFormula 方法
运行时,执行数据操作。此类是通过chart中DataManipulator属性对外公开的。
在C#中的继承关系如下:
System.Object
System.Web.UI.DataVisualization.Charting.DataFormula
System.Web.UI.DataVisualization.Charting.DataManipulator
《命名空间:System.Web.UI.DataVisualization.Charting》
《程序集:System.Web.DataVisualization(在 System.Web.DataVisualization.dll 中)》
在DataManipulator属性中囊括了很多数学计算方法(大多都是针对图表的数据序列展开的)以下是这样一个列子:
double result = Chart1.DataManipulator.Statistics.Mean("Series1");平均值函数
double result = Chart1.DataManipulator.Statistics.Median("Series1");中值函数
StatisticFormula 类计算统计公式。
二、DataFormula.FinancialFormula 方法
使用指定的参数从公式模块调用方法。
重载此成员。有关此成员的完整信息(包括语法、用法和示例),请单击重载列表中的相应名称。
在这里特别讲到的是预测函数功能的实现情况。
预测公式尝试根据历史数据找出拟合度最佳的回归函数,然后根据最拟合的函数预测最可能的未来数据值。
Chart.DataManipulator.FinancialFormula(
FinancialFormula.Forecasting,
"RegressionType,Period,ApproxError,ForecastError",
"Historical",
"Forecast,UpperError,LowerError")
三 预测函数的语法分析说明
此公式采用四个可选参数。
RegressionType
输入值:
此公式采用一个输入 Y 值。
Historical:用于预测的历史数据。
输出值:
此公式输出三个 Y 值。
Forecast:预测测值。
UpperError:上限误差。
1
2 |
下面的示例以 Series1 (Series1:Y) 作为输入,在 Series2 上输出预测值 (Series2:Y),在 Series3 上输出误差范围(Series3:Y、Series3:Y2)。该示例采用二次多元回归,预测期间为 40 天。 Chart1.DataManipulator.FinancialFormula (FinancialFormula.Forecasting, "2,40,true,true" , "Series1:Y" , "Series2:Y,Series3:Y,Series3:Y2" ); |
在编程的过程中,注意原始历史数据的输入,要求X轴的间隔是一定的,否则影响数据的回归分析
四:以下是自己编写的线性回归预测方法的一个公用类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 |
using
System.Drawing; using
System.Windows.Forms.DataVisualization.Charting; using
System; namespace
WindowsFormsApplication8 { class
RegressionModelClass { #region 字段 double [] sourceData_X = new
double [4]; // 样本数据 X 轴坐标值 double [] sourceData_Y = new
double [4]; // 样本数据 Y 轴坐标值 double [] predictData_Y = new
double [8]; // 预测的未来数据的 Y 轴坐标值 int
n = 4; // 样本数据的个数 // Chart System.Windows.Forms.DataVisualization.Charting.Chart chart_temp = new
System.Windows.Forms.DataVisualization.Charting.Chart(); #endregion /// <summary> /// 构造函数 /// </summary> public
RegressionModelClass( double [] data_x, double [] data_y) { for
( int
i = 0; i < n;i++) { sourceData_X[i] = data_x[i]; sourceData_Y[i] = data_y[i]; } InitialChart(chart_temp, sourceData_X, sourceData_Y); } // 初始化 Chart 控件 private
void InitialChart(System.Windows.Forms.DataVisualization.Charting.Chart chart, double [] data_x, double [] data_y) { #region 1. Title 设置 Title title = new
Title(); //* 实例化 title.Text = "信息预测" ; //** 关联 chart.Titles.Add(title); //* 当使用这种重载方式时,可以将属性传递 #endregion #region 2. ChartArea 设置 ChartArea chartarea1 = new
ChartArea(); //* 实例化 chartarea1.Name = "chartarea1" ; //* ChartArea 的唯一名称 // 关联 chart.ChartAreas.Add(chartarea1); //重要//使用这种重载方法 #endregion #region 3. 坐标轴设置 #region 3.1 X轴 Axis axis_X = new
Axis(); axis_X.IntervalType = DateTimeIntervalType.Days; axis_X.Title = "时 间" ; //* 轴的标题 // ** 关联 chart.ChartAreas[0].AxisX = axis_X; chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.True; #endregion #region 3.2.1 深度 -- Y 轴 Axis axisY_depth = new
Axis(); axisY_depth.Title = "深度" ; axisY_depth.LineColor = Color.Black; axisY_depth.ArrowStyle = AxisArrowStyle.None; axisY_depth.TextOrientation = TextOrientation.Stacked; axisY_depth.TitleFont = new
Font( "微软雅黑" , 14F, FontStyle.Bold); axisY_depth.TitleForeColor = Color.Black; axisY_depth.TitleAlignment = StringAlignment.Far; axisY_depth.IsLabelAutoFit = false ; axisY_depth.IntervalType = DateTimeIntervalType.Number; axisY_depth.IsStartedFromZero = false ; axisY_depth.Minimum = 0; axisY_depth.Maximum = 10; axisY_depth.IntervalAutoMode = IntervalAutoMode.FixedCount; axisY_depth.InterlacedColor = Color.Red; // ** 关联 chart.ChartAreas[0].AxisY = axisY_depth; chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.True; #endregion #endregion #region 4. Series 设置 Series series = new
Series(); series.Name = "样本数据曲线" ; series.ChartType = SeriesChartType.Line; series.XAxisType = AxisType.Primary; series.YAxisType = AxisType.Primary; // important series.XValueType = ChartValueType.DateTime; series.YValueType = ChartValueType.Double; series.Enabled = true ; //关联 series.ChartArea = chart.ChartAreas[0].Name; chart.Series.Clear(); chart.Series.Add(series); // 注意要使用这个重载方法,不应该使用 Add(string)重载方法 #endregion #region 5. Points 设置 // 清除所有数据点 chart.Series[0].Points.Clear(); // 添加数据点 int
m = data_x.Length; for
( int
i = 0; i < m; i++) { chart.Series[0].Points.AddXY(data_x[i], data_y[i]); } #endregion } /// <summary> /// 得到基于回归分析预测的数据 /// </summary> /// public
double [] GetPredictData() { Series trendSeries = new
Series(); trendSeries.Name = "trend" ; trendSeries.ChartType = SeriesChartType.Line; // 关联 trendSeries.ChartArea = chart_temp.ChartAreas[0].Name; chart_temp.Series.Add(trendSeries); string
typeRegression = "2" ; // The number of days for Forecasting (备注:该数字对应的单位与X轴的数据间隔单位有关,并不一定是“天”) string
forecasting = "4" ; string
error = "false" ; string
forecastingError = "false" ; string
parameters = typeRegression + ‘,‘
+ forecasting + ‘,‘
+ error + ‘,‘
+ forecastingError; chart_temp.DataManipulator.FinancialFormula(FinancialFormula.Forecasting, parameters, chart_temp.Series[0], chart_temp.Series[ "trend" ]); for
( int
i = 0; i < 8; i++) // 共4个预测值 { predictData_Y[i] = Math.Round(chart_temp.Series[ "trend" ].Points[i].YValues[0], 5); // chart.Series["trend"]共8个数据点 } return
predictData_Y; } } } |
C# chart.DataManipulator.FinancialFormula()公式的使用 线性回归预测方法,布布扣,bubuko.com
C# chart.DataManipulator.FinancialFormula()公式的使用 线性回归预测方法
原文:http://www.cnblogs.com/liuxiaowei0543/p/3712522.html