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

📄 sor.java

📁 PEPA模型性能分析工具
💻 JAVA
字号:
package matrix;

import gui.PepaConsole;

public class Sor {

	private int[] ija;
	private double[] sa;
	
	public Sor(int[] i,double[] s)
	{
		ija=i;
		sa=s;
	}
	public void solve(int matrixDim, double[] b, double[] x, double omega,
			  double tol, int itmax, int iteration, int norm, double err)
	{

		  double[] prevX = new double [matrixDim + 1];
		  double[] difference = new double [matrixDim + 1];
		  double sum = 0.0;

		  for (int i = 1;i < matrixDim + 1; i++) 
		  {
		    prevX[i] =  (double) (1.0 / (matrixDim));
		    x[i] = 1.0/(matrixDim);
		  }
		  do {
			    sum = 0; 
			    for (int i=1;i<= matrixDim;i++) 
			    { 
			      int initial = (ija[i]);
			      int last = (ija[i+1] -1);

			      x[i] = 0.0;

			      for (int j=initial;j <= last;j++) 
			      {
			        if (ija[j] < i)
			          x[i] -= sa[j] * x[ija[j]];
			         else 
			          x[i] -= sa[j] * prevX[ija[j]];
			        
			      }
			      x[i] = (1.0 - omega)*prevX[i] + ((omega*(x[i] + b[i])) / sa[i]);
			    }

			    iteration++;

			    VectorSub(x, prevX, difference);

			    if (norm == 2)
			      err = Norm(difference);
			    else
			      err = infNorm(difference);

			  }
			  while ((err > tol) && (iteration < itmax));
		  
		  PepaConsole.addArgument("--迭代次数:"+iteration+"\n");
	        if(iteration>=itmax)
	        	PepaConsole.addArgument("--已经迭代到最大次数,得到的结果将不够精确,请增加迭代次数!\n");
	        PepaConsole.addArgument("--误差:"+err+"\n");
	}
	private static double Norm (double vector[]) 
	{
		  double sum = 0.0;
		  int i;
		  for (i = 1; i < vector.length; i++)
		    sum += (vector[i] * vector[i]);
		  return java.lang.Math.sqrt(sum);

	} 
	private static double infNorm (double vector[]) 
	{
		  double sum = 0.0;
		  double tmp = 0.0;
		  int i;
		  for (i = 1; i < vector.length; i++) 
		  {
		   tmp = java.lang.Math.abs(vector[i]);
		   if (sum < tmp);
		    	sum = tmp;
		  }
		  return sum;
	}
	private static void VectorSub (double X[], double Y[], double Diff[]) 
	{
		  int i=1;
		  while ((X.length == Y.length) && (i < Y.length)) 
		  {
		    Diff[i] = X[i] - Y[i];
		    Y[i] = X[i];
		    i++;
		  }
	}  
}

⌨️ 快捷键说明

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