Introduzione allUso dei Calcolatori (1) Uso dei Calcolatori in Fisica (3) Prof. Paolo Lotti Dr....

Post on 01-May-2015

222 views 2 download

Transcript of Introduzione allUso dei Calcolatori (1) Uso dei Calcolatori in Fisica (3) Prof. Paolo Lotti Dr....

Introduzione all’Uso dei Calcolatori (1)Uso dei Calcolatori in Fisica (3)

Prof. Paolo Lotti

Dr. Paolo Lotti Istituto Nazionale di Fisica Nucleare (INFN)Sezione di PadovaVia F. Marzolo, 8I-35131 - Padovatel.: 0498277189stanza 315e-mail: lotti@pd.infn.it http://www.pd.infn.it/~lottiMercoledì ore 15

Laboratori didattici del DipartimentoSig. G. BettellaSig. P. Parisotto

Dr. Matteo MelaniDr. Antonio Ceseracciu

Programma dei corsi Introduzione all’uso dei calcolatori

0) Il calcolatore1) Presentazione dell’aula informatica2) Sistemi operativi presenti3) Il più conosciuto: Microsoft Windows4) Sicurezza?!5) Interazione utente-macchina6) Presentazione di alcuni programmi

Il calcolatore

Memoria RAM (Random Access Memory):è realizzata mediante circuiti integrati, costituiti da un insieme di Flip-Flop (circuiti di memoria a due stati stabili);

Processore Centrale CPU (Central Processing Unit):legge le istruzioni dalla -memoria, le interpreta e le esegue;

Unità di Input e Output:tastiera e mouse, principalmente, sono I dispositivi di INPUT usati dall’utente per trasmettere istruzioni/informazioni al calcolatore;Monitor e stampante sono invece i più comuni dispositivi di OUTPUT.

Sistema Operativo

Il sistema operativo è un programma che costituisce l’interfaccia utente-macchina.

Controlla quindi l’hardware che costituisce la macchina e gestisce l’utilizzo di queste componenti da parte dell’utentemediante opportune istruzioni.

Una differenza importante tra sistemi operativi diversi èquella di permettere l’utilizzo delle risorse del calcolatore da uno o più utenti, ciascuno dei quali eventualmente esegueuna o più istruzioni:

DOS - Windows 95/98 - Windows XP, Linux

Reti di calcolatori

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

Le apparecchiature per mettere in comunicazione i calcolatori fra loro sono evolute moltissimo nel corso degli ultimi dieci anni

…... ----

Dipartimento di Fisica “G. Galilei”Polo Didattico - Aula Informatica

L’Aula Informatica del Dipartimento di Fisica esistedall’Anno Accademico 1991/92

Hanno contribuito, in forma differente, le seguenti persone:

Prof. E. Calimani Dr. P. Lotti Sig. V. ChiochiaProf. L. Peruzzo Sig. C. Venier Sig. A. Simion Prof. M. Nigro Sig. M. GravinoProf. C. Voci Sig. A. DorigoProf. G. Busetto Sig. M. Menguzzato

Si è iniziato con 10 PC IBM 286

Successivamente, 3-4 MacintoshPC di generazione successiva.1 vecchio microvax digitalalcuni terminali alfanumerici

OGGI

32 postazioni di lavoroPC Pentium III con 256 Mbyte di RAM

Su queste macchine sono installati i sistemi operativiWindows NT 4.0 (tutte) e Linux

(20 macchine) distribuzione RedHat

Il sistema operativo Linux, un sistema Unix per Personal Computers. Il sistema operativo Unix esiste da più di 30 anni ed è considerato tuttora il sistema operativo più ver-satile e potente. La caratteristica più conosciuta di Unix èla non “amichevolezza”.

Esempio: il comando copy si chiama cp!Distingue le maiuscole dalle minuscole: CP non funziona!

Nel corso degli ultimi 10 anni, Unix l’ha vinta costringen-do gli utenti e le imprese prodruttrici di software ad ade-guarsi.

Microsoft per il momento resiste ...

Aula informatica del Dipartimento di Fisica

Sono presenti I due sistemi operativi attualmente più utilizzati, Linux e Microsoft Windows NT, ed in parti-colare Windows NT è un programma di Linux.

Questo software permette la coesistenzadei due sistemi operativi. Ogni calcolatore ospita entrambe I sistemi che convivono,

Vediamo prima a grandi linee I due sistemi e succes-sivamente come I due comunicano tra loro.

