📄 multigaussiancurvefitting.java
字号:
/**
* Description: Curve fitting function
*
* @ Author Create/Modi Note
* Xiaofeng Xie Jun 26, 2008
*
* @version 1.0
* @Since MAOS1.0
*
*/
package problem.custom;
import Global.*;
public class MultiGaussianCurveFitting extends AbstractCurveFitting {
private int NG = 2;
//temp
private static final int Neach = 3;
public MultiGaussianCurveFitting() throws Exception {
super(2*Neach);
}
public void initEncoder() throws Exception {
if (NG!=2) initParams(NG*Neach);
super.initEncoder();
setDefaultXRanges();
}
public boolean setParameter(String name, String value) {
if (super.setParameter(name, value)) return true;
else if (name.equalsIgnoreCase("NG")) NG=new Integer(value).intValue();
else return false;
return true;
}
private void setDefaultXRanges() {
double maxY = BasicArray.getMaxValue(responseValues);
double minY = BasicArray.getMinValue(responseValues);
double minX = BasicArray.getMinValue(oneDparamPoints);
double maxX = BasicArray.getMaxValue(oneDparamPoints);
for(int i=0; i<NG; i++) {
setDefaultXAt(i*Neach, minY, maxY);
setDefaultXAt(i*Neach+1, minX, maxX);
setDefaultXAt(i*Neach+2, 0, maxX);
}
}
protected double MultiGuassianFuncValue(double x, double[] VX, int startID, int guassN) {
double realV = 0;
for (int i=0; i<guassN; i++) {
realV+= getGuassianFuncValue(VX[startID+i*Neach], VX[startID+1+i*Neach], VX[startID+2+i*Neach], x);
}
return realV;
}
protected double getGuassianFuncValue(double amplitude, double center, double halfWidth, double x) {
double ev = (x-center)/halfWidth;
return amplitude*Math.exp(-ev*ev);
}
protected double getFuncValue(double x, double[] VX) {
return MultiGuassianFuncValue(x, VX, 0, NG);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -