Qurak

Friction models

ఉదాహరణ 17 దశలు, ఒకే సెషన్‌లో క్రమంగా నడుస్తాయి. ప్రతి దశా ఇంజిన్‌పై అమలు చేయబడింది, కింది అవుట్‌పుట్ అది ఇచ్చినదే.

దశ 1
m = l = 1.;
beltv[t_] = .1;
spring[x_] = 1000.(l - x);

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 2
sys := {m x''[t] == spring[x[t]] + friction[x'[t]], x[0] == 1, x'[0] == 0};

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 3
viscous[v_] := -30.(v - beltv[t]);
friction[v_] := viscous[v];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 4
{pos1, vel1} = NDSolveValue[sys, {x, x'}, {t, 0, 2}];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 5
GraphicsRow[{Plot[{pos1[t]}, {t, 0, 1}, AxesLabel -> {"t", "x"}, PlotRange -> All], Plot[{vel1[t], beltv[t]}, {t, 0, 1}, AxesLabel -> {"t", "v"}, PlotRange -> All]}, ImageSize -> 500]
అవుట్‌పుట్
-Graphics-
దశ 6
coulomb[v_] := -25.Sign[v - beltv[t]];
friction[v_] := viscous[v] + coulomb[v];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 7
{pos2, vel2} = NDSolveValue[sys, {x, x'}, {t, 0, 20}];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 8
GraphicsRow[{Plot[{pos2[t]}, {t, 0, 1}, AxesLabel -> {"t", "x"}, PlotRange -> All], Plot[{vel2[t], beltv[t]}, {t, 0, 1}, AxesLabel -> {"t", "v"}, PlotRange -> All]}, ImageSize -> 500]
అవుట్‌పుట్
-Graphics-
దశ 9
stribeck[v_] := -.3Sign[v]Exp[-2Abs[v]];
friction[v_] := viscous[v] + coulomb[v] + stribeck[v];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 10
{pos3, vel3} = NDSolveValue[sys, {x, x'}, {t, 0, 20}];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 11
GraphicsRow[{Plot[{pos3[t]}, {t, 0, 1}, AxesLabel -> {"t", "x"}, PlotRange -> All], Plot[{vel3[t], beltv[t]}, {t, 0, 1}, AxesLabel -> {"t", "v"}, PlotRange -> All]}, ImageSize -> 500]
అవుట్‌పుట్
-Graphics-
దశ 12
friction[v_] := viscous[v] + coulomb[v] + stribeck[v];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 13
staticsys := {x''[t] == If[stuck[t] == 1, beltv'[t], spring[x[t]] + friction[x'[t]]], x[0] == 1, x'[0] == 0};

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 14
μ = 100;
stick = WhenEvent[x'[t] == beltv[t], stuck[t] -> Boole[spring[x[t]]^2 < μ^2]];
slip = WhenEvent[spring[x[t]]^2 > μ^2, stuck[t] -> 0];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 15
{pos4, vel4} = NDSolveValue[{staticsys, stick, slip, stuck[0] == 0}, {x, x'}, {t, 0, 8}, DiscreteVariables -> stuck[t]];

అవుట్‌పుట్ లేదు - ఈ దశ తదుపరి దానికి ఏదో సిద్ధం చేస్తుంది.

దశ 16
GraphicsRow[{Plot[{pos4[t]}, {t, 0, 8}, AxesLabel -> {"t", "x"}, PlotRange -> All], Plot[{vel4[t], beltv[t]}, {t, 0, 8}, AxesLabel -> {"t", "v"}, PlotRange -> All]}, ImageSize -> 500]
అవుట్‌పుట్
-Graphics-
దశ 17
Plot[{pos1[t], pos2[t], pos3[t], pos4[t]}, {t, 0, 2}, AxesLabel -> {"t", "x"}, PlotRange -> {0.9, 1.1}, PlotLegends -> {"viscous", "viscous+Coulomb", "viscous+Coulomb+Stribeck", "viscous+Coulomb+Stribeck+static"}, ImageSize -> 300]
అవుట్‌పుట్
-Graphics-

వాడిన ఫంక్షన్లు

సంబంధిత రెసిపీలు

అన్ని రెసిపీలు · ఫంక్షన్ రిఫరెన్స్ · దీన్ని MCP క్లయింట్ నుండి వాడండి