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;


Share on Hacker News
Share on LinkedIn


← Home


Want to learn more?

Sign up to get a digest of my articles and interesting links via email every month.

* indicates required

Please select all the ways you would like to hear from Krzysztof Kula:

You can unsubscribe at any time by clicking the link in the footer of my emails.

I use Mailchimp as a marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp's privacy practices here.