Problemi (e soluzioni) del lunedì
- Metodo di eliminazione di Gauss: ecco uno script R
che tratta anche i candidati pivot nulli, per chi non lo avesse
ancora fatto:
Gauss_elim.R
Esercizi:
- scrivere la versione C (facendo eventualmente uso della function
RowsSwap()
per lo swap di due righe di una matrice, proposta a suo tempo);
- modificare quindi sia lo script R che il programma C al fine
di calcolare il determinante (si ricorda di tenere memoria
il numero swap di righe, in quanto ciascuno di essi ne cambia
il segno).
- Scrivere una semplice calcolatrice in C funzionante a
riga di comando e che effettui
semplici operazioni aritmetiche (più altre a piacere)
(altre informazioni sono messe come commenti all'ossatura)
- Variante del programma di ordinamento 'molto ingenuo'
(sorting_0.c): invece di spostare
i valori, in ordine crescente, in un nuovo vettore (allocare
inutilmente vettori di cui se ne potrebbe fare a meno è
è considerato molto negativamente fra i programmatori 'seri'!)
si implementi il seguente algoritmo (ancora 'poco furbo'):
- il primo valore minimo viene messo in v[0] e quello
che stava in v[0] viene messo dove è stato prelevato
quello spostato (ovviamente serve una variabile temporanea
per lo swap);
- quindi si esegua una nuova ricerca del valore minimo,
ma questa volta a partire da v[1], etc. etc.
- Per chi avesse ancora problema, ecco il codice con il prodotto
di matrici calcolato in una funzione (il proramma fa anche
uso di una funzione per la stampa di matrici)
matrici_prod.c
Esercizio: farne una versione che operi su valori float.
- Soluzione numerica del problema
dei lanci per un angolo qualsiasi, in presenza
della sola forza peso, con un angolo
qualsiasi rispetto al piano orizzontale, seguendo il punto
materiale finché non torna alla stessa quota del punto di partenza:
Note:
- se il 'punto materiale' è sparato con velocità v (in modulo)
e angolo θ, le componenti x e y della velocità iniziali
saranno date da vx=v*cos(&theta:); e
vx=v*cos(θ);
- l'evoluzione del 'proiettile' va seguita mediante gli
incrementi di x e di y, come fatto nel caso della molla
(il fatto che ora abbiamo due coordinate invece di una sola
può essere considerato un dettaglio), con la semplificazione
che in questo caso le accelerazioni orizzontali e verticali
sono costanti (0 e -g, rispettivamente);
- cominciare a scrivere il programma in R, in modo da poter
controllare graficamente la soluzione;
- pensare anche alla versione in C, limitandosi per il momento
a stampare, ad ogni step della soluzione numerica,
t, x e y (nella prossima lezione
vedremo come passare queste informazioni a R e graficare
il risultato)
(Ovviamente in questo caso è possibile avere una soluzione analitica
del problema, come molti già sapranno. La soluzione numerica di
questo caso facile va quindi vista in preparazione di casi più
complicati, come quando considereremo anche la resistenza dell'aria.)
Torna alla pagina del corso