Skip to content
Snippets Groups Projects
Select Git revision
  • ddd2cf0811f955fbe64e288499a81483f139bb1a
  • master default protected
  • gitkeep
  • dev protected
  • Issue/2309-docs
  • Issue/2373-fixPagination
  • Heinrichs-master-patch-93799
  • devops-aczepiel
  • Hotfix/2097-fixTimeFormat
  • Hotfix/2087-efNet6
  • Issue/1910-MigrationtoNET6.0
  • Issue/1964-tokenExpiryUIv2
  • Sprint/2022-01
  • Sprint/2021-11
  • Sprint/2021-08
  • Hotfix/1262-fixStatuscode
  • Sprint/2021-05
  • Product/1100-fdsS3
  • Topic/1292-FdsS3
  • Product/1188-LoggingExtended
  • Topic/1221-LogginExtendedNew
  • v2.2.3
  • v2.2.2
  • v2.2.1
  • v2.2.0
  • v2.1.3
  • v2.1.2
  • v2.1.1
  • v2.1.0
  • v2.0.2
  • v2.0.1
  • v2.0.0
  • v1.12.0
  • v1.11.0
  • v1.10.0
  • v1.9.1
  • v1.9.0
  • v1.8.0
  • v1.7.3
  • v1.7.2
  • v1.7.1
41 results

