想算一根杆子在有摩擦的水平面上下滑时质心的变化情况,有点问题
mathematica吧
全部回复
仅看楼主
level 9
Clear["`*"];
\[Mu] = 0.1;
m = 0.015;
g = 9.8;
r = 0.05;
NDSolve[{Derivative[2][x][t]*m == (-fn[t])*\[Mu],
Derivative[2][y][t]*m == m*g - fn[t], \[Theta][t] == ArcCos[y[t]/r],
((1/2)*(1/12)*m*Derivative[2][\[Theta]][t]*(2*r)^2)/r ==
fn[t]*Sin[\[Theta][t]] - \[Mu]*fn[t]*Cos[\[Theta][t]],
Derivative[1][x][0] == 0, Derivative[1][y][0] == 0,
Derivative[1][\[Theta]][0] == 0, x[0] == 0,
y[0] == r, \[Theta][0] == 0}, {x[t], y[t], \[Theta][t], fn[t]}, {t,
0, 1000}]
或者:
Clear["`*"];
\[Mu] = 0.1;
m = 0.015;
g = 9.8;
r = 0.05;
NDSolve[{
x''[t]*m == -fn[t]*\[Mu],
y''[t]*m == m g - fn[t],
\[Theta][t] == ArcCos[y[t]/r],
(1/2 1/12 m \[Theta]''[t] (2 r)^2)/r ==
fn[t] Sin[\[Theta][t]] - \[Mu] fn[t] Cos[\[Theta][t]],
x'[0] == 0, y'[0] == 0, \[Theta]'[0] == 0,
x[0] == 0, y[0] == r, \[Theta][0] == 0
}, {x[t], y[t], \[Theta][t], fn[t]}, {t, 0, 1000}]
提示:
NDSolve::icfail: Unable to find initial conditions that satisfy the residual function within specified tolerances. Try giving initial conditions for both values and derivatives of the functions.
2022年08月24日 12点08分 1
吧务
level 10
非微分方程的代数方程自己解了然后代进去应该能解决第一个问题,剩下的可能复杂些涉及数值稳定性
2022年08月24日 15点08分 2
吧务
level 12
贴个代码,看看会不会被抽
Clear["`*"];
(*x和y方向的F=ma,墙面光滑的话把y方程中摩擦力相关项注释掉*)
eqns = {m x''[t] == T Sin[\[Theta][t]] - \[Mu] T Cos[\[Theta][t]],
m y''[t] ==(*\[Mu] T[t]Sin[\[Theta][t]]*)-m g + T Cos[\[Theta][t]]
};
(*联立消去T,将x、y用\[Theta]表示,带入化简后得到仅含有\[Theta]一个函数的微分方程*)
eqn = Eliminate[eqns, T] /. {x -> Function[t, r Sin[\[Theta][t]]],
y -> Function[t, r Cos[\[Theta][t]]]} // FullSimplify;
\[Mu] = 0.1;
m = 0.015;
g = 9.8;
r = 0.05;
(*计算临界静平衡位置,依此作为初始条件*)
\[Theta]init = \[Theta] /.
NSolve[{Sin[\[Theta]] - \[Mu] Cos[\[Theta]] == 0,
0 < \[Theta] < \[Pi]/2}, \[Theta]][[1]];
sol = NDSolve[{eqn, \[Theta][0] == \[Theta]init +
2 \[Degree], \[Theta]'[0] == 0,
WhenEvent[\[Theta][t] == \[Pi]/2, tend = t;
"StopIntegration"]}, \[Theta], {t, 0, 1000}];
Plot[Evaluate[{r Sin[\[Theta][t]], r Cos[\[Theta][t]]} /.
sol[[1]]], {t, 0, tend}, PlotRange -> {Automatic, {0, 1.1 r}},
PlotTheme -> "Detailed", PlotLegends -> {"x", "y"}]
(*绘制动画*)
movie = Table[
Graphics[{
{Thick,
Line[{{2 r Sin[\[Theta][t]], 0}, {0, 2 r Cos[\[Theta][t]]}}]},
{PointSize[Large], Red,
Point[{r Sin[\[Theta][t]], r Cos[\[Theta][t]]}]}} /. sol[[1]
], PlotRange -> {{0, 2 r}, {0, 2 r}}, ImagePadding -> 10
], {t, 0, tend, tend/50.}];
Export["梯子下滑.gif", movie]
2022年08月27日 19点08分 4
吧务
level 12
代码没抽,解释文字倒是抽了,没办法了上截图吧
2022年08月27日 19点08分 5
WhenEvent确有学到[开心]
2022年08月27日 22点08分
@翌日翌日翌 顺带楼下回复了哈[呵呵]
2022年08月27日 23点08分
哦还有,就您这个问题来看,T是什么[疑问]
2022年08月27日 23点08分
@翌日翌日翌 T是杆内压力,沿杆方向的
2022年08月28日 06点08分
level 9
回楼上。
首先谢谢小吧,很长时间没见到您发帖了[开心]。。
还有我的问题是没有墙面,直接一个竖直的棍子下滑,所以我的初始条件是在theta一点上有一个微扰的,只不过在代码上没有显现。
有两个方向上的牛二,还有一个M=Iβ。
问题不大,我先自己照您的改改再说[太开心]
2022年08月27日 22点08分 6
所以说我算出来的结果的定义域是直到末端从桌子上抬起来就结束
2022年08月27日 22点08分
吧务
level 12
啊不好意思理解错题目了,如果没有竖直墙面的话方程里相应的项都需要去掉
但是静摩擦的问题是一样的,起初底端依然是静摩擦状态,直到倾倒到一定程度后才会变为动摩擦,所以在方程里需要用分段处理下。而且这个静摩擦动摩擦的分界点比有竖直墙面时难算不少,得花点时间推一下了
2022年08月28日 06点08分 7
这道题手算我倒是会的,就是电脑模拟不知道可不可以,我就开贴的时候试了一下拉[哈哈]
2022年08月28日 23点08分
吧务
level 15
……你顶楼的两段代码不是一样的吗?然后,方程错了。我物理比较渣,所以纯从数值解的角度来分析。首先fn[t]可以轻易约掉。然后,我们利用方程
θ[t] == ArcCos[y[t]/r]
约掉y[t](注意别约θ[t],那样子导出的方程难以分析) 即可得到仅含θ的二阶非线性常微分方程的初值问题:
solth = NDSolveValue[{(-60 Cos[θ[t]] +
600 Sin[θ[t]]) (-(1/20) Cos[θ[t]] θ'[t]^2 -
1/20 Sin[θ[t]] θ''[t]) == -588 Cos[θ[t]] +
5880 Sin[θ[t]] - 5 θ''[t], θ'[0] == 0, θ[0] ==
0}, θ, {t, 0, 1000}]
然而这个方程的解是负的(由θ[t] == ArcCos[y[t]/r]可知θ[t]必须在0到Pi之间):
NDSolve在这种情况下不会漏解。方程有问题。
2022年09月02日 16点09分 8
或许是微扰的方向给错了其实[委屈]
2022年09月03日 00点09分
emm暂时没仔细看,我先自己消元一下。本来想省点事的,不过没意料到其实mma的dsolve最好不要交给他solve能干的事情,是这样吗[疑问]
2022年09月03日 00点09分
@翌日翌日翌 ��,您的代码里我没看到微扰,理论上来讲这玩在初始条件都给0的时候是稳定的
2022年09月03日 00点09分
@翌日翌日翌 "其实mma的dsolve最好不要交给他solve能干的事情" 是,DSolve和NDSolve都是如此。微分代数方程一般都比纯的微分方程难解。(当然不排除有例外,虽然我一时想不起来。)
2022年09月03日 02点09分
吧务
level 15
总感觉你下一句话会是“我消元消出来的方程不是你这个”所以提前补段消元的代码:
mid = List @@
Eliminate[{x''[t]*m == -fn[t]*μ,
y''[t]*m == m g - fn[t],
θ[t] == ArcCos[y[t]/r], (1/2 1/12 m θ''[t] (2 r)^2)/r ==
fn[t] Sin[θ[t]] - μ fn[t] Cos[θ[t]]} //
Rationalize[#, 0] &, {fn[t]}] // Simplify
rule = Solve[mid[[1]], y[t], Reals][[1]]
mid2 = mid /. rule /. D[rule, t, t] // Simplify
bc = {x'[0] == 0, y'[0] == 0, x[0] == 0, y[0] == r, θ'[0] == 0, θ[0] == 0};
NDSolveValue[{mid2[[-1, 1]], bc[[-2 ;;]]}, θ, {t, 0, 1000}]
2022年09月03日 02点09分 9
level 9
一开始的式子确实部分没过脑子,重新严格地定义了一下坐标架,问题不大了,我消个元去
上、右、前为正:
Clear["`*"];
\[Mu] = 0.1;
m = 0.015;
g = 9.8;
r = 0.05;
NDSolve[{Derivative[2][x][t]*m == (-fn[t])*\[Mu], Derivative[2][y][t]*m == (-m)*g + fn[t], \[Theta][t] == ArcCos[y[t]/r],
((1/2)*(1/12)*m*Derivative[2][\[Theta]][t]*(2*r)^2)/r == fn[t]*Sin[\[Theta][t]] - \[Mu]*fn[t]*Cos[\[Theta][t]], Derivative[1][x][0] == 0,
Derivative[1][y][0] == 0, Derivative[1][\[Theta]][0] == 0, x[0] == 0, y[0] == r, \[Theta][0] == 0}, {x[t], y[t], \[Theta][t], fn[t]},
{t, 0, 1000}]
2022年09月03日 05点09分 10
吧务
level 12
不是,怎么列出来的方程还是这样的,我十分怀疑我之前的回复你看了没有……
“起初底端依然是静摩擦状态,直到倾倒到一定程度后才会变为动摩擦,所以在方程里需要用分段处理下
初始{x[0] == 0, y[0] == r}的时刻方程里就不应该有\[Mu]出现
2022年09月03日 11点09分 11
这,,,就是吧主突然拿我一楼的方程举例,我自然先搞一下一楼的[呵呵]你那个我当然有所受益
2022年09月03日 15点09分
明天早上我脑子清楚的时候更一下,抱歉
2022年09月03日 15点09分
@翌日翌日翌 哈?我是看你好像一直没正面承认顶楼方程有问题才去分析顶楼的啊?
2022年09月03日 15点09分
@xzcyr src="http://tb2.bdstatic.com/tb/editor/images/face/i_f09.png?t=20140803" >回复 #(reply,tb.1.97f870a7.VX3kQRtEwUdCtKkQtAWhQg,xzcyr) :可我也没说您的化简有问题呀[咦]
2022年09月03日 23点09分
吧务
level 12
搜到一篇文章,供楼主参考吧
均质立杆在水平面上自由倒下过程的力学分析
2022年09月03日 12点09分 12
@无影东瓜 谢您,我看眼去
2022年09月03日 15点09分
level 9
害,脑子又不幸地卡壳了,见怪[泪]
2022年09月03日 15点09分 13
level 9
这样,我待会好好看看这道题,另开一贴总结下我的失误
2022年09月03日 20点09分 14
1