Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81

    [Matlab]Costruzione Matrice con vettorizzazione

    Ciao a tutti dovrei costruire la matrice di Hilbert prima componente per componente, tenendo conto che si tratta di una matrice simmetrica e che un generico elemento è dato da:

    A(i, j) = 1/i+j -1

    e successivamente usando la vettorizzazione. Nessun problema sulla costruzione componente per componente, ma ho difficoltà a costruirla con la vettorizzazione. Qualche suggerimento ??? Grazie

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Hai problemi particolari con la sintassi MATLAB o il problema è l' algoritmo?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Il problema è la sintassi Matlab, l'algoritmo è semplice la formula l'ho specificata in precedenza e anche implementata componente per componente. Ho dato un'occhiata alla vettorizzazione, non riesco a capire la sintassi adatta per implementare l'operazione di costruzione di ogni elemento della matrice.

  4. #4
    Ciao tina8,
    qualche settimana fa, durante un corso di Matlab, ci hanno chiesto di implementare un algoritmo per calcolare il valore di Pi Greco utilizzando la somma di 50000+ numeri generati da questo algoritmo. Ci hanno chiesto di implementare l'algoritmo componente per componente e poi utilizzando la vettorizzazione.

    Purtroppo non ho con me i sorgenti Matlab. Dovevamo implementare una somma 'infinita'. Ogni elemento della somma veniva calcolato, se ricordo bene (o qualcosa di simile):

    for 1:50000
    next_number_to_add = ((-1)^n * (1/3)^(2*n-1))/(2*n-1)
    pi = pi + next_number_to_add
    endfor

    L'implementazione componente per componente si fa utilizzando cicli for, come avrai gia' fatto. Invece per la vettorizzazione, abbiamo creato un vettore di numeri progressivi:

    n = [1:MAX_NUM], dove MAX_NUM era 50000 nel nostro caso. Questo crea una matrice [1, 2, 3, ..., MAX_NUM].

    Invece di utilizzare cicli for, abbiamo calcolato il next_number_to_add automaticamente facendo:
    n = [1:50000]
    n = ((-1)^n.* (1/3)^(2.*n-1))/(2.*n-1)
    pi = cumsum(n).

    la seconda riga calcola il valore di next_number_to_add per ogni elemento di n, e assegna il risultato del calcolo a se stesso. Il punto prima di ogni operazione: '.*' serve ad effettuare quell'operazione su tutti gli elementi del vettore in contemporanea. Quindi in una riga sola, calcolo il nuovo valore di n, per ogni elemento di n!
    cumsum() calcola la somma di tutti gli elementi in un vettore.

    Non sono sicuro di come fare lo stesso su una matrice n x m, ma scommetto che devi fare una cosa simile a cio' che abbiamo fatto noi.

    Prova a cominciare con:

    i = [1:10]
    j = [1:10]

    A(i,j) = 1./i + j - 1

    Spero di esserti stato d'aiuto in qualche modo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.