rozwiązanie układu metodą Gaussa-Seidla

0

Witajcie,
mam problem z implementacją układ równań (N+1)(N+1) o poniższej strukturze.

Za pomocą rozkładu LU w języku niskopoziomowym, bez dodatkowych bibliotek

public class Start
{


	static final int wymiar = 100;

	public static void initializeTabs(int n, double h)
	{
		Start.initializeA(n);
		Start.initializeB(n, h);
		Start.initializeLU(n);

		double []X = new double[n + 1];
	}
	public static void initializeA(int n)
	{
		int N = n + 1;
		double[] A = new double[N];
		for (int i = 0; i < N; i++)
			A[i] = A[N];

		for (int i = 0; i < N; i++)
			for (int j = 0; j < N; j++)
			{
				if (i == 0 || i == n){
					
				double [][] b = new double [i][j];
				b[i][j] = Start.delta(i, j);
				}
				else
				{
					double [][] b = new double [i][j];
					b[i][j] = Start.delta(i, j - 1) - 2 * Start.delta(i, j) + Start.delta(i, j + 1);
				}
			}
	}
	public static void initializeB(int n, double h)
	{
		int N = n + 1;
		double []B = new double[N];
		B[0] = 0;
		B[n] = 1;
		for (int i = 1; i < n; i++)
			B[i] = 2 * (h * h);
	}
	public static void initializeLU(int n)
	{
		int N = n + 1;
		double []LU = new double[N];
		for (int i = 0; i < N; i++)
		{
			LU[i] = LU[N];
			for (int j = 0; j < N; j++)
			{
				double [][]LU_1 = new double[i][j];
				LU_1[i][j] = 0;
			}
		}
	}
	void wypiszUklad(double tab[][], int size, int width)
	{
		System.out.print("\n");
		for (int i = 0; i < size; i++)
		{
			System.out.print("| ");
			for (int j = 0; j < size; j++)
			{
				System.out.printf("%d" +tab[i][j]);
			}
			System.out.printf("%d"+ " |");
			System.out.printf("%d"+ "\n");
		}
	}
	void wypiszWektor(double[] tab, int size, int width)
	{
		System.out.print("\n");
		for (int i = 0; i < size; i++)
		{
			System.out.print("| ");
			System.out.printf("%d"+ tab[i]);
			System.out.printf("%d"+ " |");
			System.out.printf("%d"+ "\n");
		}
	}
	static int delta(int i, int j)
	{
		return (i == j) ? 1 : 0;
	}
	static void rozkladLU(int n)
	{
		int N = n + 1;
		int i;
		int j;
		int k;
		//A -> LU
		for (i = 0; i < N; i++){
			for (j = 0; j < N; j++){
				double [][]LU = new double[i][j];
				double [][]A = new double[i][j];
				LU[i][j] = A[i][j];
			}
			}
		//LU = L + U (ale! diagonalaLU = diagonala U)
		for (k = 0; k < n - 1; k++)
		{
			for (i = k + 1; i < n; i++){
				double [][]LU = new double[i][k];
				LU[i][k] /= LU[k][k];
			}
			for (i = k + 1; i < n; i++)
				for (j = k + 1; j < n; j++){
					double [][]LU = new double[i][j];
					LU[i][j] -= LU[i][k] * LU[k][j];
				}
		}
	}
	static void RozwiazLU(int n )
	{
		int i;
		int j;
		double s;
		double []X = new double [n+1];
		double []B = new double [n+1];
		X[0] = B[0];

		for (i = 1; i < n; i++)
		{
			s = 0;
			for (j = 0; j < i; j++){
				double [][]LU = new double[i][j];
				s += LU[i][j] * X[j];
				X[i] = B[i] - s;
			}
		}
		double [][]LU = new double[n-1][n-1];
		X[n - 1] /= LU[n - 1][n - 1];
		for (i = n - 2; i >= 0; i--)
		{
			s = 0;
			for (j = i + 1; j < n; j++){
				s += LU[i][j] * X[j];
			X[i] = (X[i] - s) / LU[i][i];
			}
		}
	}

	public static void Main(String[] args)
	{
		Start.initializeTabs(wymiar, 0.01);
	//	wypiszUklad(A, wymiar+1, 2);
	//	wypiszWektor(B, 10, 4);
		Start.rozkladLU(wymiar);
		Start.RozwiazLU(wymiar + 1);
	//	wypiszUklad(LU, wymiar+1, 10);
	//	wypiszWektor(B,wymiar + 1, 10);
	//	wypiszWektor(X,wymiar + 1, 10);
		//Start.doPliku(0.01);
		System.out.print("\n");
	}
} 

Miałby ktoś jakiś pomysł jak to naprawić, podczas kompilowania pokazuje się komunikat:

class Start is public, should be declared in a file named Start.java public class Start

HELP !

0

Spróbowałbym hmm......

should be declared in a file named Start.java

nazwac plik Start.java?

0

Po prostu nazwę projektu zmień na nazwę taką jak nazywa się klasa lub nazwę klasy zmień na taka jak nazwałeś projekt.

0
siwy1991 napisał(a)

Za pomocą rozkładu LU w języku niskopoziomowym, bez dodatkowych bibliotek

Wut? Jaki niskopoziomowy tu masz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1