
10Total shares Facebook LinkedIn TW Email WApp Telegram AbbonatiSpesso nei programmi di calcolo come SCILAB o MATLAB si usano nel codice sorgente le formule matematiche in modo “diretto”, ovvero “così come sono” note dalla teoria. In molti algoritmi, però, deve essere eseguito del lavoro supplementare per tenere conto del fatto che il computer non elabora i veri valori matematici, ma esegue un calcolo con la loro rappresentazione in virgola mobile. Mostreremo in questo articolo che per SCILAB sono stati sviluppati appositamente degli algoritmi che tengano conto della rappresentazione in virgola mobile (floating point) dei computers mediante esempi in cui la soluzione semplice, detta anche “banale”, non è sufficientemente accurata, diversamente dall’implementazione SCILAB che risulta più robusta. Come primo esempio consideriamo […]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 1579 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Sono proprio contento di vedere che c’è chi ci sta lavorando seriamente sul questo confronto. Non sarei stato all’altezza 😉
non ho capito ben capito all’inizio quando dici che in matlab non c’è un tipo booleano. Che cosa implica? è un problema?
Scusate ma di solito che conti fate per accorgervi di tutto questo? Mi sembra che la precisione richiesta sia veramente molto alta…
Si, è vero.
Ma ti assicuro che al di là del corso introduttivo su MATLAB, la sua utilità è grandissima soprattutto se usato insieme ad altri software. Io ho avuto diverse occasioni per provare MATLAB come motore di calcolo in altri software e ti assicuro che errori anche di precisione estremamente piccola possono avere grandi effetti, molto deleteri.
Rischiano di non far convergere determinanti di matrici estremamente popolate in sistemi molto grandi che modellano geometrie anche parecchio complesse. E più è complessa la geometria, peggio è 😀
Non guardare a MATLAB in funzione dei problemi visti qui ma pensa al fatto che se viene utilizzato come software per calcolare la risoluzione di matrici che simulano un crash test o lo scoppio all’interno di un cilindro del motore, la cosa si fa davvero complessa 😉
Articolo fondamentale se non altro sotto il profilo culturale e della consapevolezza. E’ dato generalmente per scontato che il calcolatore fornisca sempre dati intrinsecamente esatti, invece non solo non è così, ma possiamo sostenere che il suo meccanismo di rappresentazione (per i dati in virgola mobile) sia strutturalmente fallato, anche se non esiste di meglio. In una seconda puntata tratterei anche l’argomento della densità dell’insieme dei numeri float rappresentabili e come la stessa e quindi la precisione vari all’allontanarsi dallo zero. In verità sarebbe fantastico se l’autore si cimentasse in un breve mini-corso di calcolo numerico “per rimandati”, con un bel taglio applicativo. Ciliegina sulla torta sarebbe quella di implementare, da zero, una macchina di calcolo virtuale che incorpori le funzioni di una calcolatrice scientifica base, partendo solo da microcontrollore a 8/16 bit (magari simulato) senza moltiplicatore HW e FPU. Segnalo all’autore, se già non ne fosse al corrente, di guardarsi cosà (e come) combinó Sir Clive Sinclair quando tirò fuori la prima calcolatrice scientifica economica. Penso che questo sia in assoluto il miglior case study sul compromesso tra disponibilità di risorse e precisione di calcolo. Su internet ne hanno fatto un sito rievocativo, con tanto di emulazione.
Innanzitutto, vi ringrazio per i complimenti ed approfitto per augurare a tutti buon anno!
Cerco di rispondere in un unico commento, a guadagno di leggibilità.
Per quanto riguarda i tipi di dato, l’assenza in Matlab dei booleani non è in generale un problema, bisogna solo esserne consapevoli: qualsiasi numero diverso da zero può essere trattato come un valore logico “vero”.
Basta fare queste prove:
if (3<5)-1 3^2
else 10
end
if 100 3^2
end
Nel primo caso si otterrà 10 perché 3<5 restituisce 1 (e non "vero"), dopodichè 1-1 è zero (quindi "falso") e viene eseguito il ramo "else". Nel secondo caso 100 è un numero diverso da zero e la condizione è verificata. Il risultato sarà 9.
Dove esiste un tipo booleano le operazioni "logiche" non sempre possono essere "mischiate" con quelle numeriche (si provi ad eseguire l'espressione (~(3<5))>2 per vedere cosa succede: in matlab il risultato è 0, in scilab si ha errore),
Per la richiesta di un mini corso di calcolo numerico, devo ammettere che non è in programma, ma è uno stimolo interessante. Al momento sono impegnato su altri argomenti, ma in futuro non escludo di approfondire e continuare la trattazione.