图表系列一阶导数
Chart Series First Derivative
我正在使用 System.Windows.Forms.DataVisualization.Charting
绘制图表 我已经用一堆 x 和 y 点填充了系列,我也希望能够绘制导数。有谁知道这样做的简单方法?
或者,如果有一种方法可以得到 xy 点集的相应函数,那也会有所帮助。
谢谢。
系列人口:
chart_TitrationData.ChartAreas[0].AxisX.Title = "Volume (mL)";
chart_TitrationData.ChartAreas[0].AxisY.Title = "pH";
chart_TitrationData.Series.Add(_SelectedTitration.TitrationID);
chart_TitrationData.Series[_SelectedTitration.TitrationID].ChartType = SeriesChartType.Spline;
chart_TitrationData.Series[_SelectedTitration.TitrationID].MarkerStyle = MarkerStyle.Circle;
chart_TitrationData.Series[_SelectedTitration.TitrationID].XValueType = ChartValueType.Double;
chart_TitrationData.Series[_SelectedTitration.TitrationID].YValueType = ChartValueType.Double;
chart_TitrationData.Series[_SelectedTitration.TitrationID].IsVisibleInLegend = true;
foreach (var data in _SelectedTitration.TitrationData)
{
chart_TitrationData.Series[_SelectedTitration.TitrationID].Points.AddXY(data.XPoint, data.YPoint);
}
有Statistical Formulas built-in but none for derivatives. Not even in the other function class, the Financial Formulas
所以你得自己计算。
对于给定的Series s0
,一阶导数可以根据差值计算:
for (int i = 1; i < s0.Points.Count; i++)
{
s1.Points.AddXY(s0.Points[i].XValue, (s0.Points[i].YValues[0] -
s0.Points[i-1].YValues[0]) / scale);
}
这个简单的测试..:[=16=]
double scale = 100;
for (int i = 0; i < 1000; i++)
{
s0.Points.AddXY(i, Math.Sin(i / scale));
}
结果如预期..:[=16=]
如果 x 值分布不均匀,您应该通过逐个步骤计算完整差商:
double step = s0.Points[i].XValue - s0.Points[i-1].XValue;
另外:以上内容略有简化。为了获得更高的精度,应该使用 x-step/2 和 x+step/2 作为 x 值和相应的内插 y 值。并省略 s2..
中的第一个和最后一个点
我正在使用 System.Windows.Forms.DataVisualization.Charting
绘制图表 我已经用一堆 x 和 y 点填充了系列,我也希望能够绘制导数。有谁知道这样做的简单方法?
或者,如果有一种方法可以得到 xy 点集的相应函数,那也会有所帮助。
谢谢。
系列人口:
chart_TitrationData.ChartAreas[0].AxisX.Title = "Volume (mL)";
chart_TitrationData.ChartAreas[0].AxisY.Title = "pH";
chart_TitrationData.Series.Add(_SelectedTitration.TitrationID);
chart_TitrationData.Series[_SelectedTitration.TitrationID].ChartType = SeriesChartType.Spline;
chart_TitrationData.Series[_SelectedTitration.TitrationID].MarkerStyle = MarkerStyle.Circle;
chart_TitrationData.Series[_SelectedTitration.TitrationID].XValueType = ChartValueType.Double;
chart_TitrationData.Series[_SelectedTitration.TitrationID].YValueType = ChartValueType.Double;
chart_TitrationData.Series[_SelectedTitration.TitrationID].IsVisibleInLegend = true;
foreach (var data in _SelectedTitration.TitrationData)
{
chart_TitrationData.Series[_SelectedTitration.TitrationID].Points.AddXY(data.XPoint, data.YPoint);
}
有Statistical Formulas built-in but none for derivatives. Not even in the other function class, the Financial Formulas
所以你得自己计算。
对于给定的Series s0
,一阶导数可以根据差值计算:
for (int i = 1; i < s0.Points.Count; i++)
{
s1.Points.AddXY(s0.Points[i].XValue, (s0.Points[i].YValues[0] -
s0.Points[i-1].YValues[0]) / scale);
}
这个简单的测试..:[=16=]
double scale = 100;
for (int i = 0; i < 1000; i++)
{
s0.Points.AddXY(i, Math.Sin(i / scale));
}
结果如预期..:[=16=]
如果 x 值分布不均匀,您应该通过逐个步骤计算完整差商:
double step = s0.Points[i].XValue - s0.Points[i-1].XValue;
另外:以上内容略有简化。为了获得更高的精度,应该使用 x-step/2 和 x+step/2 作为 x 值和相应的内插 y 值。并省略 s2..
中的第一个和最后一个点