Obs: I sistemi sono due ma il calcolatore è uno solo!

Uso di Windows 95/98/me/2000/XP

L’obbiettivo principale è che l’utilizzo sia il più “amichevole”possibile; interfaccia utente-macchina molto intuitiva e mouse.

Clicca qui, clicca lì clicca su, clicca giù

Programmi utili, video scrittura, analisi di dati … tutto al giusto prezzo!

… e se si blocca tutto?

Linux è un sistema operativo gratuito creato da Linus Torvalds e di cui esistono varie distribuzioni, la piùconosciuta oggi è la RedHat

In aula informatica è installata al momento la distri-buzione 6.2 assieme a Windows NT 4.0

Entrambi I sistemi richiedono il possesso di un “account” ovvero una “username” ed una “password”

L’uso di Linux richiede più pazienza in media, mail sistema gestisce meglio le risorse del calcolatore e molto raramente si “blocca”

Aritmetica binaria

L’addizione, la sottrazione, la moltiplicazione e ladivisione tra numeri binari si eseguono esattamente nello stesso modo che nel sistema decimale, con la differenza che il sistema decimale ha dieci cifre mentre quello binario soltanto due, 0 e 1.

Esempi di conversione decimale-binario:

26 ==> 2x10 + 6x1010

I coefficienti delle potenze di 10, base del sistema numericoutilizzato, variano da 0 a 9.Nel sistema binario, da 0 a 1

26 ==> 1x2 + 1x2 +0x2 +1x2 +0x2 ==> 110102

1 0

1 0

1

4 3 2

Consideriamo per esempio l’addizione tra due numeri in codice binario:

26 ==> 11010 e 28 ==>111002 2

11010 + 11100------------- 110110 ==> 54

10

In generale, valgono le seguenti regole:

0 0 1 1+0 +1 +1 1 +1----- ------ ------ ----- 0 1 10 11

Analogamente per la sottrazione:

0 1 1 0-0 -0 -1 -1----- ------ ------ ----- 0 1 0 1 e riporto 1

Esempio:

11100-11010--------------- 00010 ==> 2

10

La moltiplicazione è facile:

0 1 1 0x0 x0 x1 x1

----- ------ ------ ----- 0 0 1 0

Esempio: 11010x11100 -----------------------------

-

00000 00000 11010 11010 11010------------------------------ 1011011000 ==> 728

10

Divisione: si procede come nel sistema decimale conla semplificazione che le cifre nel quoziente possono assumere soltanto il valore 0 o 1

11100:11010=1-11010--------- 00010

28:26=1-26----2

Altro esempio:1001101:101=1111-101

1001 -101

1000 -101

111 -101

10

-------

-------

-------

77:5=15-5 27-25 2

---

----

http://cs.northernc.on.ca/cs/in2254/binarith.htm

Linux è un sistema operativo gratuito creato da Linus Torvalds e di cui esistono varie distribuzioni, la piùconosciuta oggi è la RedHat

In aula informatica è installata al momento la distri-buzione 6.2 assieme a Windows NT 4.0

Entrambi I sistemi richiedono il possesso di un “account” ovvero una “username” ed una “password”

L’uso di Linux richiede più pazienza in media, mail sistema gestisce meglio le risorse del calcolatore e molto raramente si “blocca”

Il sistema operativo permette l’utilizzo del computer in un modo molto più confortabile per l’utente medio le cuiesigenze sono di utilizzare varie applicazioni.

Nell’ambito di un corso di studi scientifico, le applicazionipiù comuni sono:

- programmi per la gestione di documenti;- scrittura di testi, per esempio, relazioni di laboratorio; - analisi di dati di laboratorio;- programmi di grafica;- consultazione di pagine internet;- programmi di manipolazione algebrica:- scrittura di programmi per calcoli numerici.

Una differenza importante tra il sistema operativo Microsoft Windows e Linux:

quando si usa Windows, l’utente interagisce con programmache ne mette a disposizione molti altri;

quando si usa Linux, l’utente interagisce direttamente con il calcolatore e le periferiche a disposizione attraverso un programma molto semplice che è un’emulatore di terminale;

il comando più utile usando un terminale Linux:

# apropos copy (per esempio)# man cp (man, il manuale on-line del sistema)

