Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Vysvětlení příkazů z matlabu - Java

Ahoj,

přepisuji krátký kód z matlabu od javy a vůbec tomu nerozumím, matlab neumím.

Mohl by mi někdo poradit?

T = 30;
deltaT = 0.01;
vw = [0, 10, 0];
g = [0, 0, -10];
v0 = [100, 0, 100];
c = 0.05;
x0 = [0, 0, 0];

t = (0:deltaT:T);
v = zeros(length(t), 3);
x = zeros(length(t), 3);
vcista = zeros(length(t), 3);
xcista = zeros(length(t), 3);
 
v(1, :) = v0;
x(1, :) = x0;
 

for ti = 2:length(t)
  v(ti, :) = v(ti-1, :) + g*deltaT + (vw - v(ti-1, :))*c*deltaT;
  x(ti, :) = x(ti-1, :) + v(ti-1, :)*deltaT;

  vcista(ti, :) = vcista(ti-1, :) + g*deltaT;
  xcista(ti, :) = xcista(ti-1, :) + vcista(ti-1, :)*deltaT;
end

Pochopil jsem jen deklaraci proměnných:

T = 30;
deltaT = 0.01;
vw = [0, 10, 0];
g = [0, 0, -10];
v0 = [100, 0, 100];
c = 0.05;
x0 = [0, 0, 0];

Kód obsahuje vektory, tudíž jsem si pro ně definoval v Jave vlastní třídu:

class Vector3 {

    public final double x, y, z;

    public Vector3(double x, double y, double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    
}

Za rady/pomoc předem děkuji.

Předmět Autor Datum
Matlab je založený na práci s maticemi, proto bych doporučil při implementaci kódu z Matlabu do Javy… nový
marekdrtic 20.03.2016 15:39
marekdrtic
Ta JAMA je uz dost stara, sel bych spise cestou commons-math nebo index.php. Jinak 100% souhlas... nový
MaSo 20.03.2016 18:21
MaSo
Dékuji, podívám se na to. poslední
MašinkaTomáš 21.03.2016 10:42
MašinkaTomáš

Matlab je založený na práci s maticemi, proto bych doporučil při implementaci kódu z Matlabu do Javy použít některou ze specializovaných knihoven pro lineární algebru, konkrétně za sebe můžu doporučit jama . Je zbytečné vymýšlet kolo a znova vymýšlet kód pro inicializování matic a počítání s nimi. Navíc dobrá knihovna nabídne některé optimalizace (typicky třeba u násobení matic, ty to asi u tohohle příkladu nepostřehneš, ale u násobení matic velikostí 1e6 x 1e6 už je to znát poměrně hodně). U JAMA jsem viděl, že to pár lidí, které znám, používalo pro implementaci algoritmů pro strojové učení v Javě.

Zbytek vysvětlím na příkladech:

t = (0:deltaT:T);
Př. t = (0:0.1:1);
ti vygeneruje vektor [0 0.1 0.2 ...... 0.9 1]

v = zeros(length(t), 3);
Př. v=zeros(2,3);
ti do proměnné v uloží nulovou matici 2x3, tedy

[0 0 0]
[0 0 0]


v(1, :) = v0;
Př. v(1,:) = 2;

udělá z matice
[0 0 0]
[0 0 0]

následující matici, vlastně nahradí první řádek dvojkami, tedy hodnotou v0
[2 2 2]
[0 0 0]

Zbytek už jsou prosté operace s maticemi a vektory. Jinak pozor - určitě nestačí udělat si třídu jenom pro třírozměrný vektor, vektory můžou být obecně n rozměrné, klidně můžou mít 1000 prvků. U matic je to podobné.

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