Aiuto programma Matlab
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?)


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
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):
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?
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?
Si apatriarca intendevo quello...cmq no non posso utilizzare funzioni gia implementate in Matlab ne simile ho a disposizione solo le funzioni di base!
Il metodo più semplice è quello di cercare ogni elemento di entrambi i vettori, nell'altro.
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$
Penso faccia abbastanza schifo perchè non so ne come inizializzare i vettori! Poi come potrei andare a avanti? aiutino? grazie mille
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

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 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
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...".
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

Grazie mille ancora del tuo aiuto...all prossima