AbstractProgram.cs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    kondensator.py 4.68 KiB
    import numpy as np
    import matplotlib.pyplot as plt
    import scipy.odr as sodr
    import scipy.stats as scs
    from my_methods import *
    
    delta_U = 0.00027#20/(2**12) /np.sqrt(12)
    errorscale = 30
    R = 996 #Ohm
    sigma_R = 1/np.sqrt(12) #Ohm
    
    kondensator_aufladung = parseCSV('kondensator_aufladung')
    kondensator_entladung = parseCSV('kondensator_entladung')
    
    t_auf = kondensator_aufladung[:, 0]
    U_auf = kondensator_aufladung[:, 1]
    t_ent = kondensator_entladung[:, 0]
    U_ent = kondensator_entladung[:, 1]
    
    sigma_U_auf = delta_U * np.ones_like(U_auf)
    sigma_U_ent = delta_U * np.ones_like(U_ent)
    sigma_t_auf = (t_auf[1] - t_auf[0]) / np.sqrt(12) * np.ones_like(U_auf)
    sigma_t_ent = (t_ent[1] - t_ent[0]) / np.sqrt(12) * np.ones_like(U_ent)
    
    plt.errorbar(t_auf, U_auf, xerr = sigma_t_auf, yerr = sigma_U_auf * errorscale, label = 'Aufladung', linestyle = '')
    plt.errorbar(t_ent, U_ent, xerr = sigma_t_ent, yerr = sigma_U_ent * errorscale, label = 'Entladung', linestyle = '')
    plt.ylabel(r'$U_A [V]$')
    plt.xlabel(r'$t [ms]$')
    plt.title(r'Messdaten Kondensator$')
    plt.grid()
    plt.legend()
    plt.tight_layout()
    plt.savefig('output/Kondensator_messung.pdf')
    plt.clf()
    
    print('########## Aufladung ##########')
    output = exponential_fit(t_auf, U_auf, sigma_t_auf, sigma_U_auf, Lambda0 = -1e-3, A0 = -5, offset0 = 5)
    chiq_dof, p_value = chi_sq_dof_p(t_auf, U_auf, sigma_t_auf, sigma_U_auf, output.beta, exponential)
    print(output.beta)
    print(np.sqrt(np.diagonal(output.cov_beta)))
    
    Lambda = -output.beta[0] * 1e3
    sigma_Lambda = np.sqrt(output.cov_beta[0, 0]) * 1e3
    C = 1 / (Lambda * R)
    sigma_C = ((sigma_R/(Lambda * R**2))**2 + (sigma_Lambda/(Lambda**2 * R))**2)**0.5
    print(f'\n\t Lambda: {round(Lambda, sigma_Lambda)}')
    print(f'\t C: {round(C * 1e6, sigma_C * 1e6)} µF\n')
    
    fig, ax = plt.subplots(nrows = 2, sharex = True)
    ax[0].plot(t_auf, exponential(output.beta, t_auf), label = r'fit $y = K + A \cdot e^{\Lambda \cdot t}$', color='C1')
    ax[0].errorbar(t_auf[::100], U_auf[::100], xerr = sigma_t_auf[::100], yerr = sigma_U_auf[::100], label='data', linestyle = '', marker = ',')
    ax[1].errorbar(t_auf, U_auf - exponential(output.beta, t_auf), xerr = sigma_t_auf, yerr = sigma_U_auf, label = 'residuals', linestyle = '', marker = ',')
    ax[0].set(ylabel = r'$U_A [V]$', title = r'Fit für Aufladung des Kondensators')
    ax[1].set(xlabel = r'$t [ms]$', ylabel = r'Data - Fit [V]')
    ax[0].text(0.982, 0.38, r'$\lambda$'+f': {round(output.beta[0], np.sqrt(output.cov_beta[0, 0]), scientific = True)}\n'+r'$A$'+f': {round(output.beta[1], np.sqrt(output.cov_beta[1, 1]))}\n'+r'$K$'+f': {round(output.beta[2], np.sqrt(output.cov_beta[2, 2]))}\n'+r'$\frac{\chi^2}{dof}$'+f': {np.round(chiq_dof, 1)}\np: {p_value}' , horizontalalignment='right', verticalalignment='bottom', transform=ax[0].transAxes, bbox=dict(facecolor='white', edgecolor='gray'))
    ax[0].grid()
    ax[1].grid()
    ax[0].legend(loc = 'lower right')
    ax[1].legend()
    fig.tight_layout()
    fig.savefig(f'./output/kondensator_aufladung_fit.pdf')
    plt.clf()
    
    print('########## Entladung ##########')
    output = exponential_fit(t_ent, U_ent, sigma_t_ent, sigma_U_ent, Lambda0 = -1e-3, A0 = 5, offset0 = -5)
    chiq_dof, p_value = chi_sq_dof_p(t_ent, U_ent, sigma_t_ent, sigma_U_ent, output.beta, exponential)
    print(output.beta)
    print(np.sqrt(np.diagonal(output.cov_beta)))
    
    Lambda = -output.beta[0] * 1e3
    sigma_Lambda = np.sqrt(output.cov_beta[0, 0]) * 1e3
    C = 1 / (Lambda * R)
    sigma_C = ((sigma_R/(Lambda * R**2))**2 + (sigma_Lambda/(Lambda**2 * R))**2)**0.5
    print(f'\n\t Lambda: {round(Lambda, sigma_Lambda)}')
    print(f'\t C: {round(C * 1e6, sigma_C * 1e6)} µF\n')
    
    fig, ax = plt.subplots(nrows = 2, sharex = True)
    ax[0].plot(t_ent, exponential(output.beta, t_ent), label = r'fit $y = K + A \cdot e^{\Lambda \cdot t}$', color='C1')
    ax[0].errorbar(t_ent[::100], U_ent[::100], xerr = sigma_t_ent[::100], yerr = sigma_U_ent[::100], label='data', linestyle = '', marker = ',')
    ax[1].errorbar(t_ent, U_ent - exponential(output.beta, t_ent), xerr = sigma_t_ent, yerr = sigma_U_ent, label = 'residuals', linestyle = '', marker = ',')
    ax[0].set(ylabel = r'$U_A [V]$', title = r'Fit für Entladung des Kondensators')
    ax[1].set(xlabel = r'$t [ms]$', ylabel = r'Data - Fit [V]')
    ax[0].text(0.982, 0.12, r'$\lambda$'+f': {round(output.beta[0], np.sqrt(output.cov_beta[0, 0]), scientific = True)}\n'+r'$A$'+f': {round(output.beta[1], np.sqrt(output.cov_beta[1, 1]))}\n'+r'$K$'+f': {round(output.beta[2], np.sqrt(output.cov_beta[2, 2]))}\n'+r'$\frac{\chi^2}{dof}$'+f': {np.round(chiq_dof, 1)}\np: {p_value}' , horizontalalignment='right', verticalalignment='bottom', transform=ax[0].transAxes, bbox=dict(facecolor='white', edgecolor='gray'))
    ax[0].grid()
    ax[1].grid()
    ax[0].legend(loc = 'upper right')
    ax[1].legend()
    fig.tight_layout()
    fig.savefig(f'./output/kondensator_entladung_fit.pdf')
    plt.clf()