(in questo caso, #, è il “prompt” che il sistema operativo uti-lizza quando in attesa di un comando)

Dal punto di vista della facilità d’uso, il sistema operativoMicrosoft Windows è molto più pratico, basta “smanettare”un po’ fino a raggiungere l’obbiettivo proposto. esempio

Per quanto riguarda la gestione dei documenti, Microsoft Windows è semplice da usare ed è soddisfacente.

Programmi di scrittura di testi, come Microsoft Word,sono stati adottati come standard per la scittura di librio articoli di giornale (case editrici).

In ambiente scientifico-universitario, per contenere i costie per riuscire a realizzare progetti specifici, per esempio ilcontrollo di apparecchiature di misura, Windows non ser-ve.

Linux ha lo svantaggio di non “presentarsi” molto bene,ma molte applicazioni si sono adeguate, xmgrace, kile. esempio

Un vantaggio molto importante è che esiste una comunitàmolto grande di programmatori molto bravi ma non pro-fessionisti che sviluppa software che vengono messi gratui-tamente a disposizione a livello internazionale (l’installazio-ne non è sempre banale).

Per esempio, in ambito scientifico, a livello di scrittura diarticoli e successivamente di pubblicazione di questi arti-coli in riviste scientifiche, si è manifestata l’esigenza di di-sporre di un linguaggio di scrittura di testi che permettes-se di scrivere le formule matematiche in maniera elegante.

Donald Knuth ha sviluppato un linguaggio di scritturadi testi, TeX, che è diventato lo standard internazionale.In realtà, un’evoluzione di TeX, LaTeX (Leslie Lamport),è stato adottato da tutte le riviste internazionali per la pubblicazione di articoli scientifici (TeX e LaTeX esisto-no ovviamente anche per Microsoft Windows).

Consiglio utile: imparare LaTeX

Per l’analisi dei dati di laboratorio, esistono molte appli-cazioni e la scelta è prof-dependent!

Per la consultazione delle pagine Internet esistono diversiprogrammi (Browser) in circolazione:Internet explorer, Mozilla, Netscape.

Molti siti internet sono ottimizzati per l’uso di uno di que-sti programmi e la scelta viene fatta principalmente per motivi di politica commerciale.

Una risorsa sicuramente molto utile, sono i cosiddetti “mo-tori di ricerca”:

www.google.comwww.altavista.comwww.yahoo.com

Normalmente si procede nel seguente modo: 1) si cerca in internet un sito che metta a disposizione il programma cercato, possibilmente gratuito o di cui esista una versione dimostrativa, valida per un pe- . riodo limitato di tempo (tipicamente un mese);

2) si “scarica” il software e si procede (o se ne richiede) all’installazione;

3) l’obbiettivo è quello di installare nel calcolatore i programmi di maggior utilità;

Il sistema operativo Linux è nato dopo Microsoft Windows e la sfida era quella di inserirsi in un mercato di software con-trollato da Microsoft.

Proprio perchè intenzionato ad inserirsi in un mondo già esi-stente da tempo, la prima preoccupazione di Linux è stata diessere permettere la comunicazione con il mondo Microsoft. Esempio: le applicazioni mtools (mdir, mcopy, mtype, …)che permettono di usare il floppy disk utilizzando una formattazione perfettamente compatibile con Windows.

Ovvio che il floppy disk è una periferica del calcolatore che può essere gestita da Linux senza preoccuparsi di qualsiasicompatibilità con altri sistemi operativi.

Nei calcolatori dell’aula informatica sono stati installati variprogrammi, in entrambe le piattaforme, per tentare di sod-disfare tutte le esigenze didattiche presentate.

In particolare, è stata installata una licenza di Mathematicaprofessional che ne permette l’uso su 10 calcolatori contem-poraneamente.

Un altro programma per Windows NT, gratuito, permette il collegamento ad altri calcolatori in modalità grafica.

Un calcolatore si distingue tra tutti: spiro.fisica.unipd.itspiro accetta collegamenti da altri calcolatori per mezzo diun programma che emula un terminale grafico, ssh, che è molto più evoluto del semplice collegamento via “telnet”.

Quando non si riesce a risolvere un problema algebricamente o mediante un programma di manipulazione algebrica (per vari motivi) e si vuole avere pieno controllo della soluzione in-contrata, si utilizza il calcolo numerico.

Esistono vari trattati “sacri” di calcolo numerico ed l’analisi numerica di un problema si divide in tre tappe fondamentali:

a) identificazione del metodo numerico da applicare;b) scrittura e “debuggaggio” del programma che risolve il problema;c) analisi ed interpretazione dei risultati.

