/// Sin.DiodeVol.java // RM0/1 gr. stud. Tomas Venclovas //Si programa skirta diodo VACH koeficientu nustatymui //naudojamasi "atvirkstine" VACH //Diodo VACH yra aprasoma formule, kurioje yra trys nezinomi koeficientai //Optimizavimas vykdomas pagal //kvadratine reiksme. // Failas konvertuotas is fi.c, skirto diodo VACH //skaiciavimui su C kalba package lt.ktu.gmj.tasks; import lt.ktu.gmj.*; import lt.ktu.gmj.propertySheet.*; class DiodeVolDomain extends Domain { static final String []dimensions={ "fi", "I0", "rb" }; public String[] dimensions () { return dimensions; } DiodeVolDomain () { min[0]=0.1; max[0]=10; min[1]=0.1; max[1]=100; min[2]=1; max[2]=500; defaultPoint.x[0]=1; defaultPoint.x[1]=50; defaultPoint.x[2]=50; } }; public class DiodeVol extends AbstractTask implements TaskWithAnalyzers { private DiodeVolDomain domain=new DiodeVolDomain(); 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[] Vbe, y, Ic, value; Vbe = new double[4]; y = new double[4]; Ic = new double[4]; value = new double[4]; Vbe[0] = 0.62; Vbe[1] = 0.7; Vbe[2] = 0.8; Vbe[3] = 0.91; Ic[0]=0.0005; Ic[1]=0.008; Ic[2]=0.05; Ic[3]=0.2; for(i=0;i<4;i++) {y[i]=0.025*pt.x[0]* Math.log(Ic[i]/pt.x[1])+Ic[i]*pt.x[2];}; norma=0; for(i=0;i<4;i++) {value[i]=(y[i]-Vbe[i])*(y[i]-Vbe[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 }; } };