Mesh con matlab
Salve, ho un problema che dovrebbe essere molto semplice da risolvere...sto usando il comando pdepoly per fare una mesh, definisco perciò i vertici del poligono che costituisce la forma che voglio ricreare ma non riesco a cambiare i valori degli assi, nel senso che mi fa vedere solo una piccola area intorno all'origine mentre io ovviamente vorrei vedere tutta la figura.
Come si risolve? chiedo scusa anticipatamente, probabilmente è una cretinata ma sono ai primi passi con matlab
grazie mille!
Come si risolve? chiedo scusa anticipatamente, probabilmente è una cretinata ma sono ai primi passi con matlab

grazie mille!
Risposte
Prova a postare il codice che hai usato
pdepoly([0 500 1000 1500 2000 2000 1500 1000 500 0],[0 0 150 0 0 500 500 350 500 500]);
Quando ti apre la figura, vai su Options > Axis Limits...e setti a mano. Non so se si possa fare direttamente con una riga di codice ma penso di si. Appena ho tempo guardo.
grande, funziona! avrei dovuto guardarci meglio...ero abituato alle figure classiche da comandi di plot e simili, questa è la prima volta che uso un comando del genere...mille grazie

ho un'altra domanda...è possibile dare una legge, ad esempio sinusoidale, per definire il contorno del poligono, o il suo contorno deve essere costituito solo da spezzate?
Penso che dipenda molto dalla forma che vuoi usare. Se ad esempio vuoi fare un rettangolo in cui le basi sono curvate a mo' di seni, potresti procedere così:
- crei un vettore x molto fitto (esempio con linspace);
- costruisci il vettore y1=sin(x) e y2=y1+ altezza;
- costruisci il vettore xx delle ascisse dei vertici del tuo poligono ( che ovviamente conterrà come sottoinsieme delle coordinate il vettore x)
- costruisci il vettore yy delle ordinate dei vertici del tuo poligono
Più è fitto x più il profilo della base sarà simile ad un seno.
-
- crei un vettore x molto fitto (esempio con linspace);
- costruisci il vettore y1=sin(x) e y2=y1+ altezza;
- costruisci il vettore xx delle ascisse dei vertici del tuo poligono ( che ovviamente conterrà come sottoinsieme delle coordinate il vettore x)
- costruisci il vettore yy delle ordinate dei vertici del tuo poligono
Più è fitto x più il profilo della base sarà simile ad un seno.
-
mmm perdonami, ma non ho capito bene l'ultima parte del tuo messaggio...potresti farmi un esempio pratico? scusami, sono un somaro :S
Scusa ma ero un pò di fretta nel risponderti. Dato che stai utilizzando il pdetool penso che quello che ti scrivo possano essere cose a te note e io con quell'ultima frase nel post precedente ho creato solo un pò di confusione.
Dunque, supponiamo che tu voglia rappresentare un dominio da un punto di vista teorico/matematico non sia formato da sole linee spezzate, ad esempio, come ti dicevo prima, rettangolo con le basi curvate come dei seni. Ora, penso che tu sappia che quando si va a rappresentare una figura qualsiasi a computer essa viene sempre rappresentata approssimando la curva stessa con tante spezzate e più è elevato il numero di spezzate più il disegno verrà simile all'idea di curva che vogliamo disegnare. Sostanzialmente quello che si fa è disegnare, anzichè la curva, una poligonale inscritta in quella curva. Per un esempio pratico osserva le differenze che si ottengono nel grafico prodotto da questo codice:
Come vedi, aumentando il numero di punti aumenta la precisione del disegno.
Per quel che riguarda la costruzione di un dominio da meshare potresti procedere nel seugente modo (per ora setta ancora a mano i limiti degli assi):
Per quello che ho detto prima quello che vedi non esattamente un rettangolo con basi dei seni, ma ha come basi delle spezzate che approssimano i seni. Più aumenti il numero di punti del linspace più queste curve assomiglieranno a dei seni.
Dunque, supponiamo che tu voglia rappresentare un dominio da un punto di vista teorico/matematico non sia formato da sole linee spezzate, ad esempio, come ti dicevo prima, rettangolo con le basi curvate come dei seni. Ora, penso che tu sappia che quando si va a rappresentare una figura qualsiasi a computer essa viene sempre rappresentata approssimando la curva stessa con tante spezzate e più è elevato il numero di spezzate più il disegno verrà simile all'idea di curva che vogliamo disegnare. Sostanzialmente quello che si fa è disegnare, anzichè la curva, una poligonale inscritta in quella curva. Per un esempio pratico osserva le differenze che si ottengono nel grafico prodotto da questo codice:
clear all, close all colore=['r','k','b']; num_punti=[5,10,50]; for i=1:3 x=linspace(0,2*pi,num_punti(i)); y=sin(x); plot(x,y,'-o','Color',colore(i)); hold on end legend(['num punti=',num2str(num_punti(1))],['num punti=',num2str(num_punti(2))],['num punti=',num2str(num_punti(3))])
Come vedi, aumentando il numero di punti aumenta la precisione del disegno.
Per quel che riguarda la costruzione di un dominio da meshare potresti procedere nel seugente modo (per ora setta ancora a mano i limiti degli assi):
clear all, close all xx=linspace(0,2*pi,100); y1=sin(xx); y2=sin(xx)+3; x=[xx xx(end:-1:1)]; y=[y1 y2(end:-1:1)]; pdepoly(x,y)
Per quello che ho detto prima quello che vedi non esattamente un rettangolo con basi dei seni, ma ha come basi delle spezzate che approssimano i seni. Più aumenti il numero di punti del linspace più queste curve assomiglieranno a dei seni.
grazie mille
in realtà avevo inteso anche prima, ma essendo abituato a fare sempre i soliti comandi base, fare qualcosa di diverso mi ha mandato in confusione
grazie tante ancora quindi!


