Estoy enfrentando problemas en el aumento de la oscilación en un oscilador armónico simple usando una diferencia hacia atrás. Aquí está mi código en Scilab
function [x] = back(h, tf)
k = 2;
m = 1;
i = 2;
t(i - 1) = 0;
x(i - 1) = 10;
v(i - 1) = 0;
t(i) = t(i - 1) + h
v(i) = v(i - 1) - h * (k / m) * x(i - 1)
while t(i) < tf
t(i + 1) = t(i) + h
x(i + 1) = x(i - 1) - 2 * (k / m) * v(i) * h
i = i + 1
end
plot(t, x, 'b');
endfunction
0
Anshul Sharma
29 feb. 2020 a las 09:25
2 respuestas
La mejor respuesta
Desde su código, supongo que está intentando implementar el esquema de velocidad-Verlet. Aquí está su implementación para un oscilador simple con la ecuación diferencial:
function [x] = back(h, tf)
k = 2;
m = 1;
t = 0:h:tf;
x(1) = 10;
v(1) = 0;
for i=2:length(t)
x(i) = x(i - 1) + v(i - 1) * h - k / m * x(i-1) * h^2 / 2;
v(i) = v(i - 1) - k / m * (x(i) + x(i-1)) * h / 2;
end
plot(t, x, 'b');
endfunction
[x] = back(0.01, 10)
2
Foad
4 mar. 2020 a las 16:51
No estoy muy seguro de lo que está tratando de lograr, ni si su matemática es correcta. Pero suponiendo que desea resolver el problema numérico de:
//coefficients of:
k = 2.;
m = 1.;
// with an initial condition of:
t(1) = 0.;
x(1) = 10.;
v(1) = 0.;
// time paramters:
N = 50;
tf = 10;
h = tf / 50.;
for ii = 2:N
t(ii) = t(ii - 1) + h;
x(ii) = x(ii - 1) - 2 * (k / m) * v(ii - 1) * h
v(ii) = v(ii - 1) - h * (k / m) * x(ii - 1)
disp(x(ii))
end
plot(t, x, 'b');
Resultará en:
Lo cual no parece correcto pero de todos modos. Por favor revise sus matemáticas nuevamente.
0
Foad
1 mar. 2020 a las 13:35
Nuevas preguntas
numerical-methods
Algoritmos que resuelven problemas matemáticos mediante aproximación numérica (en oposición al cálculo simbólico).