From 6a5f8113edc764058240061ccb8281d71c3f695d Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Wed, 27 Apr 2011 13:20:17 +0200 Subject: [PATCH] added cramer alg to solve lgs --- versuch07/.cproject | 1175 +++++++++--------- versuch07/.project | 152 +-- versuch07/Debug/makefile | 59 + versuch07/Debug/objects.mk | 8 + versuch07/Debug/sources.mk | 27 + versuch07/Debug/src/subdir.mk | 42 + versuch07/Debug/{Versuch07.exe => versuch07} | Bin 458456 -> 470673 bytes versuch07/src/Cramer.cpp | 19 +- versuch07/src/Cramer.h | 10 +- versuch07/src/Gauss.cpp | 4 +- versuch07/src/LGSLoeser.h | 8 +- versuch07/src/LR.cpp | 43 +- versuch07/src/LR.h | 10 +- versuch07/src/QMatrix.cpp | 115 +- versuch07/src/QMatrix.h | 21 +- versuch07/src/Vektor.cpp | 12 +- versuch07/src/main.cpp | 73 +- 17 files changed, 1039 insertions(+), 739 deletions(-) create mode 100644 versuch07/Debug/makefile create mode 100644 versuch07/Debug/objects.mk create mode 100644 versuch07/Debug/sources.mk create mode 100644 versuch07/Debug/src/subdir.mk rename versuch07/Debug/{Versuch07.exe => versuch07} (68%) diff --git a/versuch07/.cproject b/versuch07/.cproject index 757e491..bad2608 100755 --- a/versuch07/.cproject +++ b/versuch07/.cproject @@ -1,575 +1,600 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/versuch07/.project b/versuch07/.project index 7f96986..2fb4b55 100755 --- a/versuch07/.project +++ b/versuch07/.project @@ -1,70 +1,82 @@ - - - Versuch07 - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - org.eclipse.cdt.make.core.contents - org.eclipse.cdt.make.core.activeConfigSettings - - - org.eclipse.cdt.make.core.buildLocation - ${workspace_loc:/Versuch07/Debug} - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - true - - - org.eclipse.cdt.make.core.enableCleanBuild - true - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.enableAutoBuild - false - - - org.eclipse.cdt.make.core.append_environment - true - - - ?name? - - - - org.eclipse.cdt.make.core.stopOnError - true - - - org.eclipse.cdt.make.core.buildArguments - - - - org.eclipse.cdt.make.core.buildCommand - make - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - - - - - - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.core.cnature - - + + + Versuch07 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/versuch07/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.cnature + + diff --git a/versuch07/Debug/makefile b/versuch07/Debug/makefile new file mode 100644 index 0000000..13e0c4b --- /dev/null +++ b/versuch07/Debug/makefile @@ -0,0 +1,59 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include subdir.mk +-include src/subdir.mk +-include objects.mk + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C++_DEPS)),) +-include $(C++_DEPS) +endif +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +ifneq ($(strip $(CC_DEPS)),) +-include $(CC_DEPS) +endif +ifneq ($(strip $(CPP_DEPS)),) +-include $(CPP_DEPS) +endif +ifneq ($(strip $(CXX_DEPS)),) +-include $(CXX_DEPS) +endif +ifneq ($(strip $(C_UPPER_DEPS)),) +-include $(C_UPPER_DEPS) +endif +endif + +-include ../makefile.defs + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: versuch07 + +# Tool invocations +versuch07: $(OBJS) $(USER_OBJS) + @echo 'Building target: $@' + @echo 'Invoking: GCC C++ Linker' + g++ -o"versuch07" $(OBJS) $(USER_OBJS) $(LIBS) + @echo 'Finished building target: $@' + @echo ' ' + +# Other Targets +clean: + -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) versuch07 + -@echo ' ' + +.PHONY: all clean dependents +.SECONDARY: + +-include ../makefile.targets diff --git a/versuch07/Debug/objects.mk b/versuch07/Debug/objects.mk new file mode 100644 index 0000000..742c2da --- /dev/null +++ b/versuch07/Debug/objects.mk @@ -0,0 +1,8 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/versuch07/Debug/sources.mk b/versuch07/Debug/sources.mk new file mode 100644 index 0000000..e7f4bf1 --- /dev/null +++ b/versuch07/Debug/sources.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +O_SRCS := +CPP_SRCS := +C_UPPER_SRCS := +C_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +ASM_SRCS := +CXX_SRCS := +C++_SRCS := +CC_SRCS := +OBJS := +C++_DEPS := +C_DEPS := +CC_DEPS := +CPP_DEPS := +EXECUTABLES := +CXX_DEPS := +C_UPPER_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +src \ + diff --git a/versuch07/Debug/src/subdir.mk b/versuch07/Debug/src/subdir.mk new file mode 100644 index 0000000..e828455 --- /dev/null +++ b/versuch07/Debug/src/subdir.mk @@ -0,0 +1,42 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +CPP_SRCS += \ +../src/Cramer.cpp \ +../src/Gauss.cpp \ +../src/LGSLoeser.cpp \ +../src/LR.cpp \ +../src/QMatrix.cpp \ +../src/Vektor.cpp \ +../src/main.cpp + +OBJS += \ +./src/Cramer.o \ +./src/Gauss.o \ +./src/LGSLoeser.o \ +./src/LR.o \ +./src/QMatrix.o \ +./src/Vektor.o \ +./src/main.o + +CPP_DEPS += \ +./src/Cramer.d \ +./src/Gauss.d \ +./src/LGSLoeser.d \ +./src/LR.d \ +./src/QMatrix.d \ +./src/Vektor.d \ +./src/main.d + + +# Each subdirectory must supply rules for building sources it contributes +src/%.o: ../src/%.cpp + @echo 'Building file: $<' + @echo 'Invoking: GCC C++ Compiler' + g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/versuch07/Debug/Versuch07.exe b/versuch07/Debug/versuch07 similarity index 68% rename from versuch07/Debug/Versuch07.exe rename to versuch07/Debug/versuch07 index 9ab07116e4c8e2dfbc06e63df02406226f14cee5..ad96f133b9b4a8cd408470e7793868e473c530c6 100755 GIT binary patch delta 87690 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 diff --git a/versuch07/src/Cramer.cpp b/versuch07/src/Cramer.cpp index 8037afd..ecc02d9 100755 --- a/versuch07/src/Cramer.cpp +++ b/versuch07/src/Cramer.cpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: Cramer.cpp // Inhalt: Cramer-Klasse @@ -20,5 +20,22 @@ ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// +Vektor Cramer::loese(QMatrix A, Vektor b) +{ + int dim = A.getDim(); + double det = A.determinante(); + Vektor result(dim); + for (int l = 0; l < dim; l++) + { + QMatrix Ai = A; + for (int k = 0; k < dim; k++) /* konstruiere Ai: i-te Spalte wird durch b ersetzt */ + { + Ai.set(k, l, b.get(k)); + } + result.set(l, Ai.determinante() / det); + } + + return result; +} diff --git a/versuch07/src/Cramer.h b/versuch07/src/Cramer.h index 3a1bc91..862de3e 100755 --- a/versuch07/src/Cramer.h +++ b/versuch07/src/Cramer.h @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: Cramer.h // Inhalt: Cramer-Klasse @@ -19,8 +19,10 @@ ///////////////////////// CLASS DECLARATION ////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// - - - +class Cramer : public LGSLoeser +{ +public: + Vektor loese(QMatrix A, Vektor b); +}; #endif /*CRAMER_H_*/ diff --git a/versuch07/src/Gauss.cpp b/versuch07/src/Gauss.cpp index a6b6df7..6f6a451 100755 --- a/versuch07/src/Gauss.cpp +++ b/versuch07/src/Gauss.cpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: Lösung eines mathematischen Anwendungsproblems // // Datei: Gauss.cpp // Inhalt: Gauss-Klasse @@ -22,5 +22,5 @@ using namespace std; ////////////////////////////////////// -////Hier Implementierung einfügen //// +////Hier Implementierung einfügen //// ////////////////////////////////////// diff --git a/versuch07/src/LGSLoeser.h b/versuch07/src/LGSLoeser.h index f1a8620..bc15f2b 100755 --- a/versuch07/src/LGSLoeser.h +++ b/versuch07/src/LGSLoeser.h @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: LGSLoeser.h // Inhalt: Abstrakte Oberklasse LGSLoeser @@ -19,14 +19,14 @@ ////////////////////////////////////////////////////////////////////////////// ///////////////////////// CLASS DECLARATION ////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// - + // Abstrakte Oberklasse class LGSLoeser { public: - // Lösungsmethode, übernimmt Matrix A und Vektor b und gibt die Lösung x zurück + // Lösungsmethode, übernimmt Matrix A und Vektor b und gibt die Lösung x zurück virtual Vektor loese(QMatrix A, Vektor b)=0; - + protected: Vektor* x; }; diff --git a/versuch07/src/LR.cpp b/versuch07/src/LR.cpp index b6543a7..2adbef9 100755 --- a/versuch07/src/LR.cpp +++ b/versuch07/src/LR.cpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: LR.cpp // Inhalt: LR-Klasse @@ -42,22 +42,44 @@ Vektor LR::loese(QMatrix A, Vektor b) erzeugeLundR(A); vorwaertsEinsetzen(b); rueckwaertsEinsetzen(); - + return *x; } ////////////////////////////////////////////////////////////////////////////// - -// Der PseudoCode funktioniert nur, wenn nicht durch 0 dividiert wird. void LR::zerlege(QMatrix& A) { + // TODO Der PseudoCode funktioniert nur, wenn nicht durch 0 dividiert wird. + for (int i = 1; i <= A.getDim(); i++) + { + for (int j = i + 1; j <= A.getDim(); j++) + { + A.set(j, i, A.get(j, i) / A.get(i, i)); + for (int k = i + 1; k <= A.getDim(); k++) + { + A.set(j, k, A.get(j, k) - (A.get(j, i) * A.get(i, k))); + } + } + } } ////////////////////////////////////////////////////////////////////////////// // Schreibe aus der Matrix A in die Matrizen L und R void LR::erzeugeLundR(QMatrix& A) { + for (int i = 1; i <= A.getDim(); i++) + { + for (int j = 1; j <= A.getDim(); j++) + { + if (i == j) /* Diagonale */ + { + L->set(i, j, 1.0); + } + + R->set(i, j, A.get(i, j)); + } + } } @@ -73,16 +95,3 @@ void LR::rueckwaertsEinsetzen() } - - - - - - - - - - - - - diff --git a/versuch07/src/LR.h b/versuch07/src/LR.h index 01a33ab..7edfdba 100755 --- a/versuch07/src/LR.h +++ b/versuch07/src/LR.h @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: LR.h // Inhalt: LR-Klasse @@ -24,18 +24,18 @@ class LR: public LGSLoeser { public: - // Konstruktor, übernimmt die Dimension + // Konstruktor, übernimmt die Dimension LR(int n); - // Lösungsmethode, übernimmt Matrix A und Vektor b und gibt die Lösung x zurück + // Lösungsmethode, übernimmt Matrix A und Vektor b und gibt die Lösung x zurück Vektor loese(QMatrix A, Vektor b); // Destruktor ~LR(); private: - // Unterteilung des Lösungsvorgangs in 4 Schritte: + // Unterteilung des Lösungsvorgangs in 4 Schritte: // Zerlegt Matrix A, Die zerlegten Matrizen L und R sind danach in A gespeichert void zerlege(QMatrix& A); - // Herauskopieren der bedeutenden Einträge in L und R + // Herauskopieren der bedeutenden Einträge in L und R void erzeugeLundR(QMatrix& A); // Vorwaertseinsetzen(berechnen von Vektor y aus L und b) void vorwaertsEinsetzen(Vektor& b); diff --git a/versuch07/src/QMatrix.cpp b/versuch07/src/QMatrix.cpp index 6dcad00..9410986 100755 --- a/versuch07/src/QMatrix.cpp +++ b/versuch07/src/QMatrix.cpp @@ -1,9 +1,9 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: Lösung eines mathematischen Anwendungsproblems // // Datei: QMatrix.cpp -// Inhalt: Matrix-Klasse zum speichern von quadratischen Matrizen variabler Größe +// Inhalt: Matrix-Klasse zum speichern von quadratischen Matrizen variabler Größe ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -12,6 +12,8 @@ #include "QMatrix.h" +#include + ////////////////////////////////////////////////////////////////////////////// ///////////////////////// Funktions-Implementierung ////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -22,12 +24,12 @@ QMatrix::QMatrix(int n) { dim = n; - A = new double[n*n]; + A = new double[n * n]; for (int i = 0; i < dim; i++) { for (int j = 0; j < dim; j++) { - A[i*dim+j] = 0.0; + A[i * dim + j] = 0.0; } } } @@ -37,12 +39,12 @@ QMatrix::QMatrix(int n) QMatrix::QMatrix(const QMatrix& alteMatrix) { dim = alteMatrix.getDim(); - A = new double[dim*dim]; + A = new double[dim * dim]; for (int i = 0; i < dim; i++) { for (int j = 0; j < dim; j++) { - A[i*dim+j] = alteMatrix.get(i,j); + A[i * dim + j] = alteMatrix.get(i, j); } } } @@ -56,9 +58,10 @@ QMatrix& QMatrix::operator=(const QMatrix& B) { for (int j = 0; j < dim; j++) { - this->A[i*dim+j] = B.get(i,j); + this->A[i * dim + j] = B.get(i, j); } } + return *this; } @@ -73,18 +76,18 @@ QMatrix::~QMatrix() // Auf das Element in der i-ten Zeile und j-ten Spalte zurgreifen double QMatrix::get(const int i, const int j) const { - return A[i*dim+j]; + return A[i * dim + j]; } ////////////////////////////////////////////////////////////////////////////// // Setze Zahl an die i-te Zeile und j-te Spalte void QMatrix::set(const int i, const int j, const double zahl) { - A[i*dim+j]=zahl; + A[i * dim + j] = zahl; } ////////////////////////////////////////////////////////////////////////////// -// Getmethode für die Dimension (wichtig für fast alle for-Schleifen) +// Getmethode für die Dimension (wichtig für fast alle for-Schleifen) int QMatrix::getDim() const { return dim; @@ -97,49 +100,115 @@ void QMatrix::transponiere() double temp; for (int i = 0; i < dim; i++) { - for (int j = i+1; j < dim; j++) + for (int j = i + 1; j < dim; j++) { - temp = A[i*dim+j]; - A[i*dim+j] = A[j*dim+i]; - A[j*dim+i] = temp; + temp = A[i * dim + j]; + A[i * dim + j] = A[j * dim + i]; + A[j * dim + i] = temp; } } } ////////////////////////////////////////////////////////////////////////////// // Erstelle einer Matrix mit einer Spalte und Zeile weniger in der die i-te Zeile und j-te Spalte der -// ursprünglichen Matrix fehlt und gebe diese neue Matrix zurück +// ursprünglichen Matrix fehlt und gebe diese neue Matrix zurück QMatrix QMatrix::untermatrix(int i, int j) { - QMatrix untermat(this->getDim()-1); - int n=0; + QMatrix untermat(this->getDim() - 1); + int n = 0; for (int k = 0; k < this->getDim(); k++) { for (int l = 0; l < this->getDim(); l++) { - if ( (i != k) && (j != l) ) + if ((i != k) && (j != l)) { - untermat.A[n] = this->get(k,l); + untermat.A[n] = this->get(k, l); n++; } } } return untermat; - + } ////////////////////////////////////////////////////////////////////////////// -// Ausgabeoperator, außerhalb der Klasse implementiert +QMatrix QMatrix::inverse() +{ + double det = determinante(); + QMatrix adj = adjunkte(); + + return adj * (1 / det); +} + +////////////////////////////////////////////////////////////////////////////// +double QMatrix::determinante() +{ + int dim = getDim(); + + if (dim == 1) + { + return get(0, 0); + } + else + { + double det = 0; + + // Laplace Entwicklung nach erster Spalte + for (int i = 0; i < getDim(); i++) + { + det += pow(-1, i+2) * get(i, 0) * untermatrix(i, 0).determinante(); + } + + return det; + } +} + +////////////////////////////////////////////////////////////////////////////// +QMatrix QMatrix::adjunkte() +{ + QMatrix mat(getDim()); + + for (int i = 0; i < getDim(); i++) + { + for (int j = 0; j < getDim(); j++) + { + mat.set(i, j, pow(-1, i+j) * untermatrix(i, j).determinante()); + } + } + + mat.transponiere(); + + return mat; +} + +////////////////////////////////////////////////////////////////////////////// +QMatrix QMatrix::operator*(double scalar) +{ + QMatrix mat(getDim()); + + for (int i = 0; i < getDim(); i++) + { + for (int j = 0; j < getDim(); j++) + { + mat.set(i, j, get(i, j) * scalar); + } + } + + return mat; +} + +////////////////////////////////////////////////////////////////////////////// +// Ausgabeoperator, außerhalb der Klasse implementiert ostream& operator<<(ostream& Stream, const QMatrix& A) { for (int i = 0; i < A.getDim(); i++) { for (int j = 0; j < A.getDim(); j++) { - Stream << setprecision(4) << A.get(i,j) << "\t"; + Stream << setprecision(4) << A.get(i, j) << "\t"; } Stream << endl; } Stream << endl; - return Stream; + return Stream; } diff --git a/versuch07/src/QMatrix.h b/versuch07/src/QMatrix.h index 040cb39..87ead50 100755 --- a/versuch07/src/QMatrix.h +++ b/versuch07/src/QMatrix.h @@ -1,9 +1,9 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: QMatrix.h -// Inhalt: Matrix-Klasse zum speichern von quadratischen Matrizen variabler Größe +// Inhalt: Matrix-Klasse zum speichern von quadratischen Matrizen variabler Gr��e ////////////////////////////////////////////////////////////////////////////// #ifndef QMATRIX_H_ @@ -24,13 +24,17 @@ using namespace std; class QMatrix { public: - // Konstruktor, übernimmt die Dimension + // Konstruktor, übernimmt die Dimension QMatrix(int n); - //Kopierkonstruktor + + // Kopierkonstruktor QMatrix(const QMatrix&); - // Zuweisungsoperator + + // Operatoren Ãœberladen QMatrix& operator=(const QMatrix& B); - //Destruktor + QMatrix operator*(const double scalar); + + // Destruktor ~QMatrix(); // Set- und Getmethoden zum Bearbeiten und Lesen der Inhalte des Vektors @@ -38,9 +42,12 @@ public: void set(const int i, const int j, const double zahl); int getDim() const; - // Hilfsmethoden für die Cramersche Regel + // Hilfsmethoden für die Cramersche Regel void transponiere(); QMatrix untermatrix(int i, int j); + QMatrix inverse(); + QMatrix adjunkte(); + double determinante(); private: double* A; // Matrix diff --git a/versuch07/src/Vektor.cpp b/versuch07/src/Vektor.cpp index b7c6684..1c6882b 100755 --- a/versuch07/src/Vektor.cpp +++ b/versuch07/src/Vektor.cpp @@ -1,9 +1,9 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: Vektor.cpp -// Inhalt: Vektor-Klasse zum speichern von Vektoren variabler Größe +// Inhalt: Vektor-Klasse zum speichern von Vektoren variabler Gr��e ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -60,7 +60,7 @@ Vektor::~Vektor() } ////////////////////////////////////////////////////////////////////////////// -// Getmethode für den i-ten Eintrag +// Getmethode f�r den i-ten Eintrag double Vektor::get(const int i) const { return v[i]; @@ -70,7 +70,7 @@ double Vektor::get(const int i) const // Schreibt Zahl an den i-ten Eintrag void Vektor::set(const int i, const double zahl) { - v[i]=zahl; + v[i] = zahl; } ////////////////////////////////////////////////////////////////////////////// @@ -80,7 +80,7 @@ int Vektor::getDim() const } ////////////////////////////////////////////////////////////////////////////// -// Ausgabeoperator, außerhalb der Klasse implementiert +// Ausgabeoperator, au�erhalb der Klasse implementiert ostream& operator<<(ostream& Stream, const Vektor& v) { for (int i = 0; i < v.getDim(); i++) @@ -88,5 +88,5 @@ ostream& operator<<(ostream& Stream, const Vektor& v) Stream << setprecision(3) << v.get(i) << endl; } Stream << endl; - return Stream; + return Stream; } diff --git a/versuch07/src/main.cpp b/versuch07/src/main.cpp index 368e2ce..394bc47 100755 --- a/versuch07/src/main.cpp +++ b/versuch07/src/main.cpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // Praktikum Informatik 1 -// Versuch 7: Lösung eines mathematischen Anwendungsproblems +// Versuch 7: L�sung eines mathematischen Anwendungsproblems // // Datei: main.cpp // Inhalt: Hauptprogramm @@ -8,9 +8,9 @@ #include "QMatrix.h" #include "Vektor.h" -#include "LR.h" +//#include "LR.h" //#include "Gauss.h" -//#include "Cramer.h" +#include "Cramer.h" #include using namespace std; @@ -22,30 +22,51 @@ void Eingabe(Vektor& b, int n); ////////////////////////////////////////////////////////////////////////////// /* -Die Benennung der Variablen entspricht, in diesem Versuch, -den mathematischen Bezeichnungen im Script. -Matrizen haben einen Großbuchstaben und -Vektoren einen Kleinbuchstaben. -*/ + Die Benennung der Variablen entspricht, in diesem Versuch, + den mathematischen Bezeichnungen im Script. + Matrizen haben einen Großbuchstaben und + Vektoren einen Kleinbuchstaben. + */ ////////////////////////////////////////////////////////////////////////////// int main() { - cout << "Wieviele Gleichungen/Unbekannte hat ihr LGS.." ; - int dim; - cin >> dim; + int dim = 3; + //cout << "Wieviele Gleichungen/Unbekannte hat ihr LGS?: "; cin >> dim; QMatrix A(dim); Vektor b(dim); Vektor x(dim); - Eingabe(A,dim); - Eingabe(b,dim); - cout << A; - - LR system1(dim); - x = system1.loese(A,b); - cout << x; - + //Eingabe(A, dim); + //Eingabe(b, dim); + + /* Beispiel Daten. Ergebnis (4, -2, -1) */ + A.set(0, 0, 1); + A.set(0, 1, 2); + A.set(0, 2, 2); + A.set(1, 0, 2); + A.set(1, 1, 3); + A.set(1, 2, 1); + A.set(2, 0, 3); + A.set(2, 1, 4); + A.set(2, 2, 1); + + b.set(0, -2); + b.set(1, 1); + b.set(2, 3); + + cout << "A = " << endl << A; + cout << "b = " << endl << b; + //cout << "Dim(A) = " << A.getDim() << endl; + //cout << "Det(A) = " << A.determinante() << endl; + //cout << "Adj(A) = " << endl << A.adjunkte() << endl; + //cout << "A^-1 = " << endl << A.inverse() << endl; + + Cramer lgs1; + x = lgs1.loese(A, b); + + cout << "x =" << endl << x; + return 0; } @@ -53,14 +74,15 @@ int main() void Eingabe(QMatrix& A, int n) { double zahl; - cout << "Bitte geben sie die Matrix(" << n << " Zeilen/Spalten) ein..." << endl; + cout << "Bitte geben sie die Matrix(" << n << " Zeilen/Spalten) ein..." + << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { - cout << "a" << (i+1) << (j+1) << ": "; + cout << "a" << (i + 1) << (j + 1) << ": "; cin >> zahl; - A.set(i,j, zahl); + A.set(i, j, zahl); } cout << endl; } @@ -70,12 +92,13 @@ void Eingabe(QMatrix& A, int n) void Eingabe(Vektor& b, int n) { double zahl; - cout << "Bitte geben sie den Vektor b (" << n << " Eintraege) ein..." << endl; + cout << "Bitte geben sie den Vektor b (" << n << " Eintraege) ein..." + << endl; for (int i = 0; i < n; i++) { - cout << "b" << (i+1) << ": "; + cout << "b" << (i + 1) << ": "; cin >> zahl; b.set(i, zahl); } - + }