Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Problema Matlab

  1. #1
    Utente di HTML.it L'avatar di Lucadal
    Registrato dal
    Apr 2004
    Messaggi
    161

    Problema Matlab

    Ciao ragazzi,
    leggendo la discussione introduttiva non mi è sembrato di aver visto collegamenti utili per il Matlab. Provo lostesso a chiedervi:

    sto facendo un programma in cui uso tre cicli for annidati e vari costrutti if all'interno di tali for. Quando vado a simulare però mi dice sempre "end expected, end of input founf", quando io invece li ho terminati tutti i costrutti ed i cicli che ho usato.
    Ora mi sono accorto, che inserendo non so quanti end alla fine, funziona. Ma se non c'è alcun ciclo da terminare, perchè richiede tutti quegli end?

    PS: giorni fa ho fatto delle simulazioni abbastanza corpose con il notebook che sto usando, che impegnavano all'incirca otto ore. Adesso aprendo il task manager, appena acceso il notebook, ci sono all'incirca 350 MB di memoria allocata, e la cpu ogni tanto arriva anche ad un livello di utilizzo del 100% senza che io faccia nulla.

    Cosa devo pensare? Non è che la memoria allocata con le simulazioni precedenti non è più stata liberata, ed il fatto che mi chiede più finalizzazioni di cicli è attinente con le precedenti simulazioni?

    Spero possiate aiutarmi perchè non so più cosa pensare.

    Aspetto impaziente vostre notizie.

    Saluti.
    "Liberty once again must become more important to us than the desire to security and material comfort." Ron Paul

    LUCA

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: Problema Matlab

    Originariamente inviato da Lucadal
    Cosa devo pensare? Non è che la memoria allocata con le simulazioni precedenti non è più stata liberata, ed il fatto che mi chiede più finalizzazioni di cicli è attinente con le precedenti simulazioni?
    Non posso aiutarti sul matlab perché non conosco il linguaggio ma questo direi che è a dir poco assurdo... se anche hai allocato delle pietre in memoria nel momento in cui spegni la macchina questa viene resettata per un fatto fisico, visto che la RAM è una componente elettronica del computer che quindi senza corrente elettrica non può funzionare. Alla peggio si può pensare che si sia rovinata ma è assurdo che sia rimasta "piena"...

  3. #3
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    quoto YuYevon

    prova a postare il codice matlab

  4. #4
    Utente di HTML.it L'avatar di zoseppe
    Registrato dal
    Jan 2005
    Messaggi
    306

    Re: Problema Matlab

    Originariamente inviato da Lucadal
    [...]Ora mi sono accorto, che inserendo non so quanti end alla fine, funziona. Ma se non c'è alcun ciclo da terminare, perchè richiede tutti quegli end? [...]
    in matlab ogni volta che utilizzi una struttura iterattiva o condizionale ogni blocco di istruzioni inizia con una parola riservata e termina con un end: quindi se hai tre cicli for, per ognuno di essi dovrà corrispondere un end di chiusura e lo stesso per ogni if di cui hai parlato. Bada bene, il posizionamento non è random, ne tantomeno si inseriscono gli end a caso (...non so quanti...)!Apri il blocco, inserisci il codice che può contenere altri blocchi, e poi lo chiudi con end...Prova a postare il codice così si può essere più precisi...

  5. #5
    Utente di HTML.it L'avatar di Lucadal
    Registrato dal
    Apr 2004
    Messaggi
    161

    codice Matlab

    Ho provato a simulare facendo apparire l'indice del primo ciclo prima di ognuno degli end aggiuntivi che ho messo. Effettivamente fa più cicli... ma come è possibile???

    Comunque io mi sto cominciando a preoccupare... perchè il notebook è sempre con la ventola accesa... ed il ciclo idle di sistema è sempre al 99%, sebbene la cpu non sia sempre al 100%. Ma se io non faccio nulla perchè ogni tanto dovrebbe andare al 100%? E poi mi sono accorrto che la memoria allocata aumenta quando mi connetto... sospetto qualche malware, ma ho scansionato con SpybotS&D e non è stato trovato nulla. adesso faccio fare anche una scansione all'antivirus.... Comunque il pc è notevolmente più lento.


    Di seguito il codice:


    clear all
    close all

    nc = 100; % numero di realizzazioni di canale
    ns = 100; % numero di simboli che trasmetto

    snr_max = 30;
    delta_snr = 1;
    snr_db = [0:delta_snr:snr_max];
    snr = 10 .^ (snr_db / 10);
    dim_asc = size(snr);

    a = [1+sqrt(-1), -1+sqrt(-1), -1-sqrt(-1), 1-sqrt(-1)] / sqrt(2);
    x = zeros(2,1);

    nbt = 2 * ns * nc;

    y = zeros(dim_asc);
    y_zf = zeros(dim_asc);

    for i=1:1:nc
    H = (randn(2,2) + (sqrt(-1) * randn (2,2))) / sqrt(2);
    Cherm = pinv(H);

    for j=1:1:dim_asc

    nezf = 0;
    ber_zf = zeros(dim_asc);

    for k=1:1:ns/2

    x = [a(ceil(rand*4)); a(ceil(rand*4))];
    n = (randn(2,1) + sqrt(-1) * randn(2,1)) / sqrt(2);

    y = sqrt(snr(j) / 2) * H * x + n;

    y_zf = Cherm * y;

    if real(y_zf(1)) > 0 && imag(y_zf(1)) > 0
    szf(1) = a(1);
    else if real(y_zf(1)) < 0 && imag(y_zf(1)) > 0
    szf(1) = a(2);
    else if real(y_zf(1)) < 0 && imag(y_zf(1)) < 0
    szf(1) = a(3);
    else
    szf(1) = a(4);
    end

    if real(y_zf(2)) > 0 && imag(y_zf(2)) > 0
    szf(2) = a(1);
    else if real(y_zf(2)) < 0 && imag(y_zf(2)) > 0
    szf(2) = a(2);
    else if real(y_zf(2)) < 0 && imag(y_zf(2)) < 0
    szf(2) = a(3);
    else
    szf(2) = a(4);
    end

    if szf(1) ~= x(1)
    if real(szf(1)) ~= real(x(1)) && imag(szf(1)) ~= imag(x(1))
    nezf = nezf + 2;
    else
    nezf = nezf +1;
    end
    end

    if szf(2) ~= x(2)
    if real(szf(2)) ~= real(x(2)) && imag(szf(2)) ~= imag(x(2))
    nezf = nezf + 2;
    else
    nezf = nezf +1;
    end
    end

    end % ns (simboli)
    end % dim_asc (snr)
    ber_zf(j) = ber_zf(j) + nezf;

    end % nc (canali)

    ber_zf = ber_zf / nbt;

    end % fa più cicli anche se io non gliel'ho detto. Mah.....
    end
    end
    end

    plot(snr_db, ber_zf, 'k'),
    title('Prestazioni'),
    xlabel('snr [dB]'),
    ylabel('BER'),
    legend('ZF'),
    grid on;


    PS: il codice è scritto in maniera meglio interpretabile di come appare... purtroppo sul forum non appaiono gli spazi iniziali.

    GRAZIE DELL'INTERESSAMENTO.
    "Liberty once again must become more important to us than the desire to security and material comfort." Ron Paul

    LUCA

  6. #6
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    Con questa indentazione si fa una fatica incredibile a capire dove e cosa chiudi con gli end prova a postarlo usando l'opzione CODE lo # nell'interfaccia di risposta del forum

  7. #7
    Utente di HTML.it L'avatar di Lucadal
    Registrato dal
    Apr 2004
    Messaggi
    161

    non riesco a farlo apparire come codice...

    Spero di aver fatto quello che mi hai detto...

    Di seguito il codice:


    #clear all
    close all

    nc = 100; % numero di realizzazioni di canale
    ns = 100; % numero di simboli che trasmetto (Scegliere pari)

    snr_max = 30;
    delta_snr = 1;
    snr_db = [0:delta_snr:snr_max];
    snr = 10 .^ (snr_db / 10);
    dim_asc = size(snr);

    a = [1+sqrt(-1), -1+sqrt(-1), -1-sqrt(-1), 1-sqrt(-1)] / sqrt(2);
    x = zeros(2,1);

    nbt = 2 * ns * nc;

    y = zeros(dim_asc);
    y_zf = zeros(dim_asc);
    ber_zf = zeros(dim_asc);

    for i=1:1:nc
    H = (randn(2,2) + (sqrt(-1) * randn (2,2))) / sqrt(2);
    Cherm = pinv(H);

    for j=1:1:dim_asc

    nezf = 0;

    for k=1:1:ns/2

    x = [a(ceil(rand*4)); a(ceil(rand*4))];
    n = (randn(2,1) + sqrt(-1) * randn(2,1)) / sqrt(2);

    y = sqrt(snr(j) / 2) * H * x + n;

    y_zf = Cherm * y;

    if real(y_zf(1)) > 0 && imag(y_zf(1)) > 0
    szf(1) = a(1);
    else if real(y_zf(1)) < 0 && imag(y_zf(1)) > 0
    szf(1) = a(2);
    else if real(y_zf(1)) < 0 && imag(y_zf(1)) < 0
    szf(1) = a(3);
    else
    szf(1) = a(4);
    end

    if real(y_zf(2)) > 0 && imag(y_zf(2)) > 0
    szf(2) = a(1);
    else if real(y_zf(2)) < 0 && imag(y_zf(2)) > 0
    szf(2) = a(2);
    else if real(y_zf(2)) < 0 && imag(y_zf(2)) < 0
    szf(2) = a(3);
    else
    szf(2) = a(4);
    end

    if szf(1) ~= x(1)
    if real(szf(1)) ~= real(x(1)) && imag(szf(1)) ~= imag(x(1))
    nezf = nezf + 2;
    else
    nezf = nezf +1;
    end
    end

    if szf(2) ~= x(2)
    if real(szf(2)) ~= real(x(2)) && imag(szf(2)) ~= imag(x(2))
    nezf = nezf + 2;
    else
    nezf = nezf +1;
    end
    end

    end % ns (simboli)
    end % dim_asc (snr)
    ber_zf(j) = ber_zf(j) + nezf;
    i
    end % nc (canali)

    ber_zf = ber_zf / nbt;

    end % fa più cicli anche se io non gliel'ho detto. Mah.....
    end
    end
    end

    plot(snr_db, ber_zf, 'b'),
    title('Prestazioni'),
    xlabel('snr [dB]'),
    ylabel('BER'),
    legend('ZF'),
    grid on;



    Non funziona...cosa sto sbagliando?
    "Liberty once again must become more important to us than the desire to security and material comfort." Ron Paul

    LUCA

  8. #8
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    premi il pulsante # vicino a quello php List... dell'interfaccia di invio post e ci incolli il codice oppure insersci a mano i tag

    code


    tuo codice


    /code entrambi tra parentesi quadre

  9. #9
    Utente di HTML.it L'avatar di Lucadal
    Registrato dal
    Apr 2004
    Messaggi
    161

    speriamo che va bene....... :)

    Ci provo ... eheheh

    Appena ci azzecco, sicuro che non me lo dimentico più come si scrive il codice sul forum di HTML... ahahaha Sto facendo una macelloooo..... ahahaha



    codice:
    clear all
              close all
    
              nc = 100;       % numero di realizzazioni di canale
              ns = 100;       % numero di simboli che trasmetto (Scegliere pari)
    
              snr_max = 30;
              delta_snr = 1;
              snr_db = [0:delta_snr:snr_max];
              snr = 10 .^ (snr_db / 10);
              dim_asc = size(snr);
    
              a = [1+sqrt(-1), -1+sqrt(-1), -1-sqrt(-1), 1-sqrt(-1)] / sqrt(2);
              x = zeros(2,1);
    
              nbt = 2 * ns * nc; 
    
              y = zeros(dim_asc);
              y_zf = zeros(dim_asc);
              ber_zf = zeros(dim_asc);
    
              for i=1:1:nc
                  H = (randn(2,2) + (sqrt(-1) * randn (2,2))) / sqrt(2);
                      Cherm = pinv(H);
        
                      for j=1:1:dim_asc
            
                      nezf = 0;
            
                      for k=1:1:ns/2
                
                          x = [a(ceil(rand*4)); a(ceil(rand*4))];
                          n = (randn(2,1) + sqrt(-1) * randn(2,1)) / sqrt(2);
                
                          y = sqrt(snr(j) / 2) * H * x + n;
                
                          y_zf = Cherm * y;
                
                          if real(y_zf(1)) > 0 && imag(y_zf(1)) > 0
                              szf(1) = a(1);
                          else if real(y_zf(1)) < 0 && imag(y_zf(1)) > 0
                              szf(1) = a(2);
                          else if real(y_zf(1)) < 0 && imag(y_zf(1)) < 0
                              szf(1) = a(3);
                          else
                              szf(1) = a(4);
                          end
                
                          if real(y_zf(2)) > 0 && imag(y_zf(2)) > 0
                              szf(2) = a(1);
                          else if real(y_zf(2)) < 0 && imag(y_zf(2)) > 0
                              szf(2) = a(2);
                          else if real(y_zf(2)) < 0 && imag(y_zf(2)) < 0
                              szf(2) = a(3);
                          else
                              szf(2) = a(4);
                          end
                
                          if szf(1) ~= x(1)
                              if real(szf(1)) ~= real(x(1)) && imag(szf(1)) ~= imag(x(1))
                                  nezf = nezf + 2;
                              else
                                  nezf = nezf +1;
                              end
                          end
                
                          if szf(2) ~= x(2)
                              if real(szf(2)) ~= real(x(2)) && imag(szf(2)) ~= imag(x(2))
                                  nezf = nezf + 2;
                              else
                                  nezf = nezf +1;
                              end
                          end
                
                      end % ns (simboli)   
          end % dim_asc (snr)
          ber_zf(j) = ber_zf(j) + nezf;
              i  
    end % nc (canali)
    
    ber_zf = ber_zf / nbt;
    
    end     % fa più cicli anche se io non gliel'ho detto. Mah.....
    end
    end
    end
    
    plot(snr_db, ber_zf, 'b'),
    title('Prestazioni'),
    xlabel('snr [dB]'),
    ylabel('BER'),
    legend('ZF'),
    grid on;
    "Liberty once again must become more important to us than the desire to security and material comfort." Ron Paul

    LUCA

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    UN SOLO [ CODE ] all'inizio e UN SOLO [ /CODE ] alla fine ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.