Aiuto programma Matlab

Vito L
Salve a tutti ragazzi..io non sono nuovo del foru ma sono nuovo in questa sezione :) Sono iscritto al secondo anno di Matematica e devo preparare un esame sulla programmazione in Matlab! Spero di poter trovare un valido aiuto qui :) Non so tanto da dove partire ma vi posto un esercizio che cerco di fare e la mia possibile risoluzione
Grazie mille

Vito L



Dato un vettore $\x$ denotiamo con $\Sx$ l'insieme costituito dagli elementi di $\x$ Ad esempio $\x=[1,2,0,2,1]->Sx={1,2,0}$ $\y=[3,4,5,4,6]->Sy={3,4,5,6}$ Scrivere quindi una funzione Matlab che abbia in input due vettori $\x$ e $\y$ ed in output una variabile $\w$ così definita $w={(-1, Sx sub Sy & Sx!=Sy),(1, Sy sub Sx Sy!=Sx),(0, Sx=Sy),(text{Nan}, text{altrimenti}):}$


Allora non so proprio da dove partire fare una function con in input due vettori (devo poi definirli prima?)

Risposte
apatriarca
Prendi un file chiamato con il nome della tua funzione ed estensione .m e poi scrivici dentro (sostituisci a nomefunzione il nome della tua funzione):
function w = nomefunzione(x, y)
%% Qui inserisci i commenti della funzione che andranno stampati scrivendo help nomefunzione.
%   L'output della funzione andrà scritto in w

% Qui scriverai il codice della tua funzione

end

Che cosa intendi esattamente con \(SxSy\)? Intendevi dire \(Sy \subset Sx, \, Sy \neq Sx\)? Qualche idea su come farlo? Hai la possibilità di fare uso di funzioni già implementate in matlab come setdiff o simili?

Vito L
Si apatriarca intendevo quello...cmq no non posso utilizzare funzioni gia implementate in Matlab ne simile ho a disposizione solo le funzioni di base!

apatriarca
Il metodo più semplice è quello di cercare ogni elemento di entrambi i vettori, nell'altro.

Vito L
Grazie della risposta apatriarca ho provato a dare una occhiatina alla funzione setdiff e dintorni e ho trovato la funzione unique che mi poteva essere utile e ho provato a scrivere allmeno l'inizio del programma, ovvero quello che mi permetteva di trovare $\Sx$ ed $\Sy$

function [ w ] = prova( x,y )
S=unique(x)
T=unique(y)
if S=T 
    w=1

end



Penso faccia abbastanza schifo perchè non so ne come inizializzare i vettori! Poi come potrei andare a avanti? aiutino? grazie mille :)

apatriarca
Non vedo grosse differenze tra usare setdiff e unique. Nel tuo codice non puoi comunque confrontare i due insiemi scrivendo S=T in quanto il segno di uguale è usato per l'assegnamento e non per il confronto. Nel mio ultimo post non stavo comunque insistendo sull'uso di setdiff, ma ti stavo consigliando di impostare il codice nel seguente modo (pseudocodice):
diffXY = 0
per ogni elemento xi di x
    trovato = false
    per ogni yj di y
        se xi == yj
            trovato = true
    se trovato == false
        diffXY = diffXY+1

diffYX = 0
per ogni elemento yi di y
    trovato = false
    per ogni xj di x
        se yi == xj
            trovato = true
    se trovato == false
        diffYX = diffYX+1

se diffXY == 0 && diffYX == 0
    w = 0
altrimenti se diffXY == 0 && diffYX > 0
    w = -1
altrimenti se diffXY > 0 && diffYX == 0
    w = 1
altrimenti
    w = NaN

Vito L
"apatriarca":
Non vedo grosse differenze tra usare setdiff e unique. Nel tuo codice non puoi comunque confrontare i due insiemi scrivendo S=T in quanto il segno di uguale è usato per l'assegnamento e non per il confronto. Nel mio ultimo post non stavo comunque insistendo sull'uso di setdiff, ma ti stavo consigliando di impostare il codice nel seguente modo (pseudocodice):
diffXY = 0
per ogni elemento xi di x
    trovato = false
    per ogni yj di y
        se xi == yj
            trovato = true
    se trovato == false
        diffXY = diffXY+1

diffYX = 0
per ogni elemento yi di y
    trovato = false
    per ogni xj di x
        se yi == xj
            trovato = true
    se trovato == false
        diffYX = diffYX+1

se diffXY == 0 && diffYX == 0
    w = 0
altrimenti se diffXY == 0 && diffYX > 0
    w = -1
altrimenti se diffXY > 0 && diffYX == 0
    w = 1
altrimenti
    w = NaN


apatriarca non capisco tanto il significato di

per ogni elemento xi di x
    trovato = false

apatriarca
intendo dire che devi definire una variabile trovato e settarla a 0 (mi sta venendo il dubbio che non ci sia false e true in matlab). Ma il ciclo deve includere anche le righe seguenti (tutte quelle che sono indentate rispetto alla riga con su scritto "per ogni...".

Vito L
Grazie mille apatriarca ieri sono andato a parlare con il professore del mio corso e partendo da una basa data da te abbiamo sviluppato insieme il programma :) appena ho un secondo lo posto qui così se servisse a qualcuno....
Grazie mille ancora del tuo aiuto...all prossima ;)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.