/// DiodeCurr.java // RM0/1 gr. stud. Andrius Chaziachmetovas //Si programa skirta diodo VACH koeficientu nustatymui //naudojamasi sroves priklausomybe nuo ytampos //Diodo VACH yra aprasoma formule, kurioje yra du nezinomi koeficientai //Optimizavimas vykdomas pagal //absoliutine reiksme. Optimizavimo programa apskaiciuoja //optimalius koeficientus ir juos istacius i VACH formule //gauname optimalia diodo charakteristika ir galime geriau //parinkti reikiama dioda package lt.ktu.gmj.tasks; import lt.ktu.gmj.*; import lt.ktu.gmj.propertySheet.*; class DiodeCurrDomain extends Domain { static final String []dimensions={ "I0f", "rb" }; public String[] dimensions () { return dimensions; } DiodeCurrDomain () { min[0]=0.1; max[0]=100; min[1]=1; max[1]= 200; defaultPoint.x[0]=1; defaultPoint.x[1]=50; } }; public class DiodeCurr extends AbstractTask implements TaskWithAnalyzers { private DiodeCurrDomain domain=new DiodeCurrDomain(); public double multiplier=1; public int function=1; public void customize (PropertyManager manager) { manager.add ( new DoubleProperty("Multiplier", new FieldProvider(this, "multiplier"), 0.1, 1000)); } public Domain domain () { return domain; } public double f (Point pt) { int i; double norma = 0; double[] Uf, y, If, value; Uf = new double[9]; y = new double[9]; If = new double[9]; value = new double[9]; Uf[0] = 0.32; If[0]=0.001; Uf[1] = 0.4; If[1]=0.01; Uf[2] = 0.44; If[2]=0.025; Uf[3] = 0.48; If[3]=0.1; Uf[4] = 0.53; If[4]=0.28; Uf[5] = 0.59; If[5]=1; Uf[6] = 0.7; If[6]=5; Uf[7] = 0.8; If[7]=14; Uf[8] = 1; If[8]=50; for(i=0;i<9;i++) {y[i]=1000*((pt.x[0]*0.000000000001)*(Math.exp((Uf[i]-(If[i]*0.001)*pt.x[1])/0.025)-1));}; norma=0; for(i=0;i<9;i++) {value[i]=Math.abs(y[i]-(If[i])); norma=norma+value[i];} norma = norma*multiplier; return norma; } public Class[] analyzers () throws ClassNotFoundException { Class spectrumClass=Class.forName("lt.ktu.gmj.analysis.Spectrum"); return new Class[]{ spectrumClass }; } };