Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno MATLAB - LU rozklad - problém

Ahoj mám problém s programem na LU rozklad matice A s částečným výběrem hlavních prvků. Vstup: A Výstup: L, U, P
Program mám napsaný, ale vypisuje mi to chybu a nevím, jak to opravit. Děkuji za rady

function [L, U, P] = LURozklad(A)
P = eye (size(A));
L = P;
A_pred = A;
P_pred = P;

for k = 1:size(A) - 1
r = IndexPivotnihoRadku(A, k, k);
A_pred = VymenaRadkuMatice(A, k, r);
A = A_pred;
P_pred = VymenaRadkuMatice(P_pred, k, r);

for i = k + 1:size(A)
m_ik = A(i, k)/A(k, k);

for j = k + 1:size(A)
A(i, j) = A(i, j) - m_ik * A(k, j);
end

A(i, k) = m_ik;
end

printf('matice A: ', A);
end

printf('matice A: ', A);

for i = 2:size(A)
for j = 1:size(A)
if i > j
L(i, j) = A_pred(i, j);
end
end
end

printf('matice L: ', L);

for i = 1:size(A)
for j = 1:size(A)
if i <= j
U(i, j) = A_pred(i, j);
end
end
end

printf('matice U: ', U);

P = P_pred;

printf('matice P:', P);

end

function [r] = IndexPivotnihoRadku(A, OdRadku, IndexSloupce)
MaxHodnota = 0;
for i = OdRadku:size(A)
if abs(A(i,IndexSloupce)) > MaxHodnota
MaxHodnota = abs(A(i,IndexSloupce));
r = i;
end
end
end

function [A] = VymenaRadkuMatice(A, radek1, radek2)
PomocnyRadek = A(radek1,: );
A(radek1, : ) = A(radek2,:);
A(radek2, : ) = PomocnyRadek;
end

function printf(string, value)
disp(string);
disp(value);
end

Předmět Autor Datum
Předpokládám, že A je vstupní matice, kterou chcete rozkládat. Matlab Vám sám píše, že není nijak za…
shark.jd 22.03.2012 21:44
shark.jd
Ano, A je matice. Mě právě Matlab vypisuje chybu, že není zadaná vstupní matice A, ale př tom ji mám…
GOLEM.T 22.03.2012 22:20
GOLEM.T
Mně Matlab vypíše toto: ??? Input argument "A" is undefined. Error in ==> LURozklad at 3 P = eye (…
shark.jd 22.03.2012 23:02
shark.jd
Ano, skutěčně to funguje, když to napíšu přímo do programu, ale nevíte čím by to mohlo být, protože…
GOLEM.T 22.03.2012 23:12
GOLEM.T
Předpokládám, že jste ten program asi nepsal, jen někde získal algoritmus, je to tak? :-) Já letmým…
shark.jd 22.03.2012 23:20
shark.jd
Tak nakonec jsem zjistil, že si musím nejprve nadefinovat matici A a poté napsat příkaz pro spuštění…
GOLEM.T 22.03.2012 23:37
GOLEM.T
:beer: poslední
shark.jd 22.03.2012 23:39
shark.jd

Ano, A je matice. Mě právě Matlab vypisuje chybu, že není zadaná vstupní matice A, ale př tom ji mám již zadanou.
Jinak vypisuje mi při spouštění toto:

Error in ==> LURozklad at 2
P = eye (size(A));
Nebo nemůžete mi poradit jak bych to měl předefinovat? Děkuji

Mně Matlab vypíše toto:

??? Input argument "A" is undefined.

Error in ==> LURozklad at 3
P = eye (size(A));

Ta druhá chyba pak vychází z té první - nemá co vrazit do metody LURozklad, když není A definováno. Kde v kódu je dle Vás matice A definovaná? Schválně si přidejte ten řádek s deklarací matice A, který jsem psal výše ve vlákně. Nechce se mi zrovna zkoumat celý kód, programování mám již za sebou a Matlab používám sem tam ve škole.

Výstup programu je pak tento:

A =

1 2 3
5 6 7

matice A:
5.0000 6.0000 7.0000
0.2000 0.8000 3.0000

matice A:
5.0000 6.0000 7.0000
0.2000 0.8000 3.0000

matice L:
1 0 0
1 1 0

matice U:
5 6
0 2

matice P:
0 1 0
1 0 0

ans =

1 0 0
1 1 0

Ano, skutěčně to funguje, když to napíšu přímo do programu, ale nevíte čím by to mohlo být, protože se program má spustit a uživatle si tam má nadefinovat matici A a následně pak mu to vypočítá, ale takto to nevím proč to nejde. Ale děkuji alespoň za toto. Nevšiml bych si toho, pořád jsem přemýšlel proč to nejde.

Předpokládám, že jste ten program asi nepsal, jen někde získal algoritmus, je to tak? :-) Já letmým pohledem nikde nevidím funkci, která by vyzvala uživatele na zadání matice, tento kus kódu bude potřeba doplnit. Bohužel Vám asi neporadím, v Matlabu často nepracuji a nevím to.

Zpět do poradny Odpovědět na původní otázku Nahoru