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
Zdravím,
potřeboval poradit ohledně syntaxe v MATLABu.
Řeším rovnici
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
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
[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
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
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)
↑ 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
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)
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
A neslouží k tomu právě to (již zmíněné) struct2cell? Dle dokumentace by to mělo poskládat ty hodnoty do vektoru.
↑ ViliX:
Tak jsem to zkusil a vypadá to nadějně.
při použití:
C = struct2cell(AB); C = double(subs(C));
dostávám opravdu vektor požadovaných hodnot.
nebo taky možnost :
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