我有一个问题解决和动画

1视图(30天)
我写了一个代码问题解的方程,最后,得到了方程,但我得到一个错误。
有人能帮助我吗?
%由拉格朗日力学模拟耦合摆的
关闭所有;清晰;clc
%广义坐标
信谊t dum_
θ= str2sym (“θ(t)”);
φ= str2sym (φ(t)的);
%的常量,长度,质量,g,几何
l1 = 7.5;
l2 = 7.5;
L_3 = 7.5;
1 = 4;
m_2 = 4;
m_3 = 4;
g = 9.81;
数= 15;%其他弹簧长度
%位置和速度作为广义坐标的函数=
x1 = l1 * cos(θ);
日元= l1 * sin(θ);
x2 = 2 * l2 * cos(θ);
y2 = 0;
x3 = 2 * l1 * cos(θ)+ L_3 * sin(φ);
y3 = L_3 * cos(φ);
x1_dot = diff (x1, t);
x2_dot =差异(x2, t);
y1_dot = diff (y1, t);
y2_dot = diff (y2, t);
x3_dot = diff (x3, t);
y3_dot = diff (y3、t);
%动能和势能
T = m_1/2 * (x1_dot ^ 2 + y1_dot ^ 2) + m_2/2 * (x2_dot ^ 2 + y2_dot ^ 2) + m_3/2 * (x3_dot ^ 2 + y3_dot ^ 2);
k = 0.5;
V = 1 * g * y1 - m_3 * g * y3 +
1/2 * k * (d_0-2 * l1 * cos(θ))^ 2;
%确定为θ=α和φ=β系统处于静止状态
%α=符号(“α”);
%β=符号(“贝塔”);
% v =潜艇(v,{θ,φ},{α,β});
%(α,β)= vpasolve ([diff (v,α),diff (v,β)],[α,β]);
%拉格朗日
L = T - V;
% dL / d (qdot)
dL_dthetadot =潜艇(diff(潜艇(L, diff(θ,t), dum_), dum_), dum_, diff(θ,t));
dL_dphidot =潜艇(diff(潜艇(L, diff(φ,t), dum_), dum_), dum_, diff(φ,t));
% dL / dq
dL_dtheta =潜艇(diff(潜艇(L,θ,dum_) dum_), dum_,θ);
dL_dphi =潜艇(diff(潜艇(L,φ,dum_) dum_), dum_,φ);
% dFdq
k = 0.25;%电离常数
%广义运动方程
deq_1 = diff (dL_dthetadot t) - dL_dtheta;
deq_2 = diff (dL_dphidot t) - dL_dphi;
%变量的缩写
变量={θ,φ,diff(θ,t) diff(φ,t) diff(θ,t, 2),差异(t,φ2)};
variables_short = arrayfun (@str2sym, {“x”(1),“x”(2),“x”(3),“x”(4),“thetaddot”,“phiddot”});
deq_1 =潜艇(deq_1、变量variables_short);
deq_2 =潜艇(deq_2、变量variables_short);
%求thetaddot phiddot
解决方案=解决(deq_1 deq_2 str2sym (“thetaddot”),str2sym (“phiddot”));
THETADDOT = solution.thetaddot;
PHIDDOT = solution.phiddot;
%解决非线性ode体系
时间= linspace (0, 2000);
%初始条件(θ,φ,thetadot, phidot)
从=[-π/ 4π/ 6 0 0];
str = [' x_dot = @ (t, x) [x (3);x (4),“char (THETADDOT),“;”char (PHIDDOT),”),“];
eval (str);
(t, q) =数值(x_dot、时间从);
% Calculute职位是广义坐标的函数
X1 = l1 * cos (q (: 1));
日元= l1 * sin (q (: 1));
X2 = 2 * l2 * cos (q (:, 2));
Y2 = 0;
X3 = 2 * l1 * cos (q (:, 3)) + l1 *罪(q (:, 3));
Y3 = -L_3 * cos (q (:, 3));
%策划解决方案
集(gcf,“颜色”,' w ')
集(gcf,“位置”,100,750,750)
h =情节([]);
持有
盒子
平等的
i = 1:元素个数(时间)
如果~ ishghandle (h)
打破
结束
情节([0 X1 (i)], [0, Y1 (i)],“k”,“线宽”2);
情节(X1(我),Y1(我),“o”,“MarkerFaceColor”,“k”,“MarkerEdgeColor”,“k”,“MarkerSize”4 * 1);
情节([X1(我),X2 (i)], [Y1 (i), Y2 (i)),“k”,“线宽”2);
情节(X2 (i), Y2(我),“o”,“MarkerFaceColor”,“k”,“MarkerEdgeColor”,“k”,“MarkerSize”4 * m_2);
情节([X2(我),X3 (i)], [Y2(我),Y3 (i)),“k”,“线宽”2);
情节(X3 (i)、Y3(我),“o”,“MarkerFaceColor”,“k”,“MarkerEdgeColor”,“k”,“MarkerSize”4 * m_3);
轴([-12、60、-10、20]);
h = draw_spring_2D ([0;0],[X2(我);0],12日,0.5);
drawnow
结束
函数h = draw_spring_2D (A, B, number_of_coils y_amplitude)
持续的t
normalvector_AB = (B - A) /规范(B - A);
offset_A = A + 1.25 * normalvector_AB;
offset_B = B - 1.25 * normalvector_AB;
distance_between_offsets =规范(offset_B - offset_A);
t = linspace (number_of_coils * 2 *π-π,500);
x_coordinate_between_offsets = distance_between_offsets * linspace(0, 1,元素个数(t));
% x振幅和y之间的比率
ratio_X_div_Y = 0.5;
x = x_coordinate_between_offsets + ratio_X_div_Y * y_amplitude * cos (t);
y = y_amplitude * sin (t);
coil_positions = [x;y);
rotation_matrix = [normalvector_AB,零(normalvector_AB '));
rotated_coil_positions = rotation_matrix * coil_positions;
h =情节(((1)offset_A (1) + rotated_coil_positions (: 1)、B (1)),
((2),offset_A (2) + rotated_coil_positions (2:)、B (2)),“k”);
结束
1评论
约翰D 'Errico
约翰D 'Errico 2021年9月25日
永远只是说你有一个错误。显示完整的错误消息,因此一切都用红色。如果你做的是说你有一个错误,我们怎样才能知道自己做错了什么吗?也许你甚至不知道如何执行该脚本你写吗?

登录置评。

接受的答案

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2021年9月25日
有一个相关的潜在规模在Y2犯错,是固定的。在此插入代码,然后模拟工作好。
X2 = 2 * l2 * cos (q (:, 2));
Y2 = 0(大小(X2));% Y2必须匹配的大小与X2之一

更多的答案(0)

类别

找到更多的在编程帮助中心文件交换

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!