Kod: Zaznacz cały
//ruch harmoniczny
xdel(winsid());
clear();
dane = [ 3.975, 3.919, 4.473, 4.859, 4.421, 4.756, 4.254, 3.896,..
2.981, 2.998, 2.584, 2.131, 1.449 0.282, 0.367, -0.449,..
-1.431, -1.833, -2.775, -2.84, -3.262, -3.713, -4.333, -4.378,..
-4.836, -4.349, -4.341, -4.313, -4.115, -3.50, -3.119, -2.306,..
-1.838, -1.342, -0.463, 0.164, 0.685, 1.708, 2.199, 2.615,..
3.283, 4.001, 3.911 4.416, 4.01, 4.282, 4.394, 4.374, 4.123 ];
t = 0:0.25:size(dane,'c')*0.25-0.25; // wektor czasu
function y = funkcja(x, t)
y = x(1)*x(2)*cos(x(1)*t+x(3));
endfunction
function wynik = mini(wsp, x, y,wag)
wynik = wag.*(funkcja(wsp,x)-y);
endfunction
m=size(dane,'c');
wsp=[1;1;1];
wag = ones(m,1);
[sumaKw, wspolczynniki] = leastsq(list(mini, t', dane',wag),wsp);
"wspolczynnik A "
wspolczynniki(1)
"wspolczynnik w "
wspolczynniki(2)
"wspolczynnik f "
wspolczynniki(3)
wykresx=t
wykresy=wspolczynniki(1)*wspolczynniki(2)*cos(wspolczynniki(1)*t+wspolczynniki(3));
plot2d(wykresx,wykresy)
Jakobian=derivative(funkcja,t);
przysp = ones(t);
for i = [1:49] do
przysp(i)=Jakobian(i,i);
end
function ydwa = funkcja(x, t)
ydwa = -x(1)*x(2)*x(2)*sin(x(1)*t+x(3));
endfunction
function wynikd = mini(wspd, x, ydwa,wagd)
wynikd = wagd.*(funkcja(wspd,x)-ydwa);
endfunction
o=size(dane,'c');
wspd=[wspolczy;wspolczynniki(2);wspolczynniki(3)];
wagd = ones(o,1);
[sumaK, wspol] = leastsq(list(mini, t', dane',wagd),wspd);
wspol
wykresxd=t
wykresyd=-wspol(1)*wspol(2)*wspol(2)*sin(wspol(1)*t+wspol(3));
printf("kokokoko");
plot2d(wykresxd,wykresyd)