I primi linguaggi di programmazione (compilatori) sviluppati in ambiente scientifico sono stati il Basic, Pascal, ForTran, C, C++.

Linux:

1) la procedura di login da una finestra alfanumerica: CTRL+ALT+F12) cambiare la password: il comando passwd3) gestore di finestre, il file .xinitrc exec wmaker exec AnotherLevel exec startkde4) il comando ls con i suoi parametri, -a per esempio;5) modificare questo file con un editor di testo, pico per esempio6) prima applicazione: pine7) il .forward per reindirizzare la posta elettronica

Windows NT:

1) cambiare password2) collegamento a spiro@fisica.unipd.it con ssh

Comandi principali:

DOS Linuxdir ls, ls -l, ls -a, ls -altype | more moredel, erase rmmkdir mkdirrmdir rmdirrename mvcopy cphelp man …cd cd

mstools

# mcopy a:\file.ext .

Importante

Tipico esempio del file .forward

paolo.lotti@pd.infn.it,\lotti

Se si usa, come da me erroneamente detto,

paolo.lotti@spiro.fisica.unipd.it

il sistema operativo si accorge dell’errore, loop, e nonspedisce il messaggio!

Un programma per calcolare per punti il valore di una funzione:

/* Funzione per punti */float fun(float x);int main(void){ int ip,ipmin,ipmax,idp; float x,xmin,dx; float y; ipmin=0; ipmax=50; idp=1; xmin=-5.; dx=0.2;

ip=ipmin; while(ip<=ipmax) { x=xmin+dx*ip; y=fun(x); printf("%6.1f %9.5f\n",x,y); ip=ip+idp; }}float fun(float g){ float p=0.; p=-1.+0.5*(g-2.)*(g-2.)+0.1*(g-0.5)*(g-0.5)*(g-0.5); return p;}

# gcc -o fun fun.c# ./fun# ./fun > fig.dat

# export DISPLAY=192.168.1.n:0.0# gnuplotgnuplot> p “fig.dat” u 1:2 w pgnuplot> exit

File grafico (Encapsulated PostScript):

gnuplot> set term postTerminal type set to ‘postscript’Options are ‘landscape noenhanced monocrome …’gnuplot> set output “fig.eps”gnuplot> replotgnuplot> set term X11Options are ‘0’gnuplot>exit

fig.eps

