Vai al contenuto
PLC Forum


Radice Quadrata . - Come calcolarla ?


bigalex

Messaggi consigliati

Sono nella necessità di dover calcolare la radice quadrata di un numero che esprime la dimensione di un cateto di un triangolo rettangolo .

Poichè il plc di cui dispongo non ha questa funzione integrata chiedevo se era possibile arrivare alla radice quadrata di un numero in modo indiretto .

Per chiarezza il plc dispone delle seguenti istruzioni matematiche :

ADDIZIONE

SOTTRAZIONE

MOLTIPLICAZIONE

DIVISIONE

SENO

COSENO

TANGENTE

Il mio problema a monte è di dover calcolare la dimensione di un cateto di un triangolo rettangolo avendo noti il valore dell'ipotenusa e dell'altro cateto e quindi non avendo disponibili i valori degli angoli non retti .

Grazie a tutti .

bigalex :blink:

Link al commento
Condividi su altri siti


I casi sono due:

- o utilizzi un algoritmo approssimato per calcolare questa radice (es. sviluppo in serie arrestato...)

- oppure ci dici che dato hai di questo triangolo

Link al commento
Condividi su altri siti

Ho gia fornito i dati : <_<

Triangolo rettangolo di cui sono noti la lunghezza dell'ipotenusa e di un cateto , quindi applicando il teorema di Pitagora calcolo la lunghezza dell'altro cateto il problema è che nel PLC non ho la funzione di radice quadrata che mi estrae il valore di risultato del teorema di Pitagora . :(

Sono stato sufficientemente chiaro ?

bigalex :blink:

Modificato: da bigalex
Link al commento
Condividi su altri siti

Lo stavo cercando anche io! ma sono stato preceduto.

Per utilizzare la trigonometria, mancando gli angoli, sarebbe necessario utilizzare le funzioni trigonometriche inverse.... quindi saremmo da capo.

Link al commento
Condividi su altri siti

Ne ho trovati altri di siti che in modo più o meno scientifico spiegano il metodo di calcolo .

Nello specifico ho applicato il "Metodo di Erone" (che è praticamente quello evidenziato nel link di Dago) e magia delle magie calcola la radice quadrata che è un piacere . :o

Ho provato con diversi cicli di iterazione per il calcolo e devo dire che effettivamente già dopo 5 iterazioni il calcolo è sufficientemente preciso (verificato con calcolatrice scientifica) .

Questo problema mi ha dato ancora più consapevolezza che la matematica è una materia affascinante, difficile (almeno per me lo è), ma quanto mai necessaria .

Quindi mi rammarico di non averla studiata a sufficienza .

bigalex :blink:

Link al commento
Condividi su altri siti

Federico Milan
Ho provato con diversi cicli di iterazione per il calcolo e devo dire che effettivamente già dopo 5 iterazioni il calcolo è sufficientemente preciso (verificato con calcolatrice scientifica) .

Ciao, probabilmente potresti anche evitare di imporre iterazioni fisse, ma valutando il grado di precisione voluta, infatti i metodi iterativi consentono di scegliere il grado di precisione voluta ... facendoti a volte risparmiare cicli computazionali ...

ciao :)

Link al commento
Condividi su altri siti

Stefano Sormanni

una metodologia un po' più rozza potrebbe essere:

cos(alpha)= CATETO/IPOTENUSA

si fa un loop iterativo dove si inserisce l'angolo e calcola il coseno, il quale viene confrontato con quello trovato (con un certo margine di errore), e quindi abbiamo ricavato l'angolo infine si moltiplica per il SIN ed il gioco è fatto....

Modificato: da Stefano Sormanni
Link al commento
Condividi su altri siti

Per Stefano Sormanni ,

come ho scritto precedentemente non mi sono noti gli angoli (l'unica certezza è che il triangolo è rettangolo) e pertanto non potevo utilizzare le funzioni trigonometriche per i calcoli .

Da qui la necessità di applicare il Teorema di Pitagora che come noto per l'estrazione del dato finale richiede la funzione di radice quadrata non presente come istruzione nel PLC che sto utilizzando .

Per Federico Milan ,

la tua osservazione è giusta e può sicuramente essere inserita , grazie .

Ho provato anche ad estrarre la radice quadrata di numeri grandi es. 99999 e in 10 iterazioni la precisione è elevata , poichè il calcolo non importa che sia istantaneo e non avendo a disposizione istruzioni del tipo FOR - NEXT ogni iterazione viene eseguita con un ciclo di scansione del PLC .

bigalex :blink:

Link al commento
Condividi su altri siti

Ciao a tutti,

Questa è una procedura che ho trovato per risolvere una radice quadrata con una semplice calcolatrice che non abbia la radice quadrata ma che abbia la funzione memoria M+ M- MC e MR. Può servire per inserire in un programma PLC:

Utilizzando la memoria della calcolatrice evito di scrivere lunghe cifre di numeri a penna:

Esempio: Calcolo della radice quadrata di 3:

Inserisco il valore 1 in M+

Procedo così:

3 tastodiviso tastoMR tastomeno tastoMR tastodiviso 2 tastopiù tastoMR tastouguale tastoMC tastoM+

Questa è la prima aprossimazione.

Procedo sempre uguale:

3 tastodiviso tastoMR tastomeno tastoMR tastodiviso 2 tastopiù tastoMR tastouguale tastoMC tastoM+

Ed è la seconda aprossimazione.

In 5 0 6 aprossimazioni il risultato è buono.

Saluti ;)

Link al commento
Condividi su altri siti

Funziona anche questo !

Ma più grande è il valore di ingresso e più bisogna iterare

--------   ----------

Valore     Numero

Ingresso   Iterazioni

--------   ----------

2..........5

3..........5

9..........6

99.........8

