<jupyter_start><jupyter_text>Problema del caricamentoQuando un sistema è rappresentato da uno schema a blocchi, l'idea principale è che un segnale in ingresso influenza solamente il segnale in uscita. L'output di un blocco può quindi essere utilizzato come ingresso per un blocco successivo. La supposizione implicita, tuttavia, è che quando viene connesso un nuovo blocco, nulla cambia nel blocco precedente. Questo però in generale non è vero. Questo fatto è solitamente indicato come il »problema del caricamento«. Ad esempio, analizziamo i due sistemi mostrati di seguito.             Rappresentazione schematica del problema del caricamento                            Dal punto di vista della teoria del controllo, ciascuno di essi può essere analizzato separatamente e possono essere ottenute le funzioni di trasferimento $P_1(s)$ e $P_2(s)$. Se i blocchi sono poi collegati in serie, si potrebbe pensare che la funzione di trasferimento del sistema combinato $P(s)$ sia uguale a $P_1(s) \cdot P_2(s)$, dato che l'output del primo sistema è l'input per il secondo sistema. La risposta al gradino per questa funzione di trasferimento è mostrata in arancione nel grafico sottostante (risposta "teoria del controllo").Se invece si analizza il sistema dal punto di vista elettrico, si ottiene una diversa funzione di trasferimento. La risposta al gradino associata è mostrata in verde nel grafico sottostante (risposta "ingegneria elettrica"). La differenza tra i due è dovuta al problema del caricamento.Se l'impedenza di ingresso del secondo sistema è molto maggiore dell'impedenza di uscita del primo, la differenza è trascurabile ai fini pratici.--- Come usare questo notebook?Sposta i cursori per modificare i valori di $R_1$, $R_2$, $L_1$ e $L_2$ e osserva la risposta "teoria del controllo" e "ingegneria elettrica" insieme alle corrispondenti funzioni di trasferimento.<jupyter_code>num_of_samples = 100
total_time = 25
t = np.linspace(0, total_time, num_of_samples*10)# time for which response is calculated (start, stop, step)

# making step function (for plotting)
step_function = np.ones(len(t))
step_function[0]=0

# make figure
fig = plt.figure(figsize=(9.8, 3),num='Problema del caricamento')

# add axes
ax = fig.add_subplot(111)
ax.set_xlabel('t [s]')
ax.set_ylabel('input, output')

ax.grid(which='both', axis='both', color='lightgray')


# plot step function and responses (initalisation)
ax.plot(t, step_function, lw=.5, label='input')

resp1, = ax.plot([], [], lw=1.5, label='risposta "teoria del controllo"')
resp2, = ax.plot([], [], lw=1.5, label='risposta "ingegneria elettrica"')
ax.legend(loc=1, fontsize=8)

R1=1
L1=1
R2=1
L2=1

eq = ax.text((-ax.get_xlim()[0]+ax.get_xlim()[1])*.4, (-ax.get_ylim()[0]+ax.get_ylim()[1])*.5, '',fontsize=8)
# eq.set_bbox(dict(facecolor='b', alpha=0.07, edgecolor='red'))

plt.show()

def set_input(R1=10, R2=20, L1=20, L2=4):
    # make transfer functions (with scipy)
    control_transfer = signal.TransferFunction([R2*L1, 0], [L1*L2, R2*L1+R1*L2, R1*R2])
    electro_transfer = signal.TransferFunction([R2*L1, 0], [L1*L2, R2*L1+R1*L1+R1*L2, R1*R2])
    # calculate step response (with scipy)
    time1, response1 = signal.step(control_transfer, T=t)
    time2, response2 = signal.step(electro_transfer, T=t)

    # update responses plots
    resp1.set_data(time1, response1)
    resp2.set_data(time2, response2)
    
    plt.show()
    
    #update strings for equations
    niz_gor_con = str(R2*L1) + 's'
    niz_dol_con = str(L1*L2) + 's^2 + ' + str(R2*L1+R1*L2) + 's + ' + str(R1*R2)
    niz_gor_ele = str(R2*L1) + 's'
    niz_dol_ele = str(L1*L2) + 's^2 + ' + str(R2*L1+R1*L1+R1*L2) + 's + ' + str(R1*R2)
    #update equations
    tekst = 'Funzioni di trasferimento:\n\nTeoria del controllo: $\dfrac{' + niz_gor_con + '}{' + niz_dol_con + '}$\nIngegneria elettrica: $\dfrac{' + niz_gor_ele + '}{' + niz_dol_ele + '}$'
    eq.set_text(tekst)

# make string to show equations
niz_gor_con = str(R2*L1) + 's'
niz_dol_con = str(L1*L2) + 's^2 + ' + str(R2*L1+R1*L2) + 's + ' + str(R1*R2)
niz_gor_ele = str(R2*L1) + 's'
niz_dol_ele = str(L1*L2) + 's^2 + ' + str(R2*L1+R1*L1+R1*L2) + 's + ' + str(R1*R2)

interact(set_input, R1=widgets.IntSlider(min=1,max=300,step=1,value=10,description='$R_1$'),
         R2=widgets.IntSlider(min=1,max=300,step=1,value=10,description='$R_2$'),
         L1=widgets.IntSlider(min=1,max=300,step=1,value=10,description='$L_1$'),
         L2=widgets.IntSlider(min=1,max=300,step=1,value=10,description='$L_2$'));<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13368630046326935, 'fraction_numerical': 0.03970880211780278, 'mean_word_length': 4.9501312335958, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '82301', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 1849, 'n_tokens_neox': 1810, 'n_words': 460, 'path': 'ICCT_it/examples/02/.ipynb_checkpoints/TD-13-Problema-del-caricamento-checkpoint.ipynb', 'repo_name': 'ICCTerasmus/ICCT', 'size': '4533'}