Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 08. 02. 2017 21:28 — Editoval Pritt (08. 02. 2017 21:30)

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

MATLAB - rychlý dotaz

Zdravím,
potřeboval poradit ohledně syntaxe v MATLABu.

Řeším rovnici

Code:

solve(eqn, A, B)

, kde A, B jsou vektory proměnných.

Teď mám problém s tím, že nemohu dostat výsledek do formy vektoru.

Pokud napíšu

Code:

S = solve(eqn, A, B)

dostanu S jako strukturu. Nevím (za nic nemůžu najít), jak převést strukturu, respektive její pole do jednoho vektoru.

Další možnost je

Code:

[a1,a2,...an,b1,b2,...bm] = solve(eqn, A, B)

A = [a1,...,an]
B = [b1,...bn]
Takto bych už dostal vektor, ale jde o to, že předem nevím,jaký bude rozměr A, B.

Zápis

Code:

AB = cat(2, A, B); 
AB = solve(eqn, A, B);

bohužel není platný.

Potřeboval bych jen poradit, jak poslední rovnost správně zapsat, protože to nemůžu nikde najít..

Díky moc.

Offline

  • (téma jako vyřešené označil(a) Pritt)

#2 09. 02. 2017 09:43 — Editoval ViliX (09. 02. 2017 09:52)

ViliX
Host
 

Re: MATLAB - rychlý dotaz

Volání té metody solve je v pohodě. Zkusil jsi však struct2cell? (https://www.mathworks.com/help/matlab/r … 2cell.html)
Další možností by bylo napsat si vlastní metodu ve které by byl nějaký for cyklus, který by jen tahal data z té struktury do pole.
Ten tvůj poslední zápis mi připadá docela dobrý a upřímně nevím kde je na něm chyba. Zkus však použít horzcat() místo cat() - to zajistí že se ty vektory poskládají za sebe. (https://www.mathworks.com/help/matlab/ref/horzcat.html)

 

#3 09. 02. 2017 10:00 — Editoval Pritt (09. 02. 2017 10:02)

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

Re: MATLAB - rychlý dotaz

↑ ViliX:

Napsal jsem to trochu nepřesně, poslední zápis vrací AB jako strukturu. Já bych potřeboval, aby se do složek AB uložily po řadě řešení z té rovnice a dostal jsem vektor.

Vlastní funkci jsem zkoušel napsat, ale zase jsem narazil na problém, že abych mohl tahat data z té struktury, musím je tahat pomocí nějaké proměnné n, což je vektor názvů proměnných, což jsou složky AB:
S.n je n-té pole ty struktury, ale n musí být string, a to je problém.

Offline

 

#4 09. 02. 2017 10:16 — Editoval ViliX (09. 02. 2017 10:21)

ViliX
Host
 

Re: MATLAB - rychlý dotaz

A jak tedy vypadá ta struktura? Pokud je součástí struktury S vektor v, pak lze n-tý prvek toho vektoru získat S.v(n)

 

#5 09. 02. 2017 11:17 — Editoval Pritt (09. 02. 2017 11:19)

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

Re: MATLAB - rychlý dotaz

Struktura S vypadá následovně:
Je 1x1, S(1) = S = a1,a2,....,an,b1,b2,....,bm

S.a1
S.a2
.
.
.
S.an
S.b1
S.b2
.
.
.
S.bm

Každý z výrazů S.ai, nebo S.bi je skalár, má konkrétní číselnou hodnotu.

Cíl je dostat vektor v = (S.a1, .... , S.an, S.b1, .... , S.bm)

Offline

 

#6 09. 02. 2017 13:24

ViliX
Host
 

Re: MATLAB - rychlý dotaz

A neslouží k tomu právě to (již zmíněné) struct2cell? Dle dokumentace by to mělo poskládat ty hodnoty do vektoru.

 

#7 09. 02. 2017 15:15 — Editoval Pritt (09. 02. 2017 15:44)

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

Re: MATLAB - rychlý dotaz

↑ ViliX:

Tak jsem to zkusil a vypadá to nadějně.

při použití:

Code:

C = struct2cell(AB);
C = double(subs(C));

dostávám opravdu vektor požadovaných hodnot.
nebo taky možnost :

Code:

C = struct2cell(AB);
C = vpa(C);

První možnost mi nefunguje, pokud jsou ve struktuře uloženy symbolické hodnoty, druhá možnost připouští i symboly.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson