Cocok untuk konstanta
Saya memiliki persamaan diferensial ini: $$m\ddot x=-kx^\frac{3}{2}-c\dot x-mg$$ di mana saya ingin cocok $k$, $c$. ($g$ adalah 9,81 dan $m$ adalah 0,3).
Ini adalah model untuk tumbukan, maka dalam data yang telah kita kumpulkan dalam percobaan kita, yang kita ketahui adalah x'[0]==-3
, di mana -3 adalah kecepatan tumbukan sebelum tumbukan, dan di x'[T]==2
mana 2 adalah kecepatan pantul setelah tumbukan dan T
waktu kontak, yang tidak dapat kita ukur secara eksperimental karena sangat pendek, tetapi kita tahu bahwa itu lebih pendek dari$10^{-3}s$.
m = 1;
k = 1;
c = 1;
g = 9.81;
sol = NDSolve[
{m x''[t] == -k x[t]^(3/2) - c x'[t] - m g, x'[0] == -3, x[0] == 0.024965,
x'[0.00001] == 2},
x[t], {t, 0, 1}]
Ini datanya.
Data untuk x terhadap t:
{{0.,23.6724},{0.0333333,23.4316},{0.0666667,23.2125},
{0.1,22.9737},{0.133333,22.7191},{0.166667,22.4796},
{0.2,22.2635},{0.233333,22.0175},{0.266667,21.7774},
{0.3,21.5224},{0.333333,21.3139},{0.366667,21.064},
{0.4,20.8183},{0.433333,20.5699},{0.466667,20.3129},
{0.5,20.0644},{0.533333,19.8333},{0.566656,19.5862},
{0.599989,19.3391},{0.633322,19.094},{0.666656,18.8495},
{0.699989,18.5973},{0.733322,18.3451},{0.766656,18.09},
{0.799989,17.8299},{0.833322,17.581},{0.866656,17.3204},
{0.899989,17.0659},{0.933322,16.817},{0.966656,16.5627},
{0.999989,16.3046},{1.03332,16.0535},{1.06666,15.7956},
{1.09999,15.5383},{1.13332,15.2806},{1.16666,15.0236},
{1.19999,14.7635},{1.23332,14.5015},{1.26666,14.2514},
{1.29999,13.9673},{1.33332,13.6998},{1.36666,13.4402},
{1.39999,13.1574},{1.43332,12.8848},{1.46666,12.6188},
{1.49999,12.3376},{1.53332,12.0596},{1.56666,11.7867},
{1.59999,11.5302},{1.63332,11.2418},{1.66664,10.9721},
{1.69998,10.7005},{1.73331,10.399},{1.76664,10.1111},
{1.79998,9.83385},{1.83331,9.56173},{1.86664,9.25114},
{1.89998,8.98928},{1.93331,8.70041},{1.96664,8.41822},
{1.99998,8.13319},{2.03331,7.84509},{2.06664,7.53343},
{2.09998,7.25237},{2.13331,6.95413},{2.16664,6.63875},
{2.19998,6.34642},{2.23331,6.06828},{2.26664,5.77579},
{2.29998,5.4747},{2.33331,5.15976},{2.36664,4.84916},
{2.39998,4.5256},{2.43331,4.22336},{2.46664,3.9177},
{2.49998,3.58284},{2.53331,3.2908},{2.56664,2.97411},
{2.59998,2.6861},{2.63331,2.4965},{2.66664,2.73492},
{2.69998,2.99366},{2.73331,3.29602},{2.76663,3.58096},
{2.79997,3.83507},{2.8333,4.1179},{2.86663,4.39381},
{2.89997,4.66047},{2.9333,4.95059},{2.96663,5.23038},
{2.99997,5.48554},{3.0333,5.77507},{3.06663,6.03556},
{3.09997,6.30288},{3.1333,6.56806},{3.16663,6.82612},
{3.19997,7.11681},{3.2333,7.37396},{3.26663,7.63213},
{3.29997,7.89755},{3.3333,8.15167},{3.36663,8.4428},
{3.39997,8.6969},{3.4333,8.95516},{3.46663,9.22325},
{3.49997,9.47407},{3.5333,9.73972},{3.56663,9.98549},
{3.59997,10.2457},{3.6333,10.4917},{3.66663,10.7494},
{3.69997,10.9985},{3.7333,11.2493},{3.76663,11.5069},
{3.79997,11.7599},{3.8333,12.0148},{3.86663,12.2645},
{3.89996,12.5198},{3.93329,12.7714},{3.96662,13.0222},
{3.99996,13.2753},{4.03329,13.4973},{4.06662,13.7457},
{4.09996,13.9856},{4.13329,14.2364},{4.16662,14.4828},
{4.19996,14.7348},{4.23329,14.9753},{4.26662,15.211},
{4.29996,15.4466},{4.33329,15.6922},{4.36662,15.9198},
{4.39996,16.1627},{4.43329,16.4001},{4.46662,16.6353},
{4.49996,16.8629},{4.53329,17.1011},{4.56662,17.3418},
{4.59996,17.5674},{4.63329,17.81},{4.66662,18.0313},
{4.69996,18.2533},{4.73329,18.4823},{4.76662,18.7227},
{4.79996,18.9488},{4.83329,19.1835},{4.86662,19.4019},
{4.89996,19.6282},{4.93329,19.86},{4.96662,20.084},
{4.99994,20.3083},{5.03328,20.5353},{5.06661,20.7602},
{5.09994,20.9745},{5.13328,21.1844},{5.16661,21.4296},
{5.19994,21.6461},{5.23328,21.8579},{5.26661,22.0885},
{5.29994,22.3081},{5.33328,22.5211}}
Perhatikan bahwa x dalam cm.
Sebagian besar data tidak berguna karena hanya data untuk bagian yang jatuh dan terpental, bukan tabrakan.
Dalam kode, saya hanya melakukan NDSolve
dan mengganti nilai acak untuk$k$, $c$, dan juga mengganti beberapa kondisi awal seperti x[0]==0.024965
, x'[0]==-3
dan x[T]==2
.
Dengan ini, mungkinkah kita menyesuaikan konstanta?
Terima kasih.
Jawaban
Sebenarnya kita bisa menggunakan data untuk mengoptimalkan parameter sebagai berikut
data = {{0., 23.6724}, {0.0333333, 23.4316}, {0.0666667, 23.2125}, {0.1, 22.9737}, {0.133333, 22.7191}, {0.166667, 22.4796}, {0.2, 22.2635}, {0.233333, 22.0175}, {0.266667, 21.7774}, {0.3, 21.5224}, {0.333333, 21.3139}, {0.366667, 21.064}, {0.4, 20.8183}, {0.433333, 20.5699}, {0.466667, 20.3129}, {0.5, 20.0644}, {0.533333, 19.8333}, {0.566656, 19.5862}, {0.599989, 19.3391}, {0.633322, 19.094}, {0.666656, 18.8495}, {0.699989, 18.5973}, {0.733322, 18.3451}, {0.766656, 18.09}, {0.799989, 17.8299}, {0.833322, 17.581}, {0.866656, 17.3204}, {0.899989, 17.0659}, {0.933322, 16.817}, {0.966656, 16.5627}, {0.999989, 16.3046}, {1.03332, 16.0535}, {1.06666, 15.7956}, {1.09999, 15.5383}, {1.13332, 15.2806}, {1.16666, 15.0236}, {1.19999, 14.7635}, {1.23332, 14.5015}, {1.26666, 14.2514}, {1.29999, 13.9673}, {1.33332, 13.6998}, {1.36666, 13.4402}, {1.39999, 13.1574}, {1.43332, 12.8848}, {1.46666, 12.6188}, {1.49999, 12.3376}, {1.53332, 12.0596}, {1.56666, 11.7867}, {1.59999, 11.5302}, {1.63332, 11.2418}, {1.66664, 10.9721}, {1.69998, 10.7005}, {1.73331, 10.399}, {1.76664, 10.1111}, {1.79998, 9.83385}, {1.83331, 9.56173}, {1.86664, 9.25114}, {1.89998, 8.98928}, {1.93331, 8.70041}, {1.96664, 8.41822}, {1.99998, 8.13319}, {2.03331, 7.84509}, {2.06664, 7.53343}, {2.09998, 7.25237}, {2.13331, 6.95413}, {2.16664, 6.63875}, {2.19998, 6.34642}, {2.23331, 6.06828}, {2.26664, 5.77579}, {2.29998, 5.4747}, {2.33331, 5.15976}, {2.36664, 4.84916}, {2.39998, 4.5256}, {2.43331, 4.22336}, {2.46664, 3.9177}, {2.49998, 3.58284}, {2.53331, 3.2908}, {2.56664, 2.97411}, {2.59998, 2.6861}, {2.63331, 2.4965}, {2.66664, 2.73492}, {2.69998, 2.99366}, {2.73331, 3.29602}, {2.76663, 3.58096}, {2.79997, 3.83507}, {2.8333, 4.1179}, {2.86663, 4.39381}, {2.89997, 4.66047}, {2.9333, 4.95059}, {2.96663, 5.23038}, {2.99997, 5.48554}, {3.0333, 5.77507}, {3.06663, 6.03556}, {3.09997, 6.30288}, {3.1333, 6.56806}, {3.16663, 6.82612}, {3.19997, 7.11681}, {3.2333, 7.37396}, {3.26663, 7.63213}, {3.29997, 7.89755}, {3.3333, 8.15167}, {3.36663, 8.4428}, {3.39997, 8.6969}, {3.4333, 8.95516}, {3.46663, 9.22325}, {3.49997, 9.47407}, {3.5333, 9.73972}, {3.56663, 9.98549}, {3.59997, 10.2457}, {3.6333, 10.4917}, {3.66663, 10.7494}, {3.69997, 10.9985}, {3.7333, 11.2493}, {3.76663, 11.5069}, {3.79997, 11.7599}, {3.8333, 12.0148}, {3.86663, 12.2645}, {3.89996, 12.5198}, {3.93329, 12.7714}, {3.96662, 13.0222}, {3.99996, 13.2753}, {4.03329, 13.4973}, {4.06662, 13.7457}, {4.09996, 13.9856}, {4.13329, 14.2364}, {4.16662, 14.4828}, {4.19996, 14.7348}, {4.23329, 14.9753}, {4.26662, 15.211}, {4.29996, 15.4466}, {4.33329, 15.6922}, {4.36662, 15.9198}, {4.39996, 16.1627}, {4.43329, 16.4001}, {4.46662, 16.6353}, {4.49996, 16.8629}, {4.53329, 17.1011}, {4.56662, 17.3418}, {4.59996, 17.5674}, {4.63329, 17.81}, {4.66662, 18.0313}, {4.69996, 18.2533}, {4.73329, 18.4823}, {4.76662, 18.7227}, {4.79996, 18.9488}, {4.83329, 19.1835}, {4.86662, 19.4019}, {4.89996, 19.6282}, {4.93329, 19.86}, {4.96662, 20.084}, {4.99994, 20.3083}, {5.03328, 20.5353}, {5.06661, 20.7602}, {5.09994, 20.9745}, {5.13328, 21.1844}, {5.16661, 21.4296}, {5.19994, 21.6461}, {5.23328, 21.8579}, {5.26661, 22.0885}, {5.29994, 22.3081}, {5.33328, 22.5211}};
Sekarang kita bisa menggunakan fungsi interpolasi f = Interpolation[data, InterpolationOrder -> 4]
untuk mengetahui ketergantungan akselerasi on x
dan x'
as
{ParametricPlot[{f[t], f''[t]}, {t, 2.55, 2.7}, PlotRange -> All,
AspectRatio -> 1/2, AxesLabel -> {"x", "x''"}],
ParametricPlot[{f'[t], f''[t]}, {t, 2.3, 2.8}, PlotRange -> All,
AspectRatio -> 1/2, AxesLabel -> {"x'", "x''"}]}

Ini terlihat seperti deformasi plastik elastis yang khas, dan oleh karena itu model Hertz tidak dapat diterapkan sama sekali. Sekarang kita dapat mengajukan gaya sebelum dan sesudah tumbukan dalam suatu bentuk$$F/m=-k_1 x+k_2 x^2 + k_3 \dot {x}+k_4 \dot {x}^2-g $$Akhirnya, dengan menggunakan f[t]
kita dapat mengoptimalkan model di beberapa titik, misalnya,
g=981.; param = Table[{t,
NMinimize[{(f''[t] + g - k1 f[t] + k2 f[t]^2 + k3 f'[t] +
k4 f'[t]^2)^2, k1 > 0 && k2 > 0 && k3 > 0 && k4 > 0}, {k1, k2,
k3, k4}]}, {t, 2.51, 2.7, .01}]
Dari tabel ini kita melihat bahwa parameter model berubah drastis setelah tumbukan pada t=2.63
{ListLinePlot[
Table[{param[[i, 1]], k1 /. param[[i, 2, 2]]}, {i, Length[param]}],
AxesLabel -> {"t", "k1"}],
ListLinePlot[
Table[{param[[i, 1]], k2 /. param[[i, 2, 2]]}, {i, Length[param]}],
AxesLabel -> {"t", "k2"}],
ListLinePlot[
Table[{param[[i, 1]], k3 /. param[[i, 2, 2]]}, {i, Length[param]}],
AxesLabel -> {"t", "k3"}],
ListLinePlot[
Table[{param[[i, 1]], k4 /. param[[i, 2, 2]]}, {i, Length[param]}],
AxesLabel -> {"t", "k4"}, PlotRange -> All]}

Saya tahu saya agak terlambat, tetapi saya ingin menunjukkan cara menyelesaikan masalah fisik secara langsung, berdasarkan pengukuran tx
(dalam satuan s,m
!)
tx = Map[{#[[1]], #[[2]]/100} &,
{{0., 23.6724}, {0.0333333,23.4316}, {0.0666667, 23.2125}, {0.1, 22.9737}, {0.133333, 22.7191}, {0.166667, 22.4796}, {0.2, 22.2635}, {0.233333,22.0175}, {0.266667, 21.7774}, {0.3, 21.5224}, {0.333333,21.3139}, {0.366667, 21.064}, {0.4, 20.8183}, {0.433333,20.5699}, {0.466667, 20.3129}, {0.5, 20.0644}, {0.533333,19.8333}, {0.566656, 19.5862}, {0.599989, 19.3391}, {0.633322,19.094}, {0.666656, 18.8495}, {0.699989, 18.5973}, {0.733322,18.3451}, {0.766656, 18.09}, {0.799989, 17.8299}, {0.833322,17.581}, {0.866656, 17.3204}, {0.899989, 17.0659}, {0.933322,16.817}, {0.966656, 16.5627}, {0.999989, 16.3046}, {1.03332,16.0535}, {1.06666, 15.7956}, {1.09999, 15.5383}, {1.13332,15.2806}, {1.16666, 15.0236}, {1.19999, 14.7635}, {1.23332,14.5015}, {1.26666, 14.2514}, {1.29999, 13.9673}, {1.33332,13.6998}, {1.36666, 13.4402}, {1.39999, 13.1574}, {1.43332,12.8848}, {1.46666, 12.6188}, {1.49999, 12.3376}, {1.53332,12.0596}, {1.56666, 11.7867}, {1.59999, 11.5302}, {1.63332,11.2418}, {1.66664, 10.9721}, {1.69998, 10.7005}, {1.73331,10.399}, {1.76664, 10.1111}, {1.79998, 9.83385}, {1.83331,9.56173}, {1.86664, 9.25114}, {1.89998, 8.98928}, {1.93331,8.70041}, {1.96664, 8.41822}, {1.99998, 8.13319}, {2.03331,7.84509}, {2.06664, 7.53343}, {2.09998, 7.25237}, {2.13331,6.95413}, {2.16664, 6.63875}, {2.19998, 6.34642}, {2.23331,6.06828}, {2.26664, 5.77579}, {2.29998, 5.4747}, {2.33331, 5.15976}, {2.36664, 4.84916}, {2.39998, 4.5256}, {2.43331,4.22336}, {2.46664, 3.9177}, {2.49998, 3.58284}, {2.53331,3.2908}, {2.56664, 2.97411}, {2.59998, 2.6861}, {2.63331, 2.4965}, {2.66664, 2.73492}, {2.69998, 2.99366}, {2.73331, 3.29602}, {2.76663, 3.58096}, {2.79997, 3.83507}, {2.8333,4.1179}, {2.86663, 4.39381}, {2.89997, 4.66047}, {2.9333, 4.95059}, {2.96663, 5.23038}, {2.99997, 5.48554}, {3.0333, 5.77507}, {3.06663, 6.03556}, {3.09997, 6.30288}, {3.1333,6.56806}, {3.16663, 6.82612}, {3.19997, 7.11681}, {3.2333,7.37396}, {3.26663, 7.63213}, {3.29997, 7.89755}, {3.3333, 8.15167}, {3.36663, 8.4428}, {3.39997, 8.6969}, {3.4333,8.95516}, {3.46663, 9.22325}, {3.49997, 9.47407}, {3.5333,9.73972}, {3.56663, 9.98549}, {3.59997, 10.2457}, {3.6333,10.4917}, {3.66663, 10.7494}, {3.69997, 10.9985}, {3.7333,11.2493}, {3.76663, 11.5069}, {3.79997, 11.7599}, {3.8333,12.0148}, {3.86663, 12.2645}, {3.89996, 12.5198}, {3.93329,12.7714}, {3.96662, 13.0222}, {3.99996, 13.2753}, {4.03329,13.4973}, {4.06662, 13.7457}, {4.09996, 13.9856}, {4.13329,14.2364}, {4.16662, 14.4828}, {4.19996, 14.7348}, {4.23329,14.9753}, {4.26662, 15.211}, {4.29996, 15.4466}, {4.33329,15.6922}, {4.36662, 15.9198}, {4.39996, 16.1627}, {4.43329,16.4001}, {4.46662, 16.6353}, {4.49996, 16.8629}, {4.53329,17.1011}, {4.56662, 17.3418}, {4.59996, 17.5674}, {4.63329,17.81}, {4.66662, 18.0313}, {4.69996, 18.2533}, {4.73329,18.4823}, {4.76662, 18.7227}, {4.79996, 18.9488}, {4.83329,19.1835}, {4.86662, 19.4019}, {4.89996, 19.6282}, {4.93329,19.86}, {4.96662, 20.084}, {4.99994, 20.3083}, {5.03328,20.5353}, {5.06661, 20.7602}, {5.09994, 20.9745}, {5.13328, 21.1844}, {5.16661, 21.4296}, {5.19994, 21.6461}, {5.23328,21.8579}, {5.26661, 22.0885}, {5.29994, 22.3081}, {5.33328,22.5211}}];
Hasil pengukuran menunjukkan, di mana / kapan tumbukan terjadi
{tc, xc} = MinimalBy[tx, Last][[1]];
(*{2.63331, 0.024965}*)
Tabrakan (yang tidak diukur!) Dijelaskan oleh koefisien restitusi x'[SuperPlus[tc]]==-e x'[ SuperMinus[tc]]
Sistem yang dimodifikasi (hanya menjelaskan keadaan sebelum / sesudah tumbukan) x''[t] == -F - km x[t] - cm*x'[t]
dapat diselesaikan sedikit demi sedikit
(*before collision*)
X0 = ParametricNDSolveValue[{ x''[t] == -F - km x[t] - cm*x'[t] ,
x'[tc] == v0 , x[tc] == xc}, x, {t, tx[[1, 1]], tc}, { v0, F, km, cm , e }]
(*after collision*)
X1 = ParametricNDSolveValue[{ x''[t] == -F - km x[t] - cm*x'[t] ,
x'[tc] == -v0 e, x[tc] == xc}, x, {t, tc, tx[[-1, 1]]}, { v0, F, km, cm, e }]
identifikasi sistem
mod=NonlinearModelFit[tx, {Which[t <= tc, X0[v0, F, km, cm , e ][t],t > tc, X1[v0, F, km, cm , e ][t]], 0 < e < 1, F > 0, km > 0,cm > 0},
{v0, F, km, cm , e}, t, Method -> "NMinimize"]
acara
Show[{ListPlot[tx, PlotStyle -> Red],Plot[mod[t], {t, 0, tx[[-1, 1]]}]}]

Kesepakatan yang sangat baik dengan pengukuran dan memungkinkan penggunaan model yang berbeda.
Jawaban ini tidak memperhitungkan semua detail tentang unit dan proses model yang diberikan oleh OP.
- Oleh karena itu, ini harus dilihat sebagai jawaban "pada prinsipnya".
Tampaknya:
Diperlukan deskripsi lebih lanjut tentang proses dan model
Berbagai modifikasi model dan pengkodeannya harus dilakukan
Silakan lihat komentar untuk pertanyaan dan jawaban ini.
Berikut data hasil pengukurannya:
lsData = {{0., 23.6724}, {0.0333333, 23.4316}, {0.0666667, 23.2125}, {0.1, 22.9737}, {0.133333, 22.7191}, {0.166667, 22.4796}, {0.2, 22.2635}, {0.233333, 22.0175}, {0.266667, 21.7774}, {0.3, 21.5224}, {0.333333, 21.3139}, {0.366667, 21.064}, {0.4, 20.8183}, {0.433333, 20.5699}, {0.466667, 20.3129}, {0.5, 20.0644}, {0.533333, 19.8333}, {0.566656, 19.5862}, {0.599989, 19.3391}, {0.633322, 19.094}, {0.666656, 18.8495}, {0.699989, 18.5973}, {0.733322, 18.3451}, {0.766656, 18.09}, {0.799989, 17.8299}, {0.833322, 17.581}, {0.866656, 17.3204}, {0.899989, 17.0659}, {0.933322, 16.817}, {0.966656, 16.5627}, {0.999989, 16.3046}, {1.03332, 16.0535}, {1.06666, 15.7956}, {1.09999, 15.5383}, {1.13332, 15.2806}, {1.16666, 15.0236}, {1.19999, 14.7635}, {1.23332, 14.5015}, {1.26666, 14.2514}, {1.29999, 13.9673}, {1.33332, 13.6998}, {1.36666, 13.4402}, {1.39999, 13.1574}, {1.43332, 12.8848}, {1.46666, 12.6188}, {1.49999, 12.3376}, {1.53332, 12.0596}, {1.56666, 11.7867}, {1.59999, 11.5302}, {1.63332, 11.2418}, {1.66664, 10.9721}, {1.69998, 10.7005}, {1.73331, 10.399}, {1.76664, 10.1111}, {1.79998, 9.83385}, {1.83331, 9.56173}, {1.86664, 9.25114}, {1.89998, 8.98928}, {1.93331, 8.70041}, {1.96664, 8.41822}, {1.99998, 8.13319}, {2.03331, 7.84509}, {2.06664, 7.53343}, {2.09998, 7.25237}, {2.13331, 6.95413}, {2.16664, 6.63875}, {2.19998, 6.34642}, {2.23331, 6.06828}, {2.26664, 5.77579}, {2.29998, 5.4747}, {2.33331, 5.15976}, {2.36664, 4.84916}, {2.39998, 4.5256}, {2.43331, 4.22336}, {2.46664, 3.9177}, {2.49998, 3.58284}, {2.53331, 3.2908}, {2.56664, 2.97411}, {2.59998, 2.6861}, {2.63331, 2.4965}, {2.66664, 2.73492}, {2.69998, 2.99366}, {2.73331, 3.29602}, {2.76663, 3.58096}, {2.79997, 3.83507}, {2.8333, 4.1179}, {2.86663, 4.39381}, {2.89997, 4.66047}, {2.9333, 4.95059}, {2.96663, 5.23038}, {2.99997, 5.48554}, {3.0333, 5.77507}, {3.06663, 6.03556}, {3.09997, 6.30288}, {3.1333, 6.56806}, {3.16663, 6.82612}, {3.19997, 7.11681}, {3.2333, 7.37396}, {3.26663, 7.63213}, {3.29997, 7.89755}, {3.3333, 8.15167}, {3.36663, 8.4428}, {3.39997, 8.6969}, {3.4333, 8.95516}, {3.46663, 9.22325}, {3.49997, 9.47407}, {3.5333, 9.73972}, {3.56663, 9.98549}, {3.59997, 10.2457}, {3.6333, 10.4917}, {3.66663, 10.7494}, {3.69997, 10.9985}, {3.7333, 11.2493}, {3.76663, 11.5069}, {3.79997, 11.7599}, {3.8333, 12.0148}, {3.86663, 12.2645}, {3.89996, 12.5198}, {3.93329, 12.7714}, {3.96662, 13.0222}, {3.99996, 13.2753}, {4.03329, 13.4973}, {4.06662, 13.7457}, {4.09996, 13.9856}, {4.13329, 14.2364}, {4.16662, 14.4828}, {4.19996, 14.7348}, {4.23329, 14.9753}, {4.26662, 15.211}, {4.29996, 15.4466}, {4.33329, 15.6922}, {4.36662, 15.9198}, {4.39996, 16.1627}, {4.43329, 16.4001}, {4.46662, 16.6353}, {4.49996, 16.8629}, {4.53329, 17.1011}, {4.56662, 17.3418}, {4.59996, 17.5674}, {4.63329, 17.81}, {4.66662, 18.0313}, {4.69996, 18.2533}, {4.73329, 18.4823}, {4.76662, 18.7227}, {4.79996, 18.9488}, {4.83329, 19.1835}, {4.86662, 19.4019}, {4.89996, 19.6282}, {4.93329, 19.86}, {4.96662, 20.084}, {4.99994, 20.3083}, {5.03328, 20.5353}, {5.06661, 20.7602}, {5.09994, 20.9745}, {5.13328, 21.1844}, {5.16661, 21.4296}, {5.19994, 21.6461}, {5.23328, 21.8579}, {5.26661, 22.0885}, {5.29994, 22.3081}, {5.33328, 22.5211}};
Di bawah pemrograman model ODE diubah dalam beberapa cara:
Menggunakan
RealAbs
untukx[t]
Menambahkan
WhenEvent
untuk menangani pemantulanMenggunakan nilai x pertama dari data pengukuran untuk membuat kondisi awal
Menggunakan formulasi parametrik untuk kelompok solusi yang diparameterisasi dengan
k
danc
ClearAll[g, m, k, c];
m = 0.3;
g = 9.81;
sol =
ParametricNDSolve[{
m*x''[t] == -k*RealAbs[x[t]]^(3/2) - c*x'[t] - g*m,
WhenEvent[x[t] == 0, x'[t] -> -2/3 x'[t]],
x'[0] == -3,
x[0] == lsData[[1, 2]]
}, x, {t, Min[lsData[[All, 1]]], Max[lsData[[All, 1]]]}, {k, c}]

Ucapan:
-
[...] yang kita tahu adalah bahwa x '[0] == - 3, di mana -3 adalah kecepatan tumbukan sebelum tumbukan, dan x' [T] == 2 di mana 2 adalah kecepatan pantul setelah tumbukan dan T adalah waktu kontak, [...]
WhenEvent[x[t] == 0, x'[t] -> -2/3 x'[t]]
mengatakan bahwa ketika benda menyentuh tanah ia memantul (dengan tanda berlawanan) kecepatan yaitu $2/3$-rds kecepatan sebelum tumbukan. (Itu$2/3$ koefisien berasal dari kecepatan yang dijelaskan dalam pertanyaan.)
Di sini kami mendefinisikan fungsi ParDist
yang mengukur deviasi fit (yang mengambil fungsi parameter sebagai argumen, daftar parameter, data terukur):
Clear[ParDist]
ParDist[x_ParametricFunction, {k_?NumberQ, c_?NumberQ}, tsPath : {{_?NumberQ, _?NumberQ} ..}] :=
Block[{points, tMin, tMax},
points = Map[{#, x[k, c][#]} &, tsPath[[All, 1]]];
Norm[(tsPath[[All, 2]] - Re[points[[All, 2]]])/tsPath[[All, 2]]]
];
Minimalkan fungsi pengukuran ParDist di atas domain yang sesuai untuk parameter:
AbsoluteTiming[
nsol = NMinimize[{ParDist[x /. sol, {k, c}, lsData], -1 <= k <= 0, -2 <= c <= 0}, {k, c}, Method -> "NelderMead", PrecisionGoal -> 3, AccuracyGoal -> 3, MaxIterations -> 100]
]
(* Messages... *)
(*{0.319493, {2.57776, {k -> -0.0223514, c -> -0.0730673}}}*)
(Beberapa eksperimen dapat / harus dilakukan dengan rentang parameter yang berbeda.)
Evaluasi fungsi parametrik dengan parameter yang ditemukan di atas domain data dan plot yang diukur:
Block[{k, c},
{k, c} = {k, c} /. nsol[[2]];
fitData = Table[{t, Re[x[k, c][t] /. sol]}, {t, lsData[[All, 1]]}]
];
ListPlot[{lsData, fitData}, PlotRange -> All, PlotTheme -> "Detailed",PlotLegends -> {"Measured", "Fitted"}]

Prosedur yang sama, tetapi lebih rumit dijelaskan dalam jawaban ini dari "kalibrasi Model dengan data ruang fase" .
Ini adalah perpanjangan untuk jawaban luar biasa dari @Ulrich Neumann
$$m\ddot x=-kx^{\alpha}-c\dot x-mg$$ dari pada
$$m\ddot x=-kx-c\dot x-mg$$
tx = Map[{#[[1]], #[[2]]/100} &, data]
{tc, xc} = MinimalBy[tx, Last][[1]];
X0 = ParametricNDSolveValue[{x''[t] == -F - km Sign[x[t]] Abs[x[t]]^alpha - cm*x'[t], x'[tc] == v0, x[tc] == xc}, x, {t, tx[[1, 1]], tc}, {v0, F, km, cm, alpha, e}]
X1 = ParametricNDSolveValue[{x''[t] == -F - km Sign[x[t]] Abs[x[t]]^alpha - cm*x'[t], x'[tc] == -v0 e, x[tc] == xc}, x, {t, tc, tx[[-1, 1]]}, {v0, F, km, cm, alpha, e}]
mod = NonlinearModelFit[tx, {Which[t <= tc, X0[v0, F, km, cm, alpha, e][t], t > tc, X1[v0, F, km, cm, alpha, e][t]], 0 < e < 1, F > 0, km > 0, cm > 0, 0.5 < alpha < 3}, {v0, F, km, cm, alpha, e}, t, Method -> "NMinimize"]
Show[{ListPlot[tx, PlotStyle -> Red], Plot[mod[t], {t, 0, tx[[-1, 1]]}]}]
Normal[mod]
