模拟小球在仅在重力作用下沿轨迹运动
在以水平速度对x轴求不定积分求水平位移关于时间t的关系的过程中,被积函数复杂无解析解,如何解决
clear
clc
syms t_0 %%定义在目标点的角度%%
g = 9.8;
x_0=10*rand(1)+5;
y_0=10*rand(1)+5;%%随机生成目标点
eqn =@(t_0)(t_0-sin(t_0))/(1-cos(t_0))-(x_0/y_0);
t_0 = fzero(eqn, pi);%摆线在目标点t的参数t_0%
r = y_0/(1-cos(t_0));%%解出摆线圆的半径%%
T = 0:0.005:t_0;
a_1 = -rand(1); %%二次函数二次项系数%%
x = r*(T-sin(T));
y_1 = r*(1-cos(T)); %%摆线%%
y_2 = a_1*(x.^2)+(y_0-a_1*x_0^2).*x/x_0;%%抛物线%%
y_3 = y_0*x/x_0;%%直线%%
y_4 = y_0*x./0.5.*(x<=0.5)+y_0*(x>0.5);%%折线%%
%%创建速度在x位置的水平分量对应的余弦值,延拓matlab求导缺少的元素%%
alpha_1 = cos(atan(diff(y_1)));alpha_1 = [alpha_1 alpha_1(end)];
alpha_2 = cos(atan(diff(y_2)));alpha_2 = [alpha_2 alpha_2(end)];
alpha_3 = cos(atan(diff(y_3)));alpha_3 = [alpha_3 alpha_3(end)];
alpha_4 = cos(atan(diff(y_4)));alpha_4 = [alpha_4 alpha_4(end)];
%%水平速度随x的变化%%
v_x1 = alpha_1.*sqrt(2*g*y_1);
v_x2 = alpha_2.*sqrt(2*g*y_2);
v_x3 = alpha_3.*sqrt(2*g*y_3);
v_x4 = alpha_4.*sqrt(2*g*y_4);
%%求出水平位移随时间变化%%
p = polyfit(x,1./v_x1,5)
plot(x,polyval(p,x))
a = polyval(p,x)
a(244)
int(1./v_x2,x)
int(1./v_x3,x)
int(1./v_x4,x)%%在这个地方报错%%