【Java开源代码栏目提醒】:以下是网学会员为您推荐的Java开源代码-d9r8a.java,希望本篇文章对您学习有所帮助。
import java.text.*;
public class d9r8a
{
public static void main (String[] args)
{
//program d9r8a
//driver for routine mrqmin
int i, j, npt = 100;
int mfit, ma = 6;
double ochisq, chisq, spread = 0.001;
double x[] = new double[101];
double y[] = new double[101];
double sig[] = new double[101];
double a[] = new double[7];
int lista[] = new int[7];
double covar[] = new double[37];
double alpha[] = new double[37];
double gues[] = new double[7];
a[1] = 5.0; a[2] = 2.0; a[3] = 3.0; a[4] = 2.0; a[5] = 5.0; a[6] = 3.0;
gues[1] = 4.5; gues[2] = 2.2; gues[3] = 2.8;
gues[4] = 2.5; gues[5] = 4.9; gues[6] = 2.8;
int idum = -911;
chisq = 0.0;
d9r8aF g = new d9r8aF();
DecimalFormat form = new DecimalFormat("0.0000");
//first try a sum of two gaussians
for (i = 1; i <= 100; i++)
{
x[i] = 0.1 * i;
y[i] = 0.0;
for (j = 1; j <= 4; j = j + 3)
{
y[i] = y[i] + a[j] * Math.exp(-Math.pow(((x[i] - a[j + 1]) / a[j + 2]), 2));
}
y[i] = y[i] * (1.0 + spread * g.gasdev(idum));
idum = g.gasdev_idum;
sig[i] = spread * y[i];
}
mfit = ma;
for (i = 1; i <= mfit; i++)
{
lista[i] = i;
}
double alamda = -1;
for (i = 1; i <= ma; i++)
{
a[i] = gues[i];
}
g.mrqmin(x, y, sig, npt, a, ma, lista, mfit, covar, alpha, ma, chisq, alamda);
chisq = g.mrqmin_chisq;
alamda = g.mrqmin_alamda;
alamda = g.mrqmin_alamda;
int k = 1;
int itst = 0;
do
{
System.out.print("Iteration #" + k +" Chi-squared: ");
System.out.print(form.format(chisq));
System.out.println(" alamda: " + form.format(alamda));
System.out.println(" a(1) a(2) a(3) a(4) a(5) a(6)");
for (i = 1; i <= ma; i++)
{
System.out.print(form.format(a[i]) + " ");
}
System.out.println();
System.out.println();
k = k + 1;
ochisq = chisq;
g.mrqmin(x, y, sig, npt, a, ma, lista, mfit, covar, alpha, ma, chisq, alamda);
chisq = g.mrqmin_chisq;
alamda = g.mrqmin_alamda;
if (chisq > ochisq)
{
itst = 0;
}
else
{
if (Math.abs(ochisq - chisq) < 0.1)
{
itst = itst + 1;
}
}
}while(itst < 2);
alamda = 0.0;
g.mrqmin(x, y, sig, npt, a, ma, lista, mfit, covar, alpha, ma, chisq, alamda);
chisq = g.mrqmin_chisq;
alamda = g.mrqmin_alamda;
System.out.println("Uncertainties:");
System.out.println();
for (i = 1; i <= ma; i++)
{
System.out.print(form.format(Math.sqrt(covar[(i - 1) * ma + i])) + " ");
}
System.out.println();
System.out.println();
System.out.println("Expected results:");
System.out.println();
System.out.println(" 5.0 2.0 3.0 2.0 5.0 3.0");
System.out.println();
}
}