Rozwiązywanie układu równań metodą Gaussa
Główna klasa aplikacji zawierająca przyciski, tabelę itd. oraz główne metody przez klasę wykonywane - odpowiedź na naciśniećie odpowiednich przysisków aplikacji. "Zatwierdź" powoduje stworzenie tablicy o podaych wymiarach, a oblicz powoduje( w przypadku poprawnego wprowadzenie współczynników równania) obliczenie wartości niewiadomych x1, x2, itd.
KOD:
/*
* JedendesktopView.java
*/
/**
* The application's main frame.
*/
public class JedendesktopView extends FrameView {
public JedendesktopView(SingleFrameApplication app) {
super(app);
initComponents();
// status bar initialization - message timeout, idle icon and busy a nimation, etc
/// to mniej ważne;-)
///i ważniejsze:
@Action
public void ZmieńWielkośćTablicy() {
wielkosc = jSpinner1.getValue().hashCode();
jTable1 = new javax.swing.JTable();
Strin/* tytuly = new Strin/*wielkosc + /*;
for (int i = 0; i < wielkosc; i++) {
tytul/*/* = Integer.toString(1 + i);
}
tytul/*wielkos/* = "Y";
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Objec/*wielkos/*wielkosc + /*, tytuly) {
//
Clas/* types = new Clas/*{
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Double.class,
java.lang.Double.class
};
public Class getColumnClass(int columnIndex) {
return type/*columnInde/*;
}
});
//jTable1.
jTable1.setCellSelectionEnabled(true);
jTable1.setName("jTableWspółczynniki"); // NOI18N
jScrollPane1.setViewportView(jTable1);
mainPanel.validate();
mainPanel.repaint();
}
@Action
public void ObliczRownania() {
//liczba kolumn i wierszy
int liczbakolumn = jTable1.getColumnCount();
int liczbawierszy = jTable1.getRowCount();
//jTextArea1.
/*jTextArea1.append(\n\n\nliczba rownań: ");
jTextArea1.append(Integer.toString(liczbawierszy));
jTextArea1.append(".\nLiczba zmiennych: ");
jTextArea1.append(Integer.toString(liczbakolumn-1));
jTextArea1.append(" + 1 kolumna wyników\n");
jTextArea1.append("\n");*/
//tablica tymczasowa
Double[][] A = new Double[wielkosc][(wielkosc + 1)];
//wczytywanie danych z komponentu do tablicy
for (int i = 0; i < liczbawierszy; i++) {
for (int j = 0; j < liczbakolumn; j++) {
A[i][j] = Double.valueOf(jTable1.getModel().getValueAt(i, j).toString());
//zapis wczytanych danych na log
//jTextArea1.append("A[" + Integer.toString(i) + "][" + Integer.toString(j) + "]=");
//jTextArea1.append(Double.toString(A[i][j]) + ", ");
}
//jTextArea1.append("\n");
}
//jTable1.getModel().getValueAt(liczbawierszy, liczbakolumn);
//działania na tablicy - mnożenie wartości
int k = 0;//zapisuje indeks kolumny
//pętla przechodzi przez wiersze od zerowego do przedostatniego
for (int i = 0; i < liczbawierszy - 1; i++) {
//dla kolejnego wiersza (1+i) - aż do ostatniego wiersza
for (int j = 1 + i; j < liczbawierszy; j++) {
//oblicza dzielnik - przez niego będe dzielił kolejne równanie
//elementy w tej samej kolumnie, element o wyższym o 1 indeksie dziele
//o element o niższym indeksie
double dzielnik = A[j][k] / A[i][k];
//zapisuje wartość dzielnika do logów
//jTextArea1.append("dzilenik: "+ Double.toString(dzielnik)+"\n");
//począwszy od numeru kolumny incrementowanego w głównej pętli
//przechodzi przez elementy wiersza
for (int l = k; l < liczbakolumn; l++) {
//zapisuje dotychczasową wartość elementu do logów
//jTextArea1.append("["+Double.toString(A[j][l])+"]");
//obliczanie wartości
A[j][l] = A[i][l] * dzielnik - A[j][l];
//zapisywanie nowej wartości do zmiennej
//jTextArea1.append("=>["+Double.toString(A[j][l])+"]");
}
//jTextArea1.append("\n");
}
//zwiększam numer kolumny
k++;
}
//wyświetlenie po operacjach!
for (int i = 0; i < liczbawierszy; i++) {
for (int j = 0; j < liczbakolumn; j++) {
jTextArea1.append("\nPo etapie obliczeń:");
//zapis wczytanych danych na log
jTextArea1.append("A[" + Integer.toString(i) + "][" + Integer.toString(j) + "]=");
jTextArea1.append(Double.toString(A[i][j]) + ", ");
}
jTextArea1.append("\n");
}
//obliczanie wartości x1 x2...itd
int liczbaSzukanych = -1 + liczbawierszy;
//zmienna przechowująca x'y - jest ich tyle co wierszy
Double[] X = new Double[1 + liczbaSzukanych];
//int numer wskazuje numer obliczanego x'a
//pętla dla każdego elementu tablicy x oblicza jego wartość
for (int numer = liczbaSzukanych; numer >= 0; numer--) {
//służy do sumowania wartości licznika
double suma = A[numer][1 + liczbaSzukanych];
jTextArea1.append("suma y=" + Double.toString(suma) + "\n");
//obliczenie licznika
int j = numer;
j++;
for (int i = numer; i < liczbaSzukanych; i++) {
/*jTextArea1.append("i="+Integer.toString(i)+", ");
jTextArea1.append("numer="+Integer.toString(numer)+", ");
jTextArea1.append("j="+Integer.toString(j)+" => ");
jTextArea1.append("x[j]="+Double.toString(X[j])+"\t");
jTextArea1.append("A[numer][i]="+Double.toString(A[numer][i])+"\n");*/
suma = suma - (A[numer][j] \* X[j]);
//jTextArea1.append("suma po mnożeniu="+Double.toString(suma)+"\n");
j++;
}
//jTextArea1.append("A[num][num]="+Double.toString(A[numer][numer])+"\n ");
X[numer] = suma / A[numer][numer];
jTextArea1.append("\nWYNIKI:\n");
jTextArea1.append("numer=" + Integer.toString(numer) + ", ");
jTextArea1.append("x[" + Integer.toString(numer) + "]=" + Double.toString(X[numer]) + "\n");
}
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSpinner jSpinner1;
private javax.swing.JTable jTable1;
private javax.swing.JTable jTable2;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
private javax.swing.JTable jTableK;
int wielkosc;
Want to learn more?
Sign up to get a digest of my articles and interesting links via email every month.