999........10

9999.......11

99999......13

9999999999..21

Comunque basta iterare finchè il valore di uscita dell’ultima iterazione è uguale a quello della penultima.

Modificato: da JumpMan
Link al commento
Condividi su altri siti

Il numero di iterazioni necessarie riportato qui sopra vale anche per l’esempio del link di Dago a patto di usare come numero di partenza a=1

Le iterazioni possono essere notevolmente ridotte aumentando il valore (a) all’ aumentare del valore (n)

Esempio:

n = 999999999999 , a=1 , iterazioni necessarie = 21 (come sopra)

n = 999999999999 , a=99 , iterazioni necessarie = 15

n = 999999999999 , a=9999 , iterazioni necessarie = 8

n = 999999999999 , a=99999 , iterazioni necessarie = 2 !!!

Non sono riuscito a trovare un’algoritmo per ottimizzare (a) rispetto a (n)

Ps: Ho visto che in genere si ottiene un buon risultato inserendo in (a) le prime x/2 cifre di (n), (dove x=quantità totale cifre di n)

Link al commento
Condividi su altri siti

Ho scritto un po’ in fretta perché dovevo andare via, poi mentre facevo altro mi è venuto in mente (mi succede spesso di abbandonare un problema insoluto per dedicarmi a tutt’altre attività e mentre faccio queste mi viene un’idea per la soluzione del problema precedente... è come se una parte del cervello continuasse a lavorare in background..... sono anormale ?) :blink: .

Quello che ho scritto:

Ps: Ho visto che in genere si ottiene un buon risultato inserendo in (a) le prime x/2 cifre di (n), (dove x=quantità totale cifre di n)

va sostituito con:

Più il valore inserito in (a) si avvicina alla radice quadrata di (n) minori saranno le iterazioni necessarie.

Link al commento
Condividi su altri siti

Ciao Jumpman ,

non so se hai letto la discussione dall'inizio, ma non posso sapere quale numero si avvicina di più alla radice quadrata poichè è proprio la radice quadrata che devo calcolare (cosa che ormai ho gia risolto, come scritto precedentemente) .

Tieni presente comunque che è il PLC che avendo dei dati inseriti alcuni direttamente, altri risultato di calcoli precedenti, deve calcolarsi la radice quadrata e quindi a priori il PLC non può sapere quale numero si avvicna di più alla radice quadrata che è appunto il dato che deve calcolare .

bigalex :blink:

Link al commento
Condividi su altri siti

non so se hai letto la discussione dall'inizio, ma non posso sapere quale numero si avvicina di più alla radice quadrata poichè è proprio la radice quadrata che devo calcolare (cosa che ormai ho gia risolto, come scritto precedentemente) .

Lo so, lo so........... volevo solo far notare, se qualcun'altro ne ha bisogno, che il numero delle iterazioni è meglio che non sia fisso in quanto dipende dalla grandezza del valore (n) e dal numero di partenza che immetti in (a).

Secondo si dovrebbe iterare finchè il numero non cambia più (rispetto alla iterazione precedente), a meno che no si conoscano i limiti dei valori in ingresso...se hai 5 cifre e non ti interessa molta precisione 10 iterazioni possono anche andare bene.

Nella pagina 1 ti avevo messo una tabellina con il numero di iterazioni necessarie (provato con VB fino a quando il risultato, in "double-precision", non cambia più)

Modificato: da JumpMan
Link al commento
Condividi su altri siti

Oggi mentre usavo la calcolatrice di windows mi è venuto un “deja-vu”... tale calcolatrice è infatti sprovvista del tasto “radice quadrata”, mi è venuto in mente però che l’avevo usata altre volte proprio per il teorema di pitagora, eppure il tasto radice non c’è... dopo un po’ mi sono ricordato che l’elevazione alla 1/n è equivalente alla radice n.

Praticamente per calcolare la radice quadrata si può anche elevare alla 0.5.

So che ormai hai risolto, ma se il plc in questione avesse avuto anche l’elevazione a potenza si sarebbe risolto tutto con una istruzione.

Ciao

Link al commento
Condividi su altri siti

Grazie ancora delle risposte, purtroppo il plc che devo utilizzare non ha funzioni matematiche complesse, credo sia dovuto principalmente al processore utilizzato sulla CPU e evidentemente surrogare il calcolo della radice quadrata o dell'elevazione a potenza diventi pesante se debba essere eseguito nel ciclo scansione (o meglio all'istante di elaborazione dell'istruzione) .

Quello che è confortante è che tal volta esistono vie d'uscita che salvano "capra e cavoli" e che internet è ormai una fonte inesauribile di informazioni e di contatti con persone che mettono in comune le esperienze amplificando le potenzialità del singolo individuo (sempre che si abbia la sensibilità di comprenderlo ovvero gli scambi devono essere bidirezionali) .

bigalex :blink:

Link al commento
Condividi su altri siti

Claudio Monti
Oggi mentre usavo la calcolatrice di windows mi è venuto un “deja-vu”... tale calcolatrice è infatti sprovvista del tasto “radice quadrata”

Vero, pero' miracolosamente la radice quadrata compare se usi la vista standard! :blink: mentre in quella "scientifica" e' stata omessa

Link al commento
Condividi su altri siti

Federico Milan
  La radice quadrata non è altro che il numero elevato ad 1/2. Basta usare x^y.

Scientifico vuol dire anche questo 

Se vohliamo essere coerenti con il pensiero "scientifico":

Radicequadrata(x) = modulo(x)^(1/2)

non mettendo il modulo vi è un errore formale nel senso che:

((x)^(1/2))^2=(x^2)^(1/2) -> e se poni x=-1 ti accorgi che c'è qualcosa che non va!

quindi ci deve essere il modulo :) ...

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...