scartout Temat założony przez niniejszego użytkownika |
[C++] Dzielenie macierzy przez wektor » 2014-10-21 19:30:00 Witam. Pytanie przede wszystkim dla obeznanych forumowiczów: czy istnieje jakiś biblioteka\moduł do doinstalowania do Dev-C++ lub Code:Blocks'a dzięki któremu można byłoby, tak jak np. w Scilabie, prosto dzielić macierz przez wektor aby otrzymywać rozwiązania? Podczas poszukiwań na www widziałem chyba coś podobnego ale nie jestem w stanie teraz tego ponownie odnaleźć. Chodzi mi mianowicie o takie działanie:
A=[1,2,3;4,5,6;7,8,9] B=[1;2;3] X=A/B
Z góry dziękuje za odpowiedź! :) |
|
Monika90 |
» 2014-10-21 19:43:01 |
|
SocrateZ |
» 2014-10-22 08:42:40 |
|
scartout Temat założony przez niniejszego użytkownika |
» 2014-10-22 15:56:47 Dziekuję za odpowiedzi! Z tym mnożeniem przez odwrotność to wiedziałem przed założeniem tematu i dlatego go założyłem :) . Musiałbym sporo dopisać kodu (metoda Gaussa i podobne), a uzyskiwanie odpowiedzi za pomocą X=A/B tak jak w SciLabie jest prostsza. Poza tym X=A/B jest tylko małym elementem programu nad którym pracuję. Sprawdziłem bibliotekę Eigen. Potrafi pomnożyć, podzielić przez skalar a nie potrafi, jak poniżej podzielić macierzy przez wektor. Jak to podzielić? To co napisałem (ale nie działa) : #include <iostream> #include <Eigen/Dense>
using namespace std;
int main() { Eigen::Matrix3d m; Eigen::Vector3d n( 1, 2, 3 ); m << 1, 2, 3, 4, 5, 6, 7, 8, 9; cout << m << endl; cout << n << endl; cout << m / n << endl; } [ \c pp ] |
|
Monika90 |
» 2014-10-22 19:03:30 |
|
scartout Temat założony przez niniejszego użytkownika |
» 2014-10-22 19:16:47 Konkretnie chodzi mi o rozwiązywanie równań liniowych czyli dokładniej X=A^-1 * B, czyli macierz odwrotna do A * wektor B. Chcę liczyć na tej samej zasadzie jak w SciLabie wpisujemy X=A/B i otrzymujemy odpowiedzi. |
|
Monika90 |
» 2014-10-22 21:29:19 Rozwiązać układ równań liniowych można tak #include <iostream> #include <Eigen/Dense>
using namespace std;
int main() { Eigen::Matrix3d m; Eigen::Vector3d n( 1, 2, 3 ); m << 1, 2, 3, 4, 5, 6, 7, 8, 9; cout << m << endl; cout << n << endl; cout << m.colPivHouseholderQr().solve( n ) << endl; }
|
|
scartout Temat założony przez niniejszego użytkownika |
» 2014-10-23 09:23:48 Dzięki za odpowiedź! Faktycznie rozwiązywanie układów działa, ale to nie koniec problemów :) Podałbym od razu ten przykład gdybym wiedział że będzie z nim problem. Program ma rozwiązywać konkretnie układ tego typu (nie jestem z tym obeznany z innymi bibliotekami więc proszę o poprawienie): #include <iostream> #include <Eigen/Dense>
using namespace std;
int main() { Eigen::Matrix3d m; Eigen::Vector3d n( - 1, - 4, - 5, - 11, - 9 ); m << 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1; cout << m << endl; cout << n << endl; cout << m.colPivHouseholderQr().solve( n ) << endl; } [ \c pp ] |
|
« 1 » 2 |