⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d9r8a.txt

📁 解具有导数的多元函数的无约束极小值点或具有导数的非线性方程组的近似解
💻 TXT
字号:
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();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -