Skip to main content
Commonmark migration
Source Link

By trial and error, integration as far as t == 1.3773405394574811 can be achieved with

s = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[x1''[t] - x2''[t]] < .1 && Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[x1''[t] - x2''[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 2 10^-4]; Show[Plot[Fs12[t], {t, 0, 1.377}, PlotStyle -> Directive[Black, Dashed]], Plot[Evaluate@Through[s[t]], {t, 0, 1.377}, PlotRange -> All], ImageSize -> Large, AxesLabel -> {t, "x1, x2, Ff12, Fs12"}, LabelStyle -> Directive[Bold, Black, Medium]] 

enter image description here

although with four messages.

NDSolveValue::pdord: Some of the functions have zero differential order, so the equations will be solved as a system of differential-algebraic equations.

 

NDSolve::tddisc: NDSolve cannot do a discontinuity replacement for event surfaces that depend only on time. (twice)

 

NDSolveValue::reinitfail: Unable to reinitialize the system at t = 1.3773405394574811` within specified tolerances.

Comparison between the Ff12 curve (green) and Fs12 curve (black dashed) suggests that Ff12 can be approximated by

Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]] 

which allows integration to proceed as far as t == 10.

ss = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 10^-3] 

A plot over the same domain as in the first plot suggests that this approximation is fairly good.

enter image description here

The plot over the entire domain is

enter image description here

This approach is by no means perfect but nonetheless produces reasonably credible results.

By trial and error, integration as far as t == 1.3773405394574811 can be achieved with

s = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[x1''[t] - x2''[t]] < .1 && Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[x1''[t] - x2''[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 2 10^-4]; Show[Plot[Fs12[t], {t, 0, 1.377}, PlotStyle -> Directive[Black, Dashed]], Plot[Evaluate@Through[s[t]], {t, 0, 1.377}, PlotRange -> All], ImageSize -> Large, AxesLabel -> {t, "x1, x2, Ff12, Fs12"}, LabelStyle -> Directive[Bold, Black, Medium]] 

enter image description here

although with four messages.

NDSolveValue::pdord: Some of the functions have zero differential order, so the equations will be solved as a system of differential-algebraic equations.

 

NDSolve::tddisc: NDSolve cannot do a discontinuity replacement for event surfaces that depend only on time. (twice)

 

NDSolveValue::reinitfail: Unable to reinitialize the system at t = 1.3773405394574811` within specified tolerances.

Comparison between the Ff12 curve (green) and Fs12 curve (black dashed) suggests that Ff12 can be approximated by

Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]] 

which allows integration to proceed as far as t == 10.

ss = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 10^-3] 

A plot over the same domain as in the first plot suggests that this approximation is fairly good.

enter image description here

The plot over the entire domain is

enter image description here

This approach is by no means perfect but nonetheless produces reasonably credible results.

By trial and error, integration as far as t == 1.3773405394574811 can be achieved with

s = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[x1''[t] - x2''[t]] < .1 && Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[x1''[t] - x2''[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 2 10^-4]; Show[Plot[Fs12[t], {t, 0, 1.377}, PlotStyle -> Directive[Black, Dashed]], Plot[Evaluate@Through[s[t]], {t, 0, 1.377}, PlotRange -> All], ImageSize -> Large, AxesLabel -> {t, "x1, x2, Ff12, Fs12"}, LabelStyle -> Directive[Bold, Black, Medium]] 

enter image description here

although with four messages.

NDSolveValue::pdord: Some of the functions have zero differential order, so the equations will be solved as a system of differential-algebraic equations.

NDSolve::tddisc: NDSolve cannot do a discontinuity replacement for event surfaces that depend only on time. (twice)

NDSolveValue::reinitfail: Unable to reinitialize the system at t = 1.3773405394574811` within specified tolerances.

Comparison between the Ff12 curve (green) and Fs12 curve (black dashed) suggests that Ff12 can be approximated by

Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]] 

which allows integration to proceed as far as t == 10.

ss = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 10^-3] 

A plot over the same domain as in the first plot suggests that this approximation is fairly good.

enter image description here

The plot over the entire domain is

enter image description here

This approach is by no means perfect but nonetheless produces reasonably credible results.

Source Link
bbgodfrey
  • 63k
  • 18
  • 94
  • 169

By trial and error, integration as far as t == 1.3773405394574811 can be achieved with

s = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[x1''[t] - x2''[t]] < .1 && Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[x1''[t] - x2''[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 2 10^-4]; Show[Plot[Fs12[t], {t, 0, 1.377}, PlotStyle -> Directive[Black, Dashed]], Plot[Evaluate@Through[s[t]], {t, 0, 1.377}, PlotRange -> All], ImageSize -> Large, AxesLabel -> {t, "x1, x2, Ff12, Fs12"}, LabelStyle -> Directive[Bold, Black, Medium]] 

enter image description here

although with four messages.

NDSolveValue::pdord: Some of the functions have zero differential order, so the equations will be solved as a system of differential-algebraic equations.

NDSolve::tddisc: NDSolve cannot do a discontinuity replacement for event surfaces that depend only on time. (twice)

NDSolveValue::reinitfail: Unable to reinitialize the system at t = 1.3773405394574811` within specified tolerances.

Comparison between the Ff12 curve (green) and Fs12 curve (black dashed) suggests that Ff12 can be approximated by

Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]] 

which allows integration to proceed as far as t == 10.

ss = NDSolveValue[{m1*x1''[t] == F1[t] - Ff12[t], x1'[0] == 0, x1[0] == 0, m2*x2''[t] == F2[t] + Ff12[t], x2'[0] == 0, x2[0] == 0, Ff12[t] == If[Abs[Fs12[t]] < mus*Fn12, Fs12[t], muk*Fn12*Sign[Fs12[t]]]}, {x1, x2, Ff12}, {t, 10}, MaxStepSize -> 10^-3] 

A plot over the same domain as in the first plot suggests that this approximation is fairly good.

enter image description here

The plot over the entire domain is

enter image description here

This approach is by no means perfect but nonetheless produces reasonably credible results.