Funzione matlab problemi dati in input

summer.911
Buonasera ragazzi,
premetto che sono un intrusa in questa sezione visto che studio ingegneria..ma ho un problema con Matlab! E' un problema estremamente stupido ma non riesco a risolverlo!
Ho creato una funzione che calcola, preso un vettore in input,la somma dei suoi elementi,la media e individua il max e il minimo..il rpogramma è qeusto :
function[somma,media,m,M]=calcolo(v)
n=length(v);
somma=v(1);
M=somma;
m=somma;
for i=2:n
if (v(i) m=v(i);
end
if v(i)>M
M=v(i);
end
somma=somma+v(i);
end
media=somma/n;
end
Ora non riesco a richiamare il mio vettore! Ho salvato sul blocco note i suoi elementi salvando con v il file e inserendo al suo interno dei numeri e l ho salvato proprio nella cartella dove ho salvato il programma ( che per giunta è quella in alto nella prima pag)! Quando richiamo il programma mi esce questo errore "
?? Input argument "v" is undefined.

Error in ==> calcolo at 2
n=length(v);"
e non riesco a capire dove sia l errore perchè penso sia nel salvataggio dei dati del vettore!
Grazie mille in anticipo
baci :D

Risposte
walter891
indipendentemente da questa funzione sei capace di usare matlab? i dati che servono alle function devono essere dichiarati nello script che stai usando o nell'area di lavoro, la funzione non legge i dati salvati nel file che hai chiamato "v"

summer.911
Non c'è bisogno di essere così "simpatico"...se fossi stata capace ad usare matlab forse non avrei di questi problemi e avrei già l'esame a libretto! Grazie della risposta..ma se devi essere così carino e cortese la prox volta evita di rispondere!

walter891
scusami ma essendo che hai postato tutta la funzione pensavo che ti aspettavi di aver commesso un errore nel codice... invece il problema è di un altro tipo quindi cerco di spiegartelo meglio; con matlab si possono salvare 2 tipi di file: gli script e le function. Nel tuo caso la function è quella dove hai scritto il codice e a prima vista mi sembra corretta, invece lo script può esserti utile per dichiarare il vettore dei dati e poi richiamare la function.
Nello script ti basta scrivere poche righe:
v=[insieme dei valori di v];
calcolo(v)

eseguendo lo script otterai il risultato

summer.911
Scusami se sono stata antipatica! Forse dovevo premettere che non sono un genio dell'informatica!
Grazie mille per la spiegazione..e in questo modo la funzione parte! Il mio probelma è un problema un pò differente.
Nella mia traccia d'esame viene richiesto di leggere un vettore ( o matrice) da un file e lavorare su questo ora io ho due funzioni,sia per il leggi vettore che per l analisi del vettore stesso ( ad es individuare somma,media ecc..) ma il mio programma quando lo richiamo mi fa svolgere solo la prima e non riescoa capire se è dovuto a qualche errore di scrittura o qualche errore concettuale!
Ti copio un esempio..
%Calcolare,preso in input un vettore,la somma e la media dei suoi elementi
%individuare inoltre il max e il minimo
function[n,v]=leggivettore(v)
fd=fopen('v.txt','rt');
n=fscanf(fd,'%d',1);
for i=1:n
v(i)=fscanf(fd,'%f',1);
end

function[somma,media,max,min]=analisivettore(leggivettore)
v=length(n);
i=0;
somma=0;
media=0;
for i=1:n
somma=somma+v(i);
media=somma/n;
end
max=v(1)
for i=1:n
if v(i)>v(1)
max=v(1);
end
end
min=v(1)
for i=1:n
if v(i) min=v(i);
end
end
disp ('i valori cercati sono:')
v
somma
media
max
min
return;
Grazie per la disponibilità :)

summer.911
ci sn degli errori di scrittura al rigo 2 n=length(v) sorry :P

walter891
ok ora la logica torna: se i dati sono scritti in un file di testo prima di essere usati devono essere letti con la funzione apposita. Non ho mai fatto questa operazione con matlab ma secondo me si può fare in questo modo:
[n,v]=leggivettore(v); %per leggere i dati dal file
[somma,media,max,min]=analisivettore(v) %perchè v è diventato l'uscita dell'altra funzione

summer.911
Scusa ancora...ma io ho fatto così e mi fa girare solo la prima,si ferma dopo la prima funzione e sono sicura che la seconda è fatta bene perchè presa singolarmente gira!
Grazie ancora in ogni caso :) sei stato gentilissimo! :)

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