Doppia funzione integrale in Matlab

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
1
voti

[1] Doppia funzione integrale in Matlab

Messaggioda Foto UtenteIanero » 20 set 2022, 19:55

Ciao a tutti,
una domanda che ho ridotto all'osso isolando il problema...
Non capisco perché questo codice da errore all'ultima istruzione:

Codice: Seleziona tutto

f = @(t)integral( @(xi)sign(xi).*exp(-1./(1-(xi-t).^2)),t-1,t+1 );
integral( @(t)f(t),-1,1 )


Dice che gli estremi di integrazione nella seconda istruzione non sono scalari :roll:
Qualcuno vede il perché o avrebbe magari modo di provarlo?

Grazie in anticipo.
:shock:

Avatar utente
Foto UtenteRenzoDF
55,9k 8 12 13
G.Master EY
G.Master EY
Messaggi: 13189
Iscritto il: 4 ott 2008, 9:55
1
voti

[2] Re: Doppia funzione integrale in Matlab

Messaggioda Foto UtenteRenzoDF » 21 set 2022, 11:00

Per far accettare gli scalari devi specificare

Codice: Seleziona tutto

'ArrayValued',true

poi, quello che faccio di solito, per chiarezza di codice, è separare la funzione dalle integrazioni, qualcosa del genere, per esempio

Codice: Seleziona tutto

f =@(x,t) x+t^2;
integral(@(t) integral(@(x) f(x,t),t-1,t+1),-1,1,'ArrayValued',true)
"Il circuito ha sempre ragione" (Luigi Malesani)

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
0
voti

[3] Re: Doppia funzione integrale in Matlab

Messaggioda Foto UtenteIanero » 21 set 2022, 13:51

Ti ringrazio come sempre, ora gira.
Non capisco perché la flag ArrayValued debba essere alzata, perché la mia funzione non lo è. :^o
:shock:

Avatar utente
Foto UtenteRenzoDF
55,9k 8 12 13
G.Master EY
G.Master EY
Messaggi: 13189
Iscritto il: 4 ott 2008, 9:55
0
voti

[4] Re: Doppia funzione integrale in Matlab

Messaggioda Foto UtenteRenzoDF » 23 set 2022, 18:28

Come ti avevo scritto (e poi cancellato) ieri, basta pensare che ArrayValued deve essere "alzata" anche per integrare (numericamente)

Codice: Seleziona tutto

f =@(x) 5;

:mrgreen:

BTW Perché non hai usato

Codice: Seleziona tutto

integral2 ...

per il tuo integrale doppio? In quel caso non serviva "alzarla". ;-)
"Il circuito ha sempre ragione" (Luigi Malesani)

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
1
voti

[5] Re: Doppia funzione integrale in Matlab

Messaggioda Foto UtenteIanero » 25 set 2022, 10:58

La tua risposta è chiara, grazie. Ciò che non è chiaro è a cosa pensava la Mathworks quando ha scritto “arrayValued”, perché neanche la funzione 5 lo è, però fa niente basta che gira e fa quello che mi serviva.
Per la seconda parte, il motivo è perché nel mio codice originale l’integrale più interno aveva gli estremi di integrazione dipendenti dall’altra variabile (quella dell’integrale esterno). Ho letto però nella documentazione che questo caso sembra gestibile da integral2, proverò a scriverlo in modo equivalente con questa funzione qui.

Grazie come al solito :-)
:shock:

Avatar utente
Foto UtenteRenzoDF
55,9k 8 12 13
G.Master EY
G.Master EY
Messaggi: 13189
Iscritto il: 4 ott 2008, 9:55
1
voti

[6] Re: Doppia funzione integrale in Matlab

Messaggioda Foto UtenteRenzoDF » 25 set 2022, 11:44

Ianero ha scritto:... Ciò che non è chiaro è a cosa pensava la Mathworks quando ha scritto “arrayValued”, perché neanche la funzione 5 lo è ...

Quello che mi sono sempre chiesto anch'io :ok: , ad ogni modo ho scoperto che basta un riferimento fantasma alla variabile nella integranda per compensare il problema, per es.

Codice: Seleziona tutto

 f=@(x) 5+0*x;

:?

Ianero ha scritto:... però fa niente basta che gira e fa quello che mi serviva....

Esatto, una volta compreso che quella flag sistema le cose, alziamogliela. :mrgreen:

Ianero ha scritto:... ...Ho letto però nella documentazione che questo caso sembra gestibile da integral2, proverò a scriverlo in modo equivalente con questa funzione qui. ...

Proprio così, basta inserire i due limiti come function handle e puoi usarli (senza la flag, che non è prevista), in integral2; qualcosa del tipo

Codice: Seleziona tutto

a=@(t) t-1
b=@(t) t+1
f = @(t,x) exp(-1./(1-(x-t).^2));
integral2(f,-1,1,a,b)
"Il circuito ha sempre ragione" (Luigi Malesani)

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
0
voti

[7] Re: Doppia funzione integrale in Matlab

Messaggioda Foto UtenteIanero » 25 set 2022, 11:56

Grazie mille :-)
:shock:


Torna a “Programmi applicativi: simulatori, CAD ed altro”