Vettori e Matrici (array)

Documenti analoghi
PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

Disequazioni in una incognita. La rappresentazione delle soluzioni

4 GLI ARRAY E LE STRINGHE

Array multidimensionali e stringhe

La riduzione a gradini e i sistemi lineari (senza il concetto di rango)

Diagrammi a blocchi 1

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Espressioni ed Equazioni

Esempio : i numeri di Fibonacci

Informatica B

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

La codifica. dell informazione

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

PAG. 1 DI NOV 2005 ESTRATTI DI MAPPA MANUALE PER L'UTENTE

Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Gli ARRAY in FORTRAN 90

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

Metodo dei minimi quadrati e matrice pseudoinversa

Oggetto: Utility per la variazione massiva del codice IVA.

Anno 2. Radicali algebrici e aritmetici: condizioni di esistenza

PowerDIP Software gestione presenze del personale aziendale. - Guida all inserimento e gestione dei turni di lavoro -

Introduzione al NATTING

SISTEMI LINEARI MATRICI E SISTEMI 1

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Grafici e Pagina web

FUNZIONI DI BASE PANNELLO SMS

Esercitazioni di Reti Logiche. Lezione 1 Rappresentazione dell'informazione. Zeynep KIZILTAN zkiziltan@deis.unibo.it

PROGRAMMAZIONE STRUTTURATA

Mini-Corso di Informatica

Algebra di Boole Algebra di Boole

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Funzioni condizionali

Esercizi svolti. risolvere, se possibile, l equazione xa + B = O, essendo x un incognita reale

Il Modello di von Neumann (2) Prevede 3 entità logiche:

U"lizzo della memoria (Indirizzamento, le2ura, scri2ura) Dire8ve Assembler in SPIM

Grafici. 1 Generazione di grafici a partire da un foglio elettronico

Scorciatoie del Web. Krishna Tateneni Yves Arrouye Traduzione: Luciano Montanaro Manutenzione della traduzione: Federico Zenith

Distribuzioni campionarie. Antonello Maruotti

0.1 Esercizi calcolo combinatorio

Un esempio di if annidati

Indirizzi IP. E-3: Indirizzi IP e subnetting INSTRADAMENTO INSTRADAMENTO. A. Memo. da H1 ad H2 (2) da H1 ad H2 (1)

Data Import e Probabilità. Renato Mainetti

1 Definizione di sistema lineare omogeneo.

Fondamenti di Informatica

1 IL LINGUAGGIO MATEMATICO

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Elezioni comunali Esempi di attribuzione dei seggi

Esempi di attribuzione dei seggi

IL CODICE EAN (European Article Number)

Sistemi Web per il turismo - lezione 3 -

Questa è la finestra dei dettagli, è possibile selezionare anche da qui un modello o un pezzo per essere aperto.

Procedura tecnica di accreditamento dei Registrar

Fiscal News La circolare di aggiornamento professionale

Video Scrittura (MS Word) Lezione 2 Tabelle e Immagini

= < < < < < Matematica 1

VISUAL BASIC FOR APPLICATION

Linguaggio C: introduzione

Prof.ssa Laura Pagnozzi Prof. Ivano Coccorullo. Calcolo Combinatorio

Problema: calcolare il massimo tra K numeri

Progettazione logica

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli

CAPITOLO V. DATABASE: Il modello relazionale

