📄 multiexpcoscurvefitting.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 MultiExpCosCurveFitting extends AbstractCurveFitting {
private int NG = 2;
//temp
private static final int Neach = 4;
public MultiExpCosCurveFitting() 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, 0, 1000);
setDefaultXAt(i*Neach+2, -(maxX-minX)/2, (maxX-minX)/2);
setDefaultXAt(i*Neach+3, -10, 10);
}
}
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], VX[startID+3+i*Neach], x);
}
return realV;
}
// y = sum_(i=1,...,N) a_i*exp[-b_i* (1 + c_i * cos(n_i*x + d_i)) ]
protected double getGuassianFuncValue(double a, double b, double d, double n, double x) {
return a*Math.exp(-b*(1+Math.cos(n*x+d)));
}
protected double getFuncValue(double x, double[] VX) {
return MultiGuassianFuncValue(Math.abs( x), VX, 0, NG);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -