SOFTWARE > Linguaggi di programmazione e scripting

[Commodore Basic] Calcolo degli integrali con metodo Simpson

(1/2) > >>

TheKaneB:
Ecco un programmino che ho fatto in questi giorni per il Commodore 16.

Funziona su Commodore 16 e (credo) su Plus 4 e Commodore 128 (in modalità C128).

Qui il codice:


--- Codice: ---10 DEF FN F(X) = 3*X + 5*X*X - SIN(X)
20 PRINT "INTEGRAZIONE CON METODO DI SIMPSON"
30 PRINT "ESTREMO A"
40 INPUT A
50 PRINT "ESTREMO B"
60 INPUT B
70 PRINT "SUDDIVISIONI"
80 INPUT N%
90 PRINT "ATTENDERE PREGO..."
100 N% = N% * 2
110 H = (B-A) / N%
120 I% = 1
130 S = FNF(A)
140 DO WHILE I% < N%
150 X = A + H * I%
160 S = S + 4 * FNF(X)
170 I% = I% + 2
180 LOOP
190 I% = 2 : N1% = N% - 1
200 DO WHILE I% < N1%
210 X = A + H * I%
220 S = S + 2 * FNF(X)
230 I% = I% + 2
240 LOOP
250 S = S + FNF(B)
260 F = H * S / 3
270 PRINT "INTEGRALE DA ";A;" A ";B;" = ";F

--- Termina codice ---

Il funzionamento è molto semplice:
Innanzitutto accendere la macchina o digitare NEW per cancellare la memoria programma.
Inserire tutto il codice. Bisogna inserire la propria funzione da integrare nella definizione della riga 10, in questo caso ho inserito la funzione f(x) = 3x + 5x^2 - sin(x).
Poi bisogna lanciare il programma con RUN.
Inserire l'estremo di partenza A per l'integrazione e battere RETURN.
Inserire l'estremo di fine B per l'integrazione e battere RETURN.
Inserire il numero di suddivisioni da usare nell'algoritmo per trovare l'integrale approssimato. Un numero maggiore di suddivisioni aumenta il tempo di esecuzione (complessità O(N) ) ma aumenta di molto la precisione. Per funzioni polinomiali basta una decina di suddivisioni per avere risultati molto accurati, mentre per funzioni complicate con variazioni molto rapide (esponenziali, trigonometriche e funzioni composte) bisogna fare qualche centinaio di suddivisioni.
Battere RETURN e attendere il risultato.

Note:
le variabili A, B, S ecc sono variabili "double" a 40 bit
I%, N% sono variabili intere a 16 bit
nella riga 200 potevo fare DO WHILE I% < N% - 1, ma l'interprete Basic del C16 non accetta espressioni nel DO WHILE, quindi ho usato una variabile intermedia chiamata N1%.
Per approfondimenti sugli integrali e sul metodo di integrazione di Simpson vedi http://numerici.liceofoscarini.it/quadr ... mpson.html

Enjoy  :dance:

AmigaCori:
:techie-computer:

Mi quasi pento di non avere una macchina C= non Amiga :(

TheKaneB:
puoi usare l'emulatore VICE... emula tutte le macchine commodore dal PET2001 al C128 (inclusa la parte Z80 e l'uscita video a 80 colonne)  :dance:

rebraist:
Non conosco nè il basic del c16 nè quello del 128.
Sicuro in quello del 64 non c'era l'istruzione loop-do-while.
Ma il 128 gestiva dati da 40bit? :o  spettacolare.
p.s. complimenti per la scelta di realizzare il prg in questione per una macchina retro-alternativa!

AmigaCori:

--- Citazione da: "TheKaneB" ---puoi usare l'emulatore VICE... emula tutte le macchine commodore dal PET2001 al C128 (inclusa la parte Z80 e l'uscita video a 80 colonne)  :dance:
--- Termina citazione ---


Mmmm io sono tipo hardware, mi piace "il vecchio" perche' e' diverso da nuovo  :mrgreen:  il rumore dei tasti, le plastiche ingiallite, smontare e vedere la componentistica pensando che quando gira un programma i "bit" passano per quei transistor, resistenze...di 20-30-40 anni fa.
 


:drool:

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa