

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.
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:
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é.
Ta JAMA je uz dost stara, sel bych spise cestou commons-math nebo index.php. Jinak 100% souhlas...
Dékuji, podívám se na to.