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 !