Sviluppo in serie di Taylor

)()0('''6

1)0(''

2

10'0

)()0('''6

1)0(''

2

10'0

)(!

1...))((''

2

1))((')()(

))((!

1)(

432

432

)(2

0

)(

hOhfhf)h(f)f(h)f(

hOhfhf)h(f)f(h)f(

pxfn

pxpfpxpfpfxf

pxpfn

xf

nn

n

nn

considerando p=0 e x=+h, x=-h

sottraendo la seconda equazione dalla prima, si ottiene:

)()0('''62

)()()0(' 4

2

hOfh

h

hfhff

Altre espressioni sono:

)()()0(

)0('

)()0()(

)0('

hOh

hfff

hOh

fhff

Sommando invece queste due equazioni:

2

)()0(2)()0(''

h

hffhff

2

22

2

2

5.0141585.3939479.3

...2

11

2

...)2(2

11

...cos((sin(cos()cos(

xx

xx

xx

xxx

...))((''2

1))((')()(

)cos()(''

)sin()('

)cos()(

2

pxpfpxpfpfxf

xxf

xxf

xxf

Mathcad ...

/* Paolo Lotti 182668 - taylor.c /*#include <stdlib.h>#include <stdio.h>#include <math.h>#define pi 3.141592654 float fun(float x);float fun1(float x1);int main(void){ int ip,ipmin,ipmax,idp; float x,xmin,dx; float x1,x1min,dx1; float y,y1; ipmin=0; ipmax=50; idp=1;

xmin=0.; dx=pi/25.;x1min=pi/2.;dx1=pi/50.; ip=ipmin; while(ip<=ipmax) { x=xmin+dx*ip; y=fun(x); x1=x1min+dx1*ip; y1=fun1(x1); printf("%6.2f %9.5f %6.2f %9.5f\n",x,y,x1,y1); ip=ip+idp; }return 0;}

float fun(float g){ float p=0.; p=cos(g); return p;}float fun1(float g){ float p=0.; p=3.939479-3.141585*g+0.5*g*g; return p;}

www.pd.infn.it -- fisica teorica -- nuclear physics -- P. Lotti

#gcc -o taylor -lm taylor.c#./taylor#./taylor >taylor.dat# export DISPLAY=192.168.1.n (soltanto gli utenti Windows)# gnuplot

gnuplot> p “taylor.dat” u 1:2 w l,”taylor.dat” u 3:4 w p

taylor.eps

Vi presento double

int main(void){ float a; double b; a=1./3.; b=1./3.; printf(" a=%17.15f\n b=%32.30lf\n",a,b); return 0;}

a=0.333333343267441b=0.333333333333333314829616256247

#include <math.h>float fun(float x);int main(void){ float x,h; float xminus,xplus,der1,der2,der,exa; printf(" Enter x:\n"); scanf("%f",&x); printf(" Enter h:\n"); scanf("%f",&h); xplus=x+h; xminus=x-h; der=(fun(xplus)-fun(xminus))/2./h; der1=(fun(xplus)-fun(x))/h; der2=(fun(x)-fun(xminus))/h; exa=cos(x); printf(" h x 2p+ 2p- 3p exact\n"); printf("%10.6f %6.3f %10.6f %10.6f %10.6f %10.6f\n",h,x,der1,der2,der,exa); return 0;}float fun(float g){ float p=0.; p=sin(g); return p;}

#include <math.h>double fun(double x);int main(void){ double x,h; double xminus,xplus,der1,der2,der,exa; printf(" Enter x:\n"); scanf("%lf",&x); printf(" Enter h:\n"); scanf("%lf",&h); xplus=x+h; xminus=x-h; der=(fun(xplus)-fun(xminus))/2./h; der1=(fun(xplus)-fun(x))/h; der2=(fun(x)-fun(xminus))/h; exa=cos(x); printf(" h x 2p+ 2p- 3p exact\n"); printf("%10.6lf %6.3lf %10.6lf %10.6lf %10.6lf %10.6lf\n",h,x,der1,der2,der,exa); return 0;}double fun(double g){ double p=0.; p=sin(g); return p;}

h x 2p+ 2p- 3p exact

float 0.100000 1.000 0.497364 0.581440 0.539402 0.540302 0.010000 1.000 0.536090 0.544494 0.540292 0.540302 0.001000 1.000 0.539958 0.540674 0.540316 0.540302 0.000100 1.000 0.540614 0.540018 0.540316 0.540302 0.000010 1.000 0.542402 0.536442 0.539422 0.540302 0.000001 1.000 0.536442 0.536442 0.536442 0.540302

double 0.100000 1.000 0.497364 0.581441 0.539402 0.540302 0.010000 1.000 0.536086 0.544501 0.540293 0.540302 0.001000 1.000 0.539881 0.540723 0.540302 0.540302 0.000100 1.000 0.540260 0.540344 0.540302 0.540302 0.000010 1.000 0.540298 0.540307 0.540302 0.540302 0.000001 1.000 0.540302 0.540303 0.540302 0.540302

Referenze bibliografiche

Brian W. Kernighan, Dennis M. Ritchie,“Linguaggio C”, Gruppo Editoriale Jackson

Kenneth A. Barclay,“C problem solving and programming”,Prentice Hall International Ltd.

Steven E. Koonin Professor of Theoretical Physics,“Computational physics”, The Benjamin Cummings Publishing Company, Inc.

William H. Press Harvard-Smithsonian Center for Astrophysics,

Brian P. Flannery Exxson Research and Engineering Company,

Saul A. Teukolosky Department of Physics, Cornell Universityand

William T. Vetterling Polaroid Corporation

“Numerical recipes in C”, Cambridge University Press

#gnuplotgnuplot> p “fig.dat” u 1:2 w p,”zero.dat” u 1:2 w l

zero.dat

-8. 0. 6. 0.

fig1.eps

Derive

079154288 23 xxx

54291.2

585831.0

62875.6

3

2

1

x

x

x

Mathcad

...

/* Paolo Lotti 182668 - bisez.c */# include <stdlib.h># include <stdio.h># define tol 0.000001

double fun(double x);

int main(void){ double x,dx,fold,y; int iter; printf(" Enter x,dx:\n"); scanf("%lf,%lf",&x,&dx); fold=fun(x); iter=1; printf(" iter=%2d x=%10.8f y=%10.8f\n",iter,x,fold);

a: x=x+dx; y=fun(x); iter=iter+1; printf(" iter=%2d x=%10.8f y=%10.8f\n",iter,x,y); if(y*fold<0.) { x=x-dx; dx=dx/2.; } if(dx>tol) goto a; return 0;}double fun(double g){ double p; p=8.*g*g*g+28.*g*g-154.*g+79.; return p;}

#gcc -o bisez bisez.c#./bisez Enter x:2.5

Enter x: iter= 1 x=2.50000000 y=-6.00000000 iter= 2 x=2.60000000 y=8.48800000 iter= 3 x=2.55000000 y=1.02100000 iter= 4 x=2.52500000 y=-2.54487500 iter= 5 x=2.55000000 y=1.02100000 iter= 6 x=2.53750000 y=-0.77582812 iter= 7 x=2.55000000 y=1.02100000 iter= 8 x=2.54375000 y=0.11910742 iter= 9 x=2.54062500 y=-0.32922925 iter=10 x=2.54375000 y=0.11910742

iter=11 x=2.54218750 y=-0.10527823 iter=12 x=2.54375000 y=0.11910742 iter=13 x=2.54296875 y=0.00686026 iter=14 x=2.54257812 y=-0.04922257 iter=15 x=2.54296875 y=0.00686026 iter=16 x=2.54277344 y=-0.02118455 iter=17 x=2.54296875 y=0.00686026 iter=18 x=2.54287109 y=-0.00716300 iter=19 x=2.54296875 y=0.00686026 iter=20 x=2.54291992 y=-0.00015158 iter=21 x=2.54296875 y=0.00686026 iter=22 x=2.54294434 y=0.00335428 iter=23 x=2.54293213 y=0.00160134 iter=24 x=2.54292603 y=0.00072487 iter=25 x=2.54292297 y=0.00028664 iter=26 x=2.54292145 y=0.00006753

Si può procedere in un altro modo sfruttando la possibilitàdi ri-direzionare l’output (input) del sistema operativo Unix:

#./bisez < bisez.in >bisez.out

dove il file bisez.in è un file di una sola linea che contiene l’input del programma zero: 2.5, 0.1

l’output del programma viene scritto nel file bisez.out che puòessere successivamente stampato od utilizzato per altri scopi.

fig2.eps

Metodo di Newton--Raphson

Dalla definizione di derivata prima

Si ottiene:

Supponendo che sia uno

‘zero’ della funzione f(x)ii

iii xx

xfxfxf

1

1 )()()('

1ix

)('

)(1

i

iii xf

xfxx

/* Paolo Lotti 182668 - newton.c */# include <stdlib.h># include <stdio.h># define tol 0.000001double fun(double z);double fun1(double z1);int main(void){ double x,x1,diff; int iter; printf(" Enter x:\n"); scanf("%lf",&x); iter=1;a: x1=x-fun(x)/fun1(x); diff=fabs(x-x1); printf(" iter=%2d x=%10.8lf x1=%10.8lf dx=%10.8lf\n", iter,x,x1,diff);

iter=iter+1; x=x1; if(diff>tol) goto a; return 0;}double fun(double g){ double p; p=g*g-5.; return p;}double fun1(double g){ double p; p=2.*g; return p;}

Metodo della secante

Se non si sa come calcolare analiticamente la derivata prima della funzione f(x), si può utilizzare il metodo della secante che calcola numericamente il valore delladerivata prima di f:

1

1)()()('

ii

iii xx

xfxfxf

da cui:

)()()(

1

11

ii

iiiii xfxf

xxxfxx

/* Paolo Lotti 182668 - secante.c */# include <stdlib.h># include <stdio.h># define tol 0.000001double fun(double z);double fun1(double z,double z1);int main(void){ double x,x1,x2,diff; int iter; printf(" Enter x,x1:\n"); scanf("%lf,%lf",&x,&x1); iter=1;a: x2=x-fun(x)/fun1(x,x1); diff=fabs(x-x2); printf(" iter=%2d x=%10.8lf x1=%10.8lf dx=%10.8lf\n", iter,x,x2,diff);

iter=iter+1; x=x1; x1=x2; if(diff>tol) goto a; return 0;}double fun(double g){ double p; p=g*g-5.; return p;}double fun1(double g,double h){ double p; p=(fun(g)-fun(h))/(g-h); return p;}

Newton-Raphson Enter x: 1. iter= 1 x=1.00000000 x1=3.00000000 dx=2.00000000 iter= 2 x=3.00000000 x1=2.33333333 dx=0.66666667 iter= 3 x=2.33333333 x1=2.23809524 dx=0.09523810 iter= 4 x=2.23809524 x1=2.23606890 dx=0.00202634 iter= 5 x=2.23606890 x1=2.23606798 dx=0.00000092

Secante

Enter x,x1:1.,1.3 iter= 1 x=1.00000000 x1=2.73913043 dx=1.73913043 iter= 2 x=1.30000000 x1=2.11948332 dx=0.81948332 iter= 3 x=2.73913043 x1=2.22399676 dx=0.51513367 iter= 4 x=2.11948332 x1=2.23639198 dx=0.11690867 iter= 5 x=2.22399676 x1=2.23606710 dx=0.01207034 iter= 6 x=2.23639198 x1=2.23606798 dx=0.00032401 iter= 7 x=2.23606710 x1=2.23606798 dx=0.00000088

052 x

052 x

Bisezione

Enter x: 1. iter= 1 x=1.00000000 y=-4.00000000 iter= 2 x=1.10000000 y=-3.79000000 iter= 3 x=1.20000000 y=-3.56000000 iter= 4 x=1.30000000 y=-3.31000000 iter= 5 x=1.40000000 y=-3.04000000 iter= 6 x=1.50000000 y=-2.75000000 iter= 7 x=1.60000000 y=-2.44000000 iter= 8 x=1.70000000 y=-2.11000000 iter= 9 x=1.80000000 y=-1.76000000 iter=10 x=1.90000000 y=-1.39000000 iter=11 x=2.00000000 y=-1.00000000 iter=12 x=2.10000000 y=-0.59000000 iter=13 x=2.20000000 y=-0.16000000 iter=14 x=2.30000000 y=0.29000000 iter=15 x=2.25000000 y=0.06250000 iter=16 x=2.22500000 y=-0.04937500 iter=17 x=2.25000000 y=0.06250000

052 x

052 x

iter=18 x=2.23750000 y=0.00640625 iter=19 x=2.23125000 y=-0.02152344 iter=20 x=2.23750000 y=0.00640625 iter=21 x=2.23437500 y=-0.00756836 iter=22 x=2.23750000 y=0.00640625 iter=23 x=2.23593750 y=-0.00058350 iter=24 x=2.23750000 y=0.00640625 iter=25 x=2.23671875 y=0.00291077 iter=26 x=2.23632813 y=0.00116348 iter=27 x=2.23613281 y=0.00028996 iter=28 x=2.23603516 y=-0.00014678 iter=29 x=2.23613281 y=0.00028996 iter=30 x=2.23608398 y=0.00007159 iter=31 x=2.23605957 y=-0.00003760 iter=32 x=2.23608398 y=0.00007159 iter=33 x=2.23607178 y=0.00001699 iter=34 x=2.23606567 y=-0.00001030 iter=35 x=2.23607178 y=0.00001699 iter=36 x=2.23606873 y=0.00000335 iter=37 x=2.23606720 y=-0.00000348 iter=38 x=2.23606873 y=0.00000335

Calcolo di un integrale definito - quadratura

b

hb

ha

ha

ha

a

b

a

dxxfdxxfdxxfdxxf2

4

2

2

)(...)()()(

In particolare sarà sufficiente sapere come calcolare

h

h

dxxf )(

approssimando la funzione )(xf mediante un’espressione

che possa essere integrata esattamente in questo intervallo.

Introducendo un numero pari di intervalli nell’intervallodi integrazione [a,b] di larghezza h, l’integrale può essere riscritto nella forma seguente:

Definiamo, per alleggerire il formalismo,

0

1

1

)0(

)(

)(

ff

fhf

fhf

Il caso più semplice, regola dei trapezi, è quello di approssimare linearmente la funzione consideratanell’intervallo -h,0 e 0,+h:

)()(

)()()(

2010

2101

hOxh

fffxf

hOhxh

fffxf

rispettivamente. Conseguentemente:

)()2(2

)( 3101 hOfff

hdxxf

h

h

Un’approssimazione migliore si ottiene considerandol’espanzione in serie di Taylor all’ordine successivo:

)(2

2)( 32

210111

0 xOxh

fffx

h

fffxf

da cui:

)()4(3

)( 5101 hOfff

hdxxf

h

h

Osserviamo che la precisione di questa espressione èmigliore di quanto atteso dal momento che il terminesuccessivo a quello considerato nello sviluppo in serie di Taylor non contribuisce al calcolo dell’integrale.

Utilizzando queste espressioni si ottengono rispettivamentele espressioni complete per la regola dei trapezi e quella di Simpson:

...)2(2)(2)((2

)( hafhafafh

dxxfb

a

))()(2 bfhbf e

)2(2)(4)((3

)( hafhafafh

dxxfb

a

))()(4...)3(4 bfhbfhaf

# include <stdlib.h># include <stdio.h>main(){ int i,num[5]; for(i=1; i<=5; i=i++) num[i]=i*i; for(i=0; i<=5; i=i++) printf(" num[%2d]=%3d\n",i,num[i]);}

num[ 0]=-1073752240 num[ 1]= 1 num[ 2]= 4 num[ 3]= 9 num[ 4]= 16 num[ 5]= 25

Array (vettore)

/* Paolo Lotti 182668 - trape.c */# include <stdlib.h># include <stdio.h># include <math.h>double fun(double z);int main(void){ double a,b,x,dx,integ,exa; int N,N1,i,coef[1000],rest; printf(" Enter a,b:\n"); scanf("%lf,%lf",&a,&b); exa=fun(b)-fun(a);

a: printf(" Enter N:\n"); scanf("%d",&N); rest=N%2; if(rest!=0) { printf("N must be an even number!\n"); goto a; } dx=(b-a)/N; printf("h=%lf\n\n",dx); N1=N+1; coef[1]=1; coef[N1]=coef[1]; for(i=2; i<=N; i=i+1) { coef[i]=2; }

integ=0.; for(i=1; i<=N1; i=i+1) { printf(" coef[%2d]=%1d\n",i,coef[i]); x=a+(i-1)*dx; integ=integ+coef[i]*fun(x); } integ=integ*dx/2.; printf("\n integ= %lf exact= %lf\n",integ,exa); return 0;}double fun(double g){ double p; p=exp(g); return p;}

/* Paolo Lotti 182668 - simp.c */# include <stdlib.h># include <stdio.h># include <math.h>double fun(double z);int main(void){ double a,b,x,dx,integ,exa; int N,N1,i,ifac,coef[1000],rest; printf(" Enter a,b:\n"); scanf("%lf,%lf",&a,&b); exa=fun(b)-fun(a);

a: printf(" Enter N:\n"); scanf("%d",&N); rest=N%2; if(rest!=0) { printf("N must be an even number!\n"); goto a; } dx=(b-a)/N; printf("h=%lf\n",dx); N1=N+1; coef[1]=1; coef[N1]=coef[1];

ifac=2; for(i=2; i<=N; i=i+1) { ifac=6-ifac; coef[i]=ifac; } integ=0.; for(i=1; i<=N1; i=i+1) { printf(" coef[%2d]=%1d\n",i,coef[i]); x=a+(i-1)*dx; integ=integ+coef[i]*fun(x); }integ=integ*dx/3.; printf("\n integ= %lf exact= %lf\n",integ,exa); return 0; }

double fun(double g){ double p; p=exp(g); return p;}

N h trape simpson

4 0.25 1.727222 1.718319 10 0.10 1.719713 1.718283 20 0.05 1.718640 1.718282 50 0.02 1.718339 1.718282100 0.01 1.718296 1.718282

718282.111

0

edxex

N h trape simpson

4 0.75 19.971895 19.116965 10 0.30 19.228464 19.086387 20 0.15 19.121309 19.085590 50 0.06 19.091262 19.085538 100 0.03 19.086968 19.085537

085537.1913

0

3 edxex

Funzioni il cui argomento è di tipo double e restituiscono un numero anch’esso di tipo double:

acos(x) funzione trigonometrica inversa del coseno di x; il risultato è espresso in radianti ed è compreso tra 0 e

asin(x) funzione trigonometrica inversa del seno di x; il risultato è espresso in radianti ed è compreso tra

atan(x) funzione trigonometrica inversa della tangente di x; il risultato è espresso in radianti ed è compreso tra

cos(x) funzione trigonometrica che calcola il coseno di x, espresso in radianti

cosh(x) coseno iperbolico di x

2

2

,

2

2

,

exp(x) funzione esponenziale di x

log(x) logaritmo naturale di x

log10(x) logaritmo in base 10 di x

sin(x) funzione trigonometrica che calcola il seno di x espresso in radianti

sinh(x) seno iperbolico di x

sqrt(x) funzione radice quadrata di x

tan(x) funzione trigonometrica che calcola la tangente di x espresso in radianti

tanh(x) tangente iperbolica di x