Pagina principale
Una pagina a caso
Ultime modifiche
Pagine speciali
Portale comunità
Preferenze
Informazioni su Masticationpedia
Avvertenze
Masticationpedia
Ricerca
Menu utente
discussioni
contributi
entra
Modifica di
Asse Trasversale Cerniera
(sezione)
Attenzione:
non hai effettuato l'accesso. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se
accedi
o
crei un'utenza
, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.
Controllo anti-spam.
NON
riempirlo!
===='''Script Python: Errore di fitting'''==== <syntaxhighlight lang="python"> import numpy as np from scipy.optimize import least_squares import matplotlib.pyplot as plt # Original data provided original_center = np.array([11.56, 61.21]) radius = 26.38 angles = np.linspace(0, 2 * np.pi, 10) points = np.array([ original_center + radius * np.array([np.cos(angle), np.sin(angle)]) for angle in angles ]) # Function to add noise to the points def add_noise_to_points(points, noise_level): noisy_points = points + np.random.normal(0, noise_level, points.shape) return noisy_points # Add noise to the points noise_level = 0.1 # Reduced noise level noisy_points = add_noise_to_points(points, noise_level) # Residual function for non-linear fitting def residuals(c, points): xc, yc, r = c Ri = np.sqrt((points[:, 0] - xc)**2 + (points[:, 1] - yc)**2) return Ri - r # Calculate the center and radius using noisy points x_m = np.mean(noisy_points[:, 0]) y_m = np.mean(noisy_points[:, 1]) r_m = np.mean(np.sqrt((noisy_points[:, 0] - x_m)**2 + (noisy_points[:, 1] - y_m)**2)) initial_guess = [x_m, y_m, r_m] # Fitting the circle using the Levenberg-Marquardt method result = least_squares(residuals, initial_guess, args=(noisy_points,)) xc, yc, r = result.x calculated_center = np.array([xc, yc]) # Calculate the error between the centers error = np.linalg.norm(calculated_center - original_center) error_mm = error * 10 # Convert to millimeters (assuming the points might be in centimeters) # Verify the calculated center print(f'Calculated Center: {calculated_center}') print(f'Radius: {r:.4f}') print(f'Error: {error_mm:.4f} mm') # Visualization of the fitted circle theta = np.linspace(0, 2 * np.pi, 100) x_fit = calculated_center[0] + r * np.cos(theta) y_fit = calculated_center[1] + r * np.sin(theta) plt.figure(figsize=(8, 8)) plt.scatter(points[:, 0], points[:, 1], color='b', label='Original Points') plt.scatter(noisy_points[:, 0], noisy_points[:, 1], color='r', label='Noisy Points') plt.scatter(original_center[0], original_center[1], color='r', marker='x', s=100, label='Original Center') plt.plot(x_fit, y_fit, 'g--', label='Fitted Circle') plt.scatter(calculated_center[0], calculated_center[1], color='g', label='Calculated Center') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.title('Circle Fitting with Noisy Points') plt.grid(True) plt.show() </syntaxhighlight>
Oggetto:
Per favore tieni presente che tutti i contributi a Masticationpedia possono essere modificati, stravolti o cancellati da altri contributori. Se non vuoi che i tuoi testi possano essere alterati, allora non inserirli.
Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera (vedi
Masticationpedia:Copyright
per maggiori dettagli).
Non inviare materiale protetto da copyright senza autorizzazione!
Annulla
Guida
(si apre in una nuova finestra)