<jupyter_start><jupyter_text>Blatt 8  Aufgabe 22: Fehlerfortpflanzung<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
import uncertainties.unumpy as unp
from uncertainties import ufloat
sig0 =  0.2
sig1 =  0.2
rho  = -0.8
cov = [[sig0**2, rho * sig0 * sig1], [rho * sig0 * sig1, sig1**2]]

a = np.random.multivariate_normal(mean = [1, 1], cov = cov, size = 100)                                                  
plt.scatter(a[:, 0], a[:, 1], alpha = 0.9, s = 5)
plt.xlabel('$a_0$')
plt.ylabel('$a_1$')
x = np.linspace(-10, 10, 100)
stdy = [np.std(a[:, 0] + a[:, 1] * x_i) for x_i in x]   
plt.plot(x, stdy, label = 'Numerisch' )

def exact(x):
    return np.sqrt(sig0**2 + x**2 * sig1**2 + 2 * rho * sig0 * sig1 * x)
plt.plot(x, exact(x), label = 'Exakt')
plt.xlabel('$x$')
plt.ylabel('$\sigma_y$')
plt.legend()
plt.show()
x = [-3, 0, 3]
for x_i in x:
    y = a[:, 0] + a[:, 1] * x_i
    print(f'x = {x_i}:\t y = {np.mean(y)} +/- {np.std(y)}')<jupyter_output><empty_output><jupyter_text>Kommentar: Die numerischen Ergebnisse stimmen recht gut mit den exakt bestimmten Werten überein (siehe Handschriftliches). Die Präzision nimmt für große Beträge von $x$ ab (siehe Plot oben). Durch eine Vergrößerung des Samples könnte die Präzision gesteigert werden.  Aufgabe 24: F(uckin')-Praktikum<jupyter_code>Asymmetrie = np.matrix([-0.032, 0.01, 0.057,
                       0.068, 0.076, 0.08, 
                       0.031, 0.005, -0.041, 
                       -0.09, -0.088, -0.074])
Psi = np.arange(0, 331, 30)
A = np.matrix([np.cos(Psi / 180 * np.pi), np.sin(Psi / 180 * np.pi)]).T
a = (A.T * A).I * A.T * Asymmetrie.T
a
Psi_plot = np.linspace(0, 360, 100)
plt.plot(Psi, Asymmetrie.T, 'o', label = 'Daten')
plt.xlabel('$\Psi / °$')
plt.ylabel('Asymmetrie')
plt.plot(Psi_plot, 
         a[0, 0] * np.cos(Psi_plot / 180 * np.pi) + a[1,0] * np.sin(Psi_plot / 180 * np.pi), 
         label = 'Anpassung mit 1. Modell')
plt.legend()
sigma = 0.011
Cov = np.array(sigma**2 * (A.T * A).I)
rho = Cov[0, 1] / np.sqrt(Cov[0, 0] * Cov[1, 1])
print(f'a1 = {ufloat(a[0, 0], np.sqrt(Cov[0, 0]))}')
print(f'a2 = {ufloat(a[1, 0], np.sqrt(Cov[1, 1]))}')
print(f'Korrelationskoeffizient: {rho}')<jupyter_output><empty_output><jupyter_text>Die Korrelation ist fast 0. Das Modell ist also gut gewählt, was letztlich an der Orthogoalität der Funktionen Sinus und Kosinus liegt.<jupyter_code>delta = unp.arctan(- a[1, 0] / a[0, 0])
A0 = a[0, 0] / unp.cos(unp.arctan(- a[1, 0] / a[0, 0]))
a1 = a[0,0]
a2 = a[1,0]

J = np.matrix([[a1 / np.sqrt(a1**2 + a2**2), a2 / np.sqrt(a1**2 + a2**2)], 
     [a2 / (a1**2 + a2**2), -1 / (a1 + a2**2 / a1)]])
Cov2 = J * Cov * J.T
print(f'A_0 = {ufloat(A0, np.sqrt(Cov2[0, 0]))}')
print(f'delta = {ufloat(delta, np.sqrt(Cov2[1, 1]))}')
print(f'Korrelation: {Cov2[1, 0] / np.sqrt(Cov2[0, 0] * Cov2[1, 1]) }')<jupyter_output><empty_output><jupyter_text>Die Korrelation ist ebenfalls sehr klein aber etwa 10x größer als bei dem anderen Modell.<jupyter_code>Psi_plot = np.linspace(0, 360, 100)
plt.plot(Psi, Asymmetrie.T, 'o', label = 'Daten')
plt.xlabel('$\Psi / °$')
plt.ylabel('Asymmetrie')
plt.plot(Psi_plot, A0 * unp.cos(Psi_plot / 180 * np.pi + delta), label = 'Anpassung mit 2. Modell')
plt.legend()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.20042971147943522, 'fraction_numerical': 0.0678330263965623, 'mean_word_length': 3.446111869031378, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '575225', 'license': 'MIT', 'n_tokens_mistral': 1611, 'n_tokens_neox': 1476, 'n_words': 339, 'path': 'Blatt08/blatt08_nitschke_grisard.ipynb', 'repo_name': 'stefangri/SMD', 'size': '3258'}