public void Derivation(DataTable ddd, ref DataTable result, int K, ref double[, ,] p, double Y)//平滑并求导,tt为真则是对土壤库求导,否则是对样本库求导,K为放大倍数,Y为=0的阈值 { DataTable temp = new DataTable(); Smooth sth = new Smooth(); sth.Plot5(ddd, ref temp); for (int i = 1; i < ddd.Rows.Count; i++) { int TEMP = 0;//计算有多少个极大值点 for (int j = 13; j < temp.Columns.Count - 5; j++) { //计算曲线各个位置上的一阶导数(用差分代替微分) result.Rows[i][j] = K * (Convert.ToDouble(temp.Rows[i][j]) - Convert.ToDouble(temp.Rows[i][j - 1])); if (Math.Abs(Convert.ToDouble(result.Rows[i][j])) < Y && (Convert.ToDouble(temp.Rows[i][j - 5]) < Convert.ToDouble(temp.Rows[i][j])) && (Convert.ToDouble(temp.Rows[i][j + 5]) < Convert.ToDouble(temp.Rows[i][j]))) { p[i, TEMP, 0] = j; p[i, TEMP, 1] = Convert.ToDouble(temp.Rows[i][j]); TEMP++; } } result.Rows[i][7] = 0;//单独给第一个点赋值 } }