Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Altezza liquido in un serbatoio

Analisi, geometria, algebra, topologia...

Moderatori: Foto UtenteDirtyDeeds, Foto UtenteIanero, Foto UtentePietroBaima

0
voti

[21] Re: Altezza liquido in un serbatoio

Messaggioda Foto UtenteMarcoD » 4 mar 2019, 10:11

Non so resistere a risolvere i problemini :-)
Ho fatto il calcoletto in Excel, integrando per rettangoli (approssimato20 rettangoli)
Risultato approssimato, viene quanche per cento meno di 3,141
C'è qualche errorino (imprecisione): si dovrebbe spostare l'ascissa di mezzo passo per eliminare un
errore sistematico, che però se si diminuisce il passo di integrazione si riduce.
Qualcuno riesce a fare meglio ?
O_/
Allegati
liquido cilindro orizz.pdf
(18.68 KiB) Scaricato 17 volte
Avatar utente
Foto UtenteMarcoD
6.058 4 8 13
Master EY
Master EY
 
Messaggi: 2281
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[22] Re: Altezza liquido in un serbatoio

Messaggioda Foto Utenteonire » 4 mar 2019, 10:56

Seguendo i preziosi consigli di Foto Utentexyz sono riuscito ad ottenere gli stessi risultati di maxima in python
Codice: Seleziona tutto
import math

# These choices depend on the problem being solved

x0 = .1  # The initial value

R = 3.81
A = 2.17

def f(x):
    return R**2*(x - math.sin(x))/2 - A

def fprime(x):
    return R**2*(1 - math.cos(x))/2

def altezza(x):
    return R - R * math.cos(x/2)

TOLERANCE = 1E-7        # 7 digit accuracy is desired
EPSILON = 1E-14         # Don't want to divide by a number smaller than this

MAX_ITERATIONS = 20     # Don't allow the iterations to continue indefinitely

found_solution = False  # Have not converged to a solution yet

for i in range(MAX_ITERATIONS):

    y = f(x0)
    yprime = fprime(x0)

    # Don't want to divide by too small of a number
    # denominator is too small
    if abs(yprime) < EPSILON:
        break   # Leave the loop

    x1 = x0 - y / yprime        # Do Newton's computation

    # If the result is within the desired tolerance
    if abs(x1 - x0) <= TOLERANCE * abs(x1):
        found_solution = True
        break   # Done, so leave the loop

    x0 = x1  # Update x0 to start the process again

if found_solution:
    # x1 is a solution within tolerance and maximum number of iterations
    print("Numero iterazioni:",i)
    print("x1:",x1)
    print("x1 in rad:",x1*180/math.pi)
    print ("Altezza:",altezza(x1))
       
else:
    # did not converge
    print("Non converge")


MarcoD ha scritto:...Ho fatto il calcoletto in Excel, integrando per rettangoli (approssimato20 rettangoli)
..
O_/

Scusami Foto UtenteMarcoD, ma non ho capito bene cosa hai fatto.
Avatar utente
Foto Utenteonire
15 4
 
Messaggi: 30
Iscritto il: 9 gen 2012, 20:33

0
voti

[23] Re: Altezza liquido in un serbatoio

Messaggioda Foto Utentexyz » 4 mar 2019, 11:33

onire ha scritto:
Codice: Seleziona tutto
...
print("x1 in rad:",x1*180/math.pi)
...


Quello è un numero espresso in gradi sessadecimali non in radianti :D

In Python esistono le funzioni "math.degrees(x)" e "math.radians(x)" per le conversioni delle unità di misura degli angoli piani.

P.S. Il Python conta da zero con l'iteratore "range", quindi quando stampi la variabile "i" somma 1.
Avatar utente
Foto Utentexyz
5.775 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1518
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[24] Re: Altezza liquido in un serbatoio

Messaggioda Foto Utenteonire » 4 mar 2019, 11:45

xyz ha scritto:Quello è un numero espresso in gradi sessadecimali non in radianti :D

mi hai colto in fallo ancora una volta :ok:
Lo sapevo (dicono tutti così :mrgreen: ), ma nella foga di scrivere mi sono sbagliato.

Codice: Seleziona tutto
if found_solution:
    # x1 is a solution within tolerance and maximum number of iterations
    print("Numero iterazioni:",i)
    print("x1 in rad:",x1)
    print("x1 in gradi:",math.degrees(x1))
    print ("Altezza:",altezza(x1))

Ho aggiornato anche lo script.
Grazie
Avatar utente
Foto Utenteonire
15 4
 
Messaggi: 30
Iscritto il: 9 gen 2012, 20:33

0
voti

[25] Re: Altezza liquido in un serbatoio

Messaggioda Foto UtenteMarcoD » 4 mar 2019, 14:54

ma non ho capito bene cosa hai fatto.


Cerca in Wiki: https://it.wikipedia.org/wiki/Regola_del_rettangolo
La regola del rettangolo o regola del punto medio, detta anche interpolazione/integrazione per rettangoli o di Newton
O_/
Avatar utente
Foto UtenteMarcoD
6.058 4 8 13
Master EY
Master EY
 