Versione del 25/01/2016 ARTEA. Agenzia Regionale Toscana Erogazioni Agricoltura (L.R. 19 novembre 1999, n. 60 e successive m. e i.

Gestione Multilingua

Introduzione all uso di FICO Xpress. Metodi di Ottimizzazione per la Logistica e la Produzione

VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA

Layout Editor e Stampa

Esercizi sulle equazioni logaritmiche

Riconoscere e formalizzare le dipendenze funzionali

Richiami di aritmetica

Normalizzazione. Definizione

SISTEMI LINEARI. x 2y 2z = 0. Svolgimento. Procediamo con operazioni elementari di riga sulla matrice del primo sistema: R 2 R 2 3R

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

Costruttore di numeri della WebDewey

Gestione delle eccezioni in Java

Costruiamo la STRISCIA DELLE MISURE. decametro metro decimetro. Tm Gm Mm km hm dam m dm cm mm µm nm pm

Esame di FONDAMENTI DI AUTOMATICA (9 crediti) SOLUZIONE

Prof.ssa Laura Pagnozzi Prof. Ivano Coccorullo. Calcolo Combinatorio

codifica in virgola mobile (floating point)

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Procedura operativa per la gestione della funzione di formazione classi prime

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Analisi. Calcolo Combinatorio. Ing. Ivano Coccorullo

04 - Numeri Complessi

5 settembre 2016 CHIARIMENTI IN MATERIA DI ELEZIONI DEI CONSIGLI DEGLI ORDINI

Breve Guida all Utilizzo dello Smartphone Microsoft Lumia 640 LTE

Definizione di metodi

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Calcolo Numerico Informatica Manolo Venturin A.A Guida all esame

Guida rapida del portale voce. Data del documento: 13/09/13 Versione del documento: 1.0d

Sistemi di equazioni lineari

Richiami di aritmetica(2)

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Intelligenza Artificiale. Lezione 6bis. Sommario. Problemi di soddisfacimento di vincoli: CSP. Vincoli CSP RN 3.8, 4.3, 4.5.

ESERCIZI IN PIÙ I NUMERI COMPLESSI

y = è una relazione tra due variabili, che ad ogni valore della

Transcript:

Vettori e Matrici (array) Introduction to modern Fortran Paolo Ramieri, CINECA Maggio 2016

Array - Introduzione Gli array sono serie di variabili dello stesso tipo, ciascuna accessibile mediante indici numerici. Il Fortran consente di gestire: Vettori Matrici Matrici multidimensionali(fino a 7 dimensioni) GliarrayinFortran90possonoesseredi3tipi: Statici Semi-dinamici Dinamici

Array - Introduzione Array statici: hanno dimensioni fissate al momento della dichiarazione e il numero di elementi nell'array non può essere modificato durante l'esecuzione del programma. Array semi-dinamici: all'interno di una procedura non hanno dimensioni fissate, ma esse vengono definite con il passaggio degli argomenti alla procedura. Sono anche detti array automatici. Array dinamici: la dimensione di questi array può essere modificata durante l'esecuzione del programma. Sono anche detti array allocabili.

Array - Terminologia Rango Estensione Forma Dimensione Conformità numero di dimensioni della matrice numero di elementi in una dimensione vettore delle estensioni prodotto delle estensioni due matrici con la stessa forma Per dichiarare un array è necessario fornire 3 informazioni: tipodegli elementi Rango: numerodi dimensioni Forma: numero di elementi per ogni dimensione

Array - Dichiarazione La dichiarazione delle dimensioni è lasciata all'attributo di dichiarazione DIMENSION secondo la sintassi generale: TIPO, DIMENSION([x1:]x2,[y1:]y2,...) :: A Ogni dimensione è separata da virgole e i limiti degli indici per ogni dimensione sono separati da":" Se come nell esempio che segue non è specificato l'indice inferiore, si assume che l'array parta dall'indice 1. REAL, DIMENSION(40,60) :: A

Array - Esempi Uso di PARAMETER: in generale possono essere utili uno o più PARAMETER per dichiarare le dimensioni degli array statici. INTEGER, PARAMETER :: n=10 REAL, DIMENSION(n,n+1) :: A,B,C Nelle subroutine è possibile utilizzare argomenti di tipo INTEGER per dichiarare le dimensioni di array passati ad una subroutine e array automatici. SUBROUTINE lavora(n,...) INTEGER :: n REAL, DIMENSION(n,2*n) :: A,B,C

Array - Esempi Dichiarazione compatta: per dichiarare le dimensioni dell'array si può anche non utilizzare l'attributo DIMENSION, bensì la forma: TIPO :: A([x1:]x2,[y1:]y2,...) Sono pertanto equivalenti le forme: INTEGER, DIMENSION(4,2) :: A,B,C INTEGER :: A(4,2), B(4,2), C(4,2)

Array - Esempi Dimensioni presunte: nel caso di array passati in argomento, è possibile evitare di dichiararne le dimensioni, esplicitando solo il rango. Si usa pertanto l'attributo DIMENSION(o la forma compatta), ma i valori vengono sostituiti da : INTEGER, DIMENSION(:,:) :: c

Array - Inizializzazione Per leggere o modificare gli elementi di un array è possibile accedere: adunsingoloelemento asezionidiarray(da...a...) a sottoinsiemi di array utilizzando liste di indici Per inizializzare un vettore possiamo utilizzare: assegnazione diretta(componente per componente) costrutti DO notazione vettoriale costruttore(eventualmente con DO implicito)

Assegnazione diretta: REAL, DIMENSION(3) :: a a(1) = 0.0 a(2) = 1.0 Costrutti DO REAL, DIMENSION(3) :: a DO i = 1, 3 a(i) = REAL(i) END DO Array - Inizializzazione Notazione vettoriale: il Fortran 90 permette di lavorare con vettori e matrici considerandoli nella loro globalità. REAL, DIMENSION(6) :: A = 0.0 REAL, DIMENSION(10,10) :: M = 1.0

Array - Inizializzazione Notazione vettoriale: accesso a sezioni di array A(2:5) = 0.1 M(2:4,2:4) = 2.0 Sottoinsiemi di indici (solo vettori): REAL, DIMENSION(10) :: a INTEGER, DIMENSION(10) :: ip ip = (/10, 9, 8, 7, 6, 5, 4, 3, 2, 1/) a(ip) = (/10,20,30,60,120,240,480,960,1920,3840/) Con questo tipo soluzione occorre fare attenzione perché in una assegnazione non si ripetano due indici

Array - Inizializzazione Array Costructor: per inizializzare array monodimensionali si può utilizzare una lista di variabili (separate da virgola) racchiusatra(/ /) o [ ]. Le variabili possono anche essere a loro volta vettori. array = (/ lista /) array = [ lista ] Esempi: INTEGER, DIMENSION(6) :: A = (/1,2,3,4,5,6/) REAL VECTOR_X(3), VECTOR_Y(2), RESULT(100)... RESULT(1:8)=[ 1.3,5.6,VECTOR_X,2.35,VECTOR_Y] INTEGER, DIMENSION(6) :: A = (/(i,i=1,6)/)

Array - Inizializzazione Per array dirango>1, l array contructor non funziona, ma si può utilizzare una appropriata funzione intrinseca: RESHAPE(SOURCE,SHAPE) Che permette di riformare un vettore (SOURCE) secondo una qualsiasi possibile SHAPE. SOURCE = [ 1, 2, 3, 4, 5, 6 ] Y = RESHAPE (SOURCE, [ 3, 2 ] ) 1 4 2 5 3 6

Array - Inizializzazione Un esempio: REAL, DIMENSION(3,2) :: ra ra = RESHAPE((/((i+j,i=1,3),j=1,2)/), SHAPE = (/3,2/)) trasforma il vettore (2,3,4,3,4,5) 2 3 nella matrice ra = 3 4 4 5

Notazione Vettoriale Il Fortran 90 permette di lavorare con vettori e matrici considerandoli nella loro globalità, a differenza del fortran 77 che obbliga a lavorare elemento per elemento. Vettori e matrici devono essere conformi per poter essere coinvolti in operazioni vettoriali. E' essenziale ricordare che per calcolare il risultato di un'assegnazione vettori e matrici sono valutati prima che l'assegnazione abbia luogo, elemento per elemento. Ovvero si lavora sempre per elementi, con un ciclo DO implicito. Le funzioni intrinseche possono avere risultato vettoriale.

Notazione Vettoriale Esempi : REAL, DIMENSION(10,10) :: a, b, c Queste 3 forme sono equivalenti a = 0.0 a(:,:) = 0.0 a(1:10,1:10) = 0.0 Queste 3 forme sono equivalenti c = a * b! Prodotto elementale c(:,:) = a(:,:) * b(:,:) c(1:10,1:10) = a(1:10,1:10) * b(1:10,1:10)

Esempi : Notazione Vettoriale REAL, DIMENSION(10,-5:5,3) :: a, b REAL, DIMENSION(-4:5,1:5,3) :: c Si possono specificare solo gli elementi di indice dispari a(1:10:2,-3:5:2,1:3:2) = b(1:10:2,-3:5:2,1:3:2) * c(::2,1:5,::2) Oppure un solo piano a(5,-5:,:) = b(3,-5:,:) Oppure solo una parte di piano a(5,1:5,:) = b(5,1:5,:) + c(0,:,:) Ovvero solo alcune righe di un piano a(1:10:3,0,1:3) = c(1:4,1,:)

Notazione Vettoriale La notazione vettoriale è una sintassi molto efficace, ma è necessario tener ben presente come vengono eseguite le operazioni. Il principio è che tutto ciò che compare alla destra del segno di assegnazione è interamente calcolato, prima che l assegnazione venga fatta: a(2:n) = a(2:n) + b(1:n-1) equivale a : DO i = 2, n a(i) = a(i) + b(i-1) END DO

Notazione Vettoriale b(2:n) = a(2:n) + b(1:n-1) equivale a: DO i = 2, n t(i) = a(i) + b(i-1) END DO DO i = 2, n b(i) = t(i) END DO e non come si potrebbe erroneamente pensare a: DO i = 2, n b(i) = a(i) + b(i-1) END DO