Rozwiązywanie układów równań liniowych, odwracanie macierzy i obliczanie wyznaczników

 

Założenia

bulletNapisać program rozwiązujący układy równań liniowych, obliczający macierze odwrotne i wyznaczniki macierzy
bulletNależy wykorzystać funkcję języka C++, którą można Tutaj pobrać
Opis funkcji lininv
bulletNagłówek funkcji

void lininv(long *isol, long *idsol, long nr, long nc, double *a, long *kwa, double *det) 

bulletProcedura rozwiązuje jednocześnie k układów równań liniowych Ax=b o jednakowej macierzy A i różnych wektorach wyrazów wolnych b
bulletWszystkie równania można w postaci AX=B, gdzie
bulletA - wspólna macierz układu równań n×n
bulletB - macierz wyrazów wolnych n×k, zawiera k kolumn wyrazów wolnych
bulletX - macierz rozwiązań  n×k, zawiera k kolumn rozwiązań 
bulletDane funkcji
bulletnr - liczba równań układu - n
bulletnc - suma liczby kolumn macierzy A i macierzy B, nc=n+k
bulleta - tablica zawierająca wartości elementów macierzy A i B, a = [A,B]
bulletWyniki
bulleta' - po wykonaniu funkcji, tablica a' zawiera wartości elementów macierzy 1 i X, a' = [1,X]
bulletdet - zmienna wskazywana przez det zawiera wartość wyznacznika macierzy A
bulletInne parametry
bulletisol i idsol = zmienne wskazujące zmienne przechowujące informacje o błędach wykonania funkcji. Jeśli *isol = 1 i *idsol = 1 w trakcie wykonywania funkcji nie wystąpił żaden błąd
bulletkwa - wskaźnik do obszaru pamięci pomocniczej o rozmiarze long[(size_t)(nr*nc*6)]
Wykorzystanie funkcji lininv
bulletFunkcja może służyć do rozwiązywania równań liniowych, wtedy macierz B zawiera wektory wyrazów wolnych rozwiązywanych równań. Rozwiązania znajdą się w macierzy X czyli ostatnich kolumnach macierzy a'
bulletFunkcja może służyć do znajdowania macierzy odwrotnej, wtedy macierz B zawiera zawiera macierz jednostkową B=1. Poszukiwaną macierzą odwrotną będzie macierz X utworzona z ostatnich kolumn macierzy a'

Zalecenia dotyczące programu

bulletDo stworzenia programu należy wykorzystać środowisko programistyczne C++Builder
bulletFormularz powinien zawierać
bulletKomponent Memo przeznaczony do umieszczenia w nim współczynników równań (macierzy a = [A,B])
bulletKomponent Memo przeznaczony do umieszczenia w nim wyników (macierzy a' = [1,X])
bulletKomponenty Edit ,do których należy wpisać wartości
bulletnr - liczbę wierszy macierzy a
bulletnc - liczbę kolumn macierzy a
bulletKomponent do wydruku wartości wyznacznika macierzy A - wartość wskazywana przez zmienną det 
bulletPrzycisk uruchamiający obliczenia
bulletOczytanie współczynników równania można zrealizować w następujący prosty sposób
bulletUtworzyć strumień łańcuchowy pobierający tekst z okienka Memo
bullet#include <strstream.h>
.............
istrstream Dane(Form1->Memo1->Lines->GetText());
bulletCzytać dane ze strumienia Dane przy pomocy operatora ">>"

Przy pomocy stworzonego programu rozwiązać następujące układy równań

Znaleźć macierze odwrotne

1

0

1

3

3

0

0

2

2

 

1

1

0

0

0

1

2

1

0

0

0

1

2

1

0

0

0

1

2

1

0

0

0

1

2