1
0
Fork 0
mirror of https://gitlab.rlp.net/mobitar/julia_course.git synced 2024-11-16 13:28:10 +00:00

Done day 3

This commit is contained in:
Mo8it 2022-03-30 03:03:24 +02:00
parent 7ad01da0ea
commit 62c99e26eb

View file

@ -388,8 +388,95 @@ savefig("resources/test_figure_export.pdf")
# ╔═╡ f44cf458-4ec1-4e2b-b839-f3981683a151
md"""
# Data fitting
Using data fitting, you can determine a model that does describe your measurements.
It is best explained using an example!
"""
# ╔═╡ 25362ad6-5b49-4900-8026-c2d54197ba94
md"""
## Example
"""
# ╔═╡ d6c9be8a-1025-449c-86c8-7d92ad240965
# Defining a model.
# Here, we did choose a linear model `f(x) = m * x + c`
@. linear_model(x, p) = p[1] * x + p[2]
# ╔═╡ 9befeddf-24fa-4af8-9b1d-df1a9865a9ff
# Initial guess of the parameters in `p`
# ⚠️ THE TYPE OF THIS VECTOR HAS TO BE FLOAT FOR NOW (because of a bug).
p0 = [1.0, 1.0]
# ╔═╡ e4c81d90-8d06-4c38-9886-252aa7285558
# You have to strip units and remove errors
fit = curve_fit(
linear_model, # First argument is the model
ustrip.(Measurements.value.(df_I_B_with_err.I)), # Measured x values
ustrip.(Measurements.value.(df_I_B_with_err.B)), # Measured y values
p0
)
# ╔═╡ ee858e78-6b69-485f-95d5-d735956e26d1
# Our fit parameters
param = fit.param
# ╔═╡ 51a17b24-b71b-4670-9bc5-de7576d6fc75
# The error of the fit parameters
sigma = stderror(fit)
# ╔═╡ 5957fce3-dcbd-4fc5-83b7-6730b6412dbd
begin
custom_scatter(
df_I_B_with_err, "I", "B";
label="B(I)",
markershape=:diamond,
markersize=3,
)
x = Measurements.value.(ustrip.(LinRange(
minimum(df_I_B_with_err.I),
maximum(df_I_B_with_err.I),
250
)))
plot!(
x, linear_model(x, param),
label="Linear fit",
linewidth=3, # Change line width
)
end
# ╔═╡ 385c3771-757c-49a7-8b8c-916e76524082
md"""
## Automation
Again, you can automate this process!
"""
# ╔═╡ ef6274cf-f1fb-4f86-becf-eeb181ed92fc
function automated_fit(model, df, x_column_name, y_column_name, p0=[1.0, 1.0])
fit = curve_fit(
model,
ustrip.(Measurements.value.(df[!, x_column_name])),
ustrip.(Measurements.value.(df[!, y_column_name])),
p0
)
param = fit.param
sigma = stderror(fit)
return (param, sigma)
end
# ╔═╡ 409a9f5a-138a-491f-9789-520926be9dbd
# Test automation function
param2, sigma2 = automated_fit(
linear_model,
df_I_B_with_err,
"I",
"B",
)
# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
@ -1747,8 +1834,18 @@ version = "0.9.1+5"
# ╠═6ab56f2d-759d-44ac-8427-55f85942615e
# ╟─1d524a9b-84e9-4ffd-b104-331055c78845
# ╠═1e14de84-7d87-4df4-8c88-2307cb2262ba
# ╠═f44cf458-4ec1-4e2b-b839-f3981683a151
# ╟─f44cf458-4ec1-4e2b-b839-f3981683a151
# ╠═c985a351-cbc7-4385-b5f7-b709eee47092
# ╟─25362ad6-5b49-4900-8026-c2d54197ba94
# ╠═d6c9be8a-1025-449c-86c8-7d92ad240965
# ╠═9befeddf-24fa-4af8-9b1d-df1a9865a9ff
# ╠═e4c81d90-8d06-4c38-9886-252aa7285558
# ╠═ee858e78-6b69-485f-95d5-d735956e26d1
# ╠═51a17b24-b71b-4670-9bc5-de7576d6fc75
# ╠═5957fce3-dcbd-4fc5-83b7-6730b6412dbd
# ╟─385c3771-757c-49a7-8b8c-916e76524082
# ╠═ef6274cf-f1fb-4f86-becf-eeb181ed92fc
# ╠═409a9f5a-138a-491f-9789-520926be9dbd
# ╟─32f4633c-af89-11ec-0059-5392abfd3bc3
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002