Messaggi: 2281
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[26] Re: Altezza liquido in un serbatoio

Messaggioda Foto Utenteonire » 4 mar 2019, 15:14

Non si finisce mai di imparare #-o
Avatar utente
Foto Utenteonire
15 4
 
Messaggi: 30
Iscritto il: 9 gen 2012, 20:33

3
voti

[27] Re: Altezza liquido in un serbatoio

Messaggioda Foto UtentePietroBaima » 4 mar 2019, 19:16

Se volete potete usare questa formula:

\alpha(\gamma)=-0.0072 + 0.3558 \sqrt{\gamma} + 0.5093 \gamma

dove \alpha(\gamma) è l'altezza del liquido normalizzata al diametro della cisterna e \gamma è il volume del liquido normalizzato al volume della cisterna.
Inserendo nella formula un valore di gamma troverete un alpha, da cui ricavare h:
\alpha=\frac{h}{2R}

Inserendo il valore di gamma:
\gamma=\frac{V_{liquido}}{V_{cisterna}}=\frac{V_{liquido}}{\pi \  R^2 \ L}

L'errore massimo è inferiore al sei per mille su alfa.

La formula prevede correttamente riempimenti fino a metà cisterna.
Per l'altra metà, cioè quando \gamma>0.5, essendo la cisterna a base circolare, si può usare la formula "al contrario", cioè si può usare la relazione:

\alpha(\gamma)=1-\alpha(1-\gamma)

facciamo un esempio di questo ultimo caso:
supponiamo \gamma=0.6, allora

\alpha(0.6)=1-\alpha(1-0.6)
cioè
\alpha(0.6)=1-\alpha(0.4)
con
\alpha(0.4)=0.421

quindi
\alpha(0.6)=1-0.421=0.579
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
75,9k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 9044
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[28] Re: Altezza liquido in un serbatoio

Messaggioda Foto UtenteLucaCassioli » 4 mar 2019, 19:29

Ok basta con la matematica, il problema è troppo complicato per un PLC.
Passiamo alla pratica.

Svuota completamente il serbatoio.
Riempilo con X litri e misura l'altezza del liquido.
Riempilo con altri X litri e misura l'altezza di nuovo.
Ripeti
ripeti
ripeti
ripeti
ripeti
ripeti
finché il serbatoio è pieno fino all'orlo.

Più piccolo è X...
- più tempo ci metterai per finire
- più precisa sarà la misura

Alla fine avrai una semplice lista di valori da comparare con la lettura: se la lettura è tra il valore 7 e il valore 8, il livello sarà compreso tra i due livelli equivalenti ai valori 7 e 8.

Memorizzare 1000 valori man mano che riempi il serbatoio ogni volta che tu premi un pulsante, è una cosa che anche un comodore 64 potrebbe fare. :D
E siccome devi farlo una volta sola, non c'è nemmeno bisogno di inventarsi un sistema per misurare quanti litri di liquido stai versando nel serbatoio, devi solo leggere a occhio il contatore (o contare i bicchieri/secchi/bidoni che stai versando).
Avatar utente
Foto UtenteLucaCassioli
411 2 4
Frequentatore
Frequentatore
 
Messaggi: 294
Iscritto il: 26 apr 2016, 19:12

0
voti

[29] Re: Altezza liquido in un serbatoio

Messaggioda Foto UtentePietroBaima » 4 mar 2019, 19:29

Mi sembra che la formula che ho proposto non sia complicata per un PLC.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
75,9k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 9044
Iscritto il: 12 ago 2012, 1:20
Località: Londra

1
voti

[30] Re: Altezza liquido in un serbatoio

Messaggioda Foto Utentexyz » 4 mar 2019, 20:25

LucaCassioli ha scritto:...
Memorizzare 1000 valori man mano che riempi il serbatoio ogni volta che tu premi un pulsante, è una cosa
...

Esistono delle tecniche simili ma servono molti meno punti.

Bisogna ottenere un numero significativo di campioni compresi nell'intervallo di valori possibili.

Non è il caso di questo problema, se i punti formano una retta basta usare la tecnica dei minimi quadrati per trovare la funzione della retta che approssima meglio i punti trovati:

https://en.wikipedia.org/wiki/Least_squares

In questo caso bisogna invece usare una tecnica più sofisticata che si chiama regressione non lineare:

https://en.wikipedia.org/wiki/Nonlinear_regression

permette di individuare i coefficienti di una funzione non lineare (da valutare in base al grafico dei punti) in modo da approssimare meglio (minimo errore) la distribuzione dei punti di partenza. Esistono dei software che permettono di calcolare questi valori, poi basta usare nel software del sistema embedded la funzione non lineare con i coefficienti trovati.
Avatar utente
Foto Utentexyz
5.775 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1518
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

PrecedenteProssimo

Torna a Matematica generale

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti