?? danalyzer.cs
字號:
a3 += d.X * d.X;
a4 += d.X * d.X * d.X;
a5 += d.X * d.X * d.X * d.X;
b1 += d.Fx;
b2 += d.Fx * d.X;
b3 += d.Fx * d.X * d.X;
}
a6 = a2 - a1 * a4 / a3;
a7 = a3 - a2 * a4 / a3;
a8 = a3 - a1 * a5 / a3 - a6 * (a4 - a2 * a5 / a3) / a7;
b4 = b2 - b1 * a4 / a3;
b5 = b3 - b1 * a5 / a3 - b4 * (a4 - a2 * a5 / a3) / a7;
//計算結果
x1 = b5 / a8;
x2 = (b4 - a6 * x1) / a7;
x3 = (b1 - a1 * x1 - a2 * x2) / a3;
result.A = x1;
result.B = x2;
result.C = x3;
}
break;
default:
break;
}
return result;
}
#endregion
#region "求面積"
/// <summary>
/// 面積計算
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public double Area(int[] data)
{
//添加面積計算的代碼
}
#endregion
#endregion
#region "受保護的方法"
#region "能譜變換"
/// <summary>
/// 能譜變換
/// </summary>
/// <param name="data"></param>
/// <param name="paras"></param>
protected void Transform(ref int[] data, params int[] paras)
{
if (paras.Length % 2 == 0)
{
throw new Exception("Parameters is not odd.");
}
if (data.Length > paras.Length)
{
int k = (int)((paras.Length - 1) / 2);
_data = new double[data.Length + k * 2];
Array.Copy(data, 0, _data, k, data.Length);
int i;
int j;
double sum = 0;
int div = 0;
//擴展邊界數據
for (j = 0; j < k; j++)
{
_data[j] = data[k - j];
_data[_data.GetUpperBound(0) - j] = data[data.GetUpperBound(0) - (k - j)];
}
//根據參數計算
for (i = 0; i < paras.Length; i++)
{
div += paras[i];
}
for (i = k; i < _data.Length - k; i++)
{
for (j = 0; j < k; j++)
{
sum += paras[j] * _data[i - (k - j)] + paras[paras.GetUpperBound(0) - j] * _data[i + (k - j)];
}
sum += paras[j] * _data[i];
data[i - k] = (int)(sum / div);
sum = 0;
}
}
}
/// <summary>
/// 能譜變換
/// </summary>
/// <param name="data"></param>
/// <param name="paras"></param>
protected void Transform(ref double[] data, double div, params int[] paras)
{
if (paras.Length % 2 == 0)
{
throw new Exception("parameter is not odd.");
}
if (data.Length > paras.Length)
{
int k = (int)((paras.Length - 1) / 2);
_data = new double[data.Length + k * 2];
Array.Copy(data, 0, _data, k, data.Length);
int i;
int j;
double sum = 0;
//擴展邊界數據
for (j = 0; j < k; j++)
{
_data[j] = data[k - j];
_data[_data.GetUpperBound(0) - j] = data[data.GetUpperBound(0) - (k - j)];
}
//根據參數計算
for (i = k; i < _data.Length - k; i++)
{
for (j = 0; j < k; j++)
{
sum += paras[j] * _data[i - (k - j)] + paras[paras.GetUpperBound(0) - j] * _data[i + (k - j)];
}
sum += paras[j] * _data[i];
data[i - k] = sum / div;
sum = 0;
}
}
}
#endregion
#endregion
}
#region "平滑方法枚舉"
/// <summary>
/// 平滑方法
/// </summary>
public enum SmoothType
{
/// <summary>
/// 5點平滑
/// </summary>
points5,
/// <summary>
/// 7點平滑
/// </summary>
points7,
/// <summary>
/// 9點平滑
/// </summary>
points9,
/// <summary>
/// 11點平滑
/// </summary>
points11,
/// <summary>
/// 13點平滑
/// </summary>
points13,
}
#endregion
#region "尋峰方法枚舉"
/// <summary>
/// 尋峰方法
/// </summary>
public enum PeakType
{
/// <summary>
/// 導數法
/// </summary>
derivative,
/// <summary>
/// 協方差法
/// </summary>
covariance,
/// <summary>
/// 匹配濾波器法
/// </summary>
filter,
/// <summary>
/// 線性擬合法
/// </summary>
linearity,
}
#endregion
#region "最小二乘法擬合多項式次數枚舉"
/// <summary>
/// 最小二乘法擬合多項式次數
/// </summary>
public enum MultinomialType
{
/// <summary>
/// 1次
/// </summary>
Linear,
/// <summary>
/// 2次
/// </summary>
Square,
}
#endregion
#region "尋峰結果結構"
/// <summary>
/// 尋峰結果
/// </summary>
public struct PeakResult
{
private double _channel;
/// <summary>
/// 道址
/// </summary>
public double Channel
{
get { return _channel; }
set { _channel = value; }
}
private double _regionstartchannel;
/// <summary>
/// 左邊界
/// </summary>
public double RegionStartChannel
{
get { return _regionstartchannel; }
set { _regionstartchannel = value; }
}
private double _regionendchannel;
/// <summary>
/// 右邊界
/// </summary>
public double RegionEndChannel
{
get { return _regionendchannel; }
set { _regionendchannel = value; }
}
}
#endregion
#region "最小二乘法計算結果結構"
/// <summary>
/// 最小二乘法計算結果
/// </summary>
public struct LeastSquareResult
{
private double _a;
/// <summary>
/// 零次項的系數
/// </summary>
public double A
{
get { return _a; }
set { _a = value; }
}
private double _b;
/// <summary>
/// 一次項的系數
/// </summary>
public double B
{
get { return _b; }
set { _b = value; }
}
private double _c;
/// <summary>
/// 二次項的系數
/// </summary>
public double C
{
get { return _c; }
set { _c = value; }
}
}
#endregion
#region "最小二乘法計算數據結構"
/// <summary>
/// 最小二乘法計算數據
/// </summary>
public struct LeastSquareData
{
private double _x;
public double X
{
get { return _x; }
set { _x = value; }
}
private double _fx;
public double Fx
{
get { return _fx; }
set { _fx = value; }
}
}
#endregion
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -