I'm trying to reproduce the results from 1, which solve the equations of an elastic ring (a closed loop elastica) under various loadings. Here is the relevant part:
I need to solve the governing equations in (2), with m0
and p
as unknown parameters for a range of prescribed values of f
. They indicate in the text that they solve these equations using Mathematica with NDSolve
and FindRoot
.
I found the following question helpful as an example: How can I use FindRoot on an expression from NDSolve?, and so I implemented my code in a similar manner. However, I'm trying to use FindRoot
to solve for two parameters, and I'm not sure how to use the results of NDSolve
to get the necessary two equations. Here is my code:
sol[p_?NumericQ, m0_?NumericQ, f_?NumericQ] := \[Theta] /.
First@NDSolve[{
x'[s] == Cos[\[Theta][s]],
y'[s] == Sin[\[Theta][s]],
\[Theta]'[s] == m[s] + 2 \[Pi],
m'[s] == f/2 Cos[\[Theta][s]] - p Sin[\[Theta][s]],
x[0] == y[0] == \[Theta][0] == 0,
m[0] == m0,
x[1/2] == 0,
\[Theta][s] == 0
},
\[Theta], {s, 0, 2 \[Pi]}]
FindRoot[{sol[p, m0, 200][1]}, {p, 0}, {m0, 10}]
It is not working. I'm sure it is wrong for a few reasons: (1) I don't think the conditions: x[1/2]==0
and \[Theta][s] == 0
should be in NDSolve
, (2) I don't think I'm using FindRoot
correctly, and (3) I have no idea what the guess for m0
should be.
Any help would be greatly appreciated.
1 L.N. Virgin et al., "Deformation and vibration of compressed, nested, elastic rings on rigid base", Thin-Walled Structures, 132, 167-175, (2018). Link (Paywall)