View Full Version : Qcno conosce MATLAB?
Uzi[WNCT]
03-11-2003, 12:02
Chi ha voglia/tempo di aiutare un povero studente di informatica che deve fare l'esame di calcolo numerico ma il prof nn ha tempo di spiegare matlab?? :eek: :p
Se ho risposte affermative (:p) dopo posto delle domandine ;) :D
http://www.frattali.it/matlab/intromatlab.html
Qualcosa so...
ottobrerosso
03-11-2003, 12:24
Originariamente inviato da Uzi[WNCT]
Chi ha voglia/tempo di aiutare un povero studente di informatica che deve fare l'esame di calcolo numerico ma il prof nn ha tempo di spiegare matlab?? :eek: :p
Se ho risposte affermative (:p) dopo posto delle domandine ;) :D
il prof 'non ha tempo' ? ma non c'è un esercitatore o meglio una esercitatrice ? :sbav:
scusa ... ma dove studi informatica ????? Venezia ???? Padova ???
Uzi[WNCT]
03-11-2003, 15:59
C'è l'esercitatore ma lui "confida nel fatto che siamo informatici e nn abbiam difficoltà ad imparare un nuovo linguaggio :eek:".
Cmq, chi ha idea di come risolvere sta roba?
date due matrici A e B di dimensione n = 2500, calcoli il prodotto "per componenti" delle prime n-1 righe di A e di B, ne calcoli il tempo di esecuzione, e poi faccia lo stesso con le prime n-1 colonne
lasciam perdere il 2500 di dimensione che ci mette na cifra anche col mio xp1800, tanto mi basta sapere come si implementa la cosa.
Ho fatto così, ma nn sono sicuro che sia giusto:
max_n = 2500;
A = rand(max_n,max_n);
B = rand(max_n,max_n);
% per colonne
C=zeros(max_n,max_n);
tic
for i=1:max_n
for j=1:max_n
for k=1:max_n
C(i,j)=C(i,j)+A(i,k)*B(k,j);
end
end
end
tempo1 = toc
% per righe
C=zeros(max_n,max_n);
tic
for i=1:max_n
for j=1:max_n
for k=1:max_n
C(i,j)=C(i,j)+A(j,k)*B(k,i);
end
end
end
tempo2 = toc
Sephiroth83
03-11-2003, 21:46
Ahhhhhhh, anch'io ho l'esame di calcolo numerico (lunedì) e domani l'esonero! come ti capisco!!!
Ecco il sito del corso che frequento, c'è un manuale in pdf e qualche esercitazione:
http://calvino.polito.it/~scuderi/INF03.html
Ho una domanda: cosa intendi precisamente per "prodotto per componenti".Centra qualcosa il prodotto puntuale (quello fatto tra elementi con le stesse 'coordinate')?
Uzi[WNCT]
03-11-2003, 22:00
ecco...... me lo domando anche io... il prof ha scritto così.... "per componenti". (cmq credo sia quello)
Sephiroth83
03-11-2003, 22:20
Mi sembra che tu abbia implementato il prodotto normale tra matrici. Io farei qualcosa del genere:
% per righe
C=zeros(max_n - 1,max_n);
tic
for i=1 : max_n - 1
for j=1:max_n
C(i, j) = A(i, j) * B(i, j);
end
end
In più aggiungi tic e toc come hai fatto tu, io non mi sono dilungato. Conta che questo codice l'ho scrito in due minuti senza testarlo, quidni prob non funge. Domani (dopo l'esonero) lo provo e ti faccio sapere.
Uzi[WNCT]
03-11-2003, 22:27
in effetti è vero...... è il prodotto normale.... mo guarderò.... :(
A parte il fatto che, secondo me, il tuo prof. non ha le idee molto chiare sui prodotti matriciali... io risolverei così:
clear
clc
n_max=3;
A=rand(n_max,n_max);
B=rand(n_max,n_max);
tic
for i=1: (n_max-1),
A( :,i ).*B( :,i ); % per colonne
end
tempo1=toc
for i=1: (n_max-1),
A( i,: ).*B( 1,: ); % per righe
end
tempo2=toc
ciao :)
Uzi[WNCT]
04-11-2003, 18:47
Sinceramente credo che il programma nn fosse per niente riguardo alle matrici, ma solo moltiplicazione "numero per numero" solo che nn è chiaro....... :rolleyes:
Sephiroth83
06-11-2003, 00:18
Non basterebbe semplicimente fare così?:
n_max=3;
A=rand(n_max,n_max);
B=rand(n_max,n_max);
tic
A( :, 1 : n_max-1 ).*B( :, 1 : n_max-1); % per colonne
tempo1=toc
A(1 : n_max-1,:).*B(1 : n_max-1,: ); % per righe
tempo2=toc
Uzi[WNCT]
06-11-2003, 08:52
(1 : n_max-1,: )
:eek: si può fare una cosa del genere?!?! FIGATAAAA!!!
Cmq, bene o male quell'esercizio è stato risolto, adesso ce ne sono altri, assolutamente improponibili :(
Originariamente inviato da Uzi[WNCT]
(1 : n_max-1,: )
:eek: si può fare una cosa del genere?!?! FIGATAAAA!!!
Cmq, bene o male quell'esercizio è stato risolto, adesso ce ne sono altri, assolutamente improponibili :(
proponi, proponi...
cmq puoi ridurlo a:
n_max=3;
A=rand(n_max); % crea gia' matrici quadrate...
B=rand(n_max);
tic
A( :, 1 : n_max-1 ) .* B( :, 1 : n_max-1); % per colonne
tempo1=toc
A(1 : n_max-1, : ) .* B(1 : n_max-1, : ); % per righe
tempo2=toc
.... ma è meno leggibile per un principiante!
Originariamente inviato da Uzi[WNCT]
(1 : n_max-1,: )
:eek: si può fare una cosa del genere?!?! FIGATAAAA!!!
Si, ed è una buona regola in matlab cercare di evitare i cicli for allo scopo di non invecchiare nell'attesa che vengano effettuali i calcoli...
Solitamente per i calcoli sulle matrici, matlab fornisce soluzioni che non utilizzano cicli for (dipende dai casi, cmq).
Cmq, bene o male quell'esercizio è stato risolto, adesso ce ne sono altri, assolutamente improponibili :(
Beh, tu postali pure che non hai nulla da perdere, anzi come in questo caso c'è chi potrebbe aiutarti ;)
Aloha!
Originariamente inviato da bsummer
Si, ed è una buona regola in matlab cercare di evitare i cicli for allo scopo di non invecchiare nell'attesa che vengano effettuali i calcoli...
Solitamente per i calcoli sulle matrici, matlab fornisce soluzioni che non utilizzano cicli for (dipende dai casi, cmq).
Aloha!
Esatto bsummer,
fai conto che un o script di un algoritmo lanciato con matlab con un sacco di for su matrici ci stava circa 40 minuti a dare un risultato... Fatto in C lo stesso algoritmo.... 30 secondi :eek: :eek: :eek: :eek: :eek: :eek:
quindi... okkio alle lungaggini Uzi[WNCT]
;)
Uzi[WNCT]
06-11-2003, 13:11
Ragazzi...... ve la siete cercata ;) ;) ;)
Cmq, nn posso postarvi solo il test dell'esercizio altrimenti nn capireste nulla, quindi vi devo dare una intera pagina! :eek:
Per quanto riguarda il for, dopo sistemo il mio programma e metto come avete fatto voi, che mi pare moooooooolto + "profeeeescional" ;) :D
La pagina? Eccola qua!!!
http://www.math.unipd.it/~marcuzzi/DIDATTICA/ESE_CN_Informatica/ESE_CN_Informatica_3.html
Alla fine in basso c'è il testo dell' esercizio :eek:
Uzi[WNCT]
18-11-2003, 17:07
Ritorno a scocciarvi col Matlab :p
Come posso plottare in 3D una matrice del genere?
risultato =
0.3333 0.0005 0.0001 0.0000
0.3333 0.0033 0.0008 0.0003
0.3333 0.0092 0.0023 0.0009
0.3333 0.0173 0.0046 0.0019
0.3333 0.0267 0.0075 0.0032
0.3333 0.0365 0.0108 0.0047
0.3333 0.0463 0.0143 0.0064
0.3333 0.0558 0.0178 0.0082
0.3333 0.0651 0.0214 0.0100
0.3333 0.0741 0.0250 0.0118
Vorrei che:
- in X ci fossero valori 1:10 (cioè gli indici delle righe)
- in Y ci fossero valori 1:4 (cioè gli indici delle colonne)
- in Z ci fossero i valori che si vedono :p
C'è da usare plot3? Mesh? :help:
Uzi[WNCT]
19-11-2003, 18:00
UP! :(
Uzi[WNCT]
12-12-2003, 11:18
Lasciate pure perdere le altre domande, che più o meno ho sistemato.
Ore però ne ho una "semplice" ;)
Se io ho una funzione 3D "complicata", come faccio ad avere le coordinate di un punto Z, conoscendo X e Y?? :confused:
maxithron
12-12-2003, 11:28
Originariamente inviato da Uzi[WNCT]
Se io ho una funzione 3D "complicata", come faccio ad avere le coordinate di un punto Z, conoscendo X e Y?? :confused:
Posto che: sen(sx) >= sen(dx) dove sx=sinistra e dx=destra....
ti manca il punto G.....
trovato quello potrai "dare" molte soddisfazioni.......
:rotfl: :rotfl: :confused: :confused:
ehm...
Uzi[WNCT]
12-12-2003, 11:43
Originariamente inviato da maxithron
Posto che: sen(sx) >= sen(dx) dove sx=sinistra e dx=destra....
ti manca il punto G.....
trovato quello potrai "dare" molte soddisfazioni.......
:rotfl: :rotfl: :confused: :confused:
ehm...
:spam:
:huh:
Uzi[WNCT]
12-12-2003, 12:10
Originariamente inviato da Uzi[WNCT]
Lasciate pure perdere le altre domande, che più o meno ho sistemato.
Ore però ne ho una "semplice" ;)
Se io ho una funzione 3D "complicata", come faccio ad avere le coordinate di un punto Z, conoscendo X e Y?? :confused:
risolto con metodo piuttosto BRUTALE...
maxithron
13-12-2003, 15:34
Originariamente inviato da Uzi[WNCT]
risolto con metodo piuttosto BRUTALE...
cioè? spiega....spiega.... :)
Uzi[WNCT]
13-12-2003, 15:39
ho fatto un ciclo for ed ho "sparato" di cattiveria i valori delle variabili X e Y (era una funzione 3d) nella funzione.
Metodo ROZZO ma efficace..... sicuramente ci deve essere un sistema migliore, ma nn lo conosco.
michele.t
15-12-2003, 11:19
Originariamente inviato da Uzi[WNCT]
ho fatto un ciclo for ed ho "sparato" di cattiveria i valori delle variabili X e Y (era una funzione 3d) nella funzione.
Metodo ROZZO ma efficace..... sicuramente ci deve essere un sistema migliore, ma nn lo conosco.
fammi capire bene: hai X e Y. Hai anche z = f(x, y); vuoi risolvere z per quei due valori?
non vedo l'utilizzo del for. non puoi fare semplicemente:
x = 10;
y = 10;
z = sin(x) + cos(y) + x^2 + y^2
se invece hai x e y in forma vettoriale
x = [10 20 30];
y = [40 50 60];
z = sin(x) + cos(y) + x.^2 + y.^2
buon divertimento con matlab :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.