Skip to main content

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.
Program jest dostępny do ściągnięcia na mojej stronie: krzychukula.googlepages.com




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();
String[] tytuly = new String[wielkosc + 1];
for (int i = 0; i < wielkosc; i++) {
tytuly[i] = Integer.toString(1 + i);
}
tytuly[wielkosc] = "Y";

jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object[wielkosc][wielkosc + 1], tytuly) {
//
Class[] types = new 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,
java.lang.Double.class
};

public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}
});

//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;

Comments

Popular posts from this blog

Course Review: The Bitfountain iOS 8 with Swift Immersive

This is second big iOS learning project. For first one read iOS Programming book review. As I only have two of them done I have to compare them somehow.

I am mindful that it took me a really long time to finish it (since last autumn). For a couple of months this year I didn't even have the internet to learn it, so it could not be helped. But last half of the June I've spent watching the videos every day and managed to finish it before any new internet problems.

So how was it?
In my opinion, it's great if you're starting out. There are a lot of basics, and seeing how to do things in XCode just makes your learning much easier than looking at the photos in the book. On the other hand, learning is more shallow and it is much easier to just follow the videos and learn only the basics without bigger picture about iOS SDK. I somehow missed more challenging exercises (even though I don't like to do them ;)

Length:
Course it pretty long but many videos are quite short (1-2…

How to Learn when Life is Short

I haven't really think this through but I have read really interesting articles recently and I just wanted to write for myself later.

Life is Short by Paul Graham

It's just that, learn from people older that you what is most important, and that life actually is short...

Instead of Goals or Resolutions, Try Creating Rules by Leo Babuta

In the time of New Year Resolutions, it's good to read something that is proposing different way of achieving things. Still I see much more value in habits than setting goals. But...

The Easy Way To Learn Hard Stuff by Per Harald Borgen
It's something that I read from time to time and I know it works sometimes for me. The things I learn then are really learned and something Jakub Wasilewski  has told me many times to do. Still it's uncomfortable and for some reason, I have failed to use this method more than once or twice. Writing it here so maybe I can think about it more and figure out how to do that more often.

Towards an understandin…

Hero's Journey in Presentations

Artur Skowroński recommended me: Want a Better Pitch? Watch This. by Andy Raskin and I think it is so great and applicable to all kinds of talks that I want to help it get more popular.
So the plan of presentation is going to follow these steps: Enemy - ProblemWhy now? - call to actionShow how the world will look like without the problemProblemsEvidence that you fixed the problem The image at the top is because it reminds me of Hero's Jurney. It has fewer steps but there is a lot of similarities. Especially #3 made me realize that grand vision of the future is something that I should have used in my talks.  The result at the start of the presentation makes a lot of sense actually. Everyone already knows that I speak about something because I probably fixed it and if you tell about it at the end then it might be hard for some people to see the bigger picture in the solution you're going to present.