grazie tante ancora quindi!
Di niente. Ho controllato un pò la questione di modificare i limiti degli assi con delle righe di codice anzichè a mano. La questione sembra più complessa di quanto pensassi perchè MatLab considerà il grafico fornito dal pdetool come un GUI e non come una figure normale. Prova a guardare l'ultimo commento qui:
http://www.mathworks.com/matlabcentral/answers/714
Io non capisco come fare sul mio, ma ho una versione di MatLab precedente a quella che usa l'utente che l'ha postata.
http://www.mathworks.com/matlabcentral/answers/714
Io non capisco come fare sul mio, ma ho una versione di MatLab precedente a quella che usa l'utente che l'ha postata.
sono sempre io... dunque, quanto chiesto finora mi serve per fare una mesh di un canale rettangolare con una sezione centrale...il codice usato è il seguente:
>> xx=linspace(0,676*pi,2000);
>> y1=125*exp(-((xx-1000).^2)/250^2);
>> y2=500-125*exp(-((xx-1000).^2)/250^2);
>> y=[y1 y2(end:-1:1)];
>> x=[xx xx(end:-1:1)];
>> pdepoly(x,y);
ma dopo un po' che tenta di elaborare la figura, mi dice che la memoria è terminata e non mi fa nulla...e questo su ubuntu, perchè su windows il computer si impalla del tutto...
>> xx=linspace(0,676*pi,2000);
>> y1=125*exp(-((xx-1000).^2)/250^2);
>> y2=500-125*exp(-((xx-1000).^2)/250^2);
>> y=[y1 y2(end:-1:1)];
>> x=[xx xx(end:-1:1)];
>> pdepoly(x,y);
ma dopo un po' che tenta di elaborare la figura, mi dice che la memoria è terminata e non mi fa nulla...e questo su ubuntu, perchè su windows il computer si impalla del tutto...
ah xx è chiaramente errato, ho usato poi xx=linspace(0,2*pi,2000) ma nulla, stesso risultato...
Non vedo come tu possa sperare di disegnare qualcosa come un canale usando una funzione pensata per definire poligoni. Mi sembra abbastanza evidente che un canale non è un poligono. Ho forse frainteso quello che stai cercando di fare?
chiedo perdono, nel frattempo un mio amico è riuscito a risolvere i miei problemi...ma vi ringrazio ancora per l'enorme pazienza che avete avuto!
