[MatLab] MATLAB

Messaggioda brinchi » 18/12/2020, 11:02

Buongiorno,
sto lavorando su matlab per risolvere un'equazione dove l'incognita compare come estremo d'integrazione.
Ho utilizzato la funzione f zero, applicata alla seguente funzione.

function y=tfail(tf,h1,p,b,Y,Kic,n,v0,ci)
t=300:300:tf;
dt=5*60
f=length(t);
pf=p(f);
pn=p.^n
P2=cumtrapz(t,pn)
integ=P2(f)

y=((3/4)*pf*((b/h1).^2)*(Y*sqrt(pi)/Kic)).^(n-2)-(ci.^((2-n)/2)+((2-n)/2)*v0*((Y*sqrt(pi)/Kic).^n)*(((3/4)*(b/h1).^2 ).^n)*integ)

I parametri sono tutti scalari tranne il vettore p e il vettore t. L'incognita che vorrei trovare tramite il comando fzero è il parametro tf che mi determina il vettore t da cui dipende l'integrale P2 e pf.
Purtroppo eseguendo mi da errore nel cumtrapz. C'è un'alternativa per risolvere un equazione che ha come incognita un estremo d'integrazione di un integrale?
Grazie mille
brinchi
New Member
New Member
 
Messaggio: 31 di 80
Iscritto il: 28/11/2015, 12:37

Re: [MatLab] MATLAB

Messaggioda feddy » 18/12/2020, 23:48

Ciao, potresti scrivere il problema utilizzando i tag "$" per poter leggere le formule? In particolare, qual è la funzione di cui vuoi trovare lo zero?
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2781 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [MatLab] MATLAB

Messaggioda brinchi » 20/12/2020, 16:02

$ function y=tfail(tf1,h1,p,b,Y,Kic,n,v0,t,ci) $

\(\displaystyle \)

t=300:300:tf1 $

dt=5*60 $

$ f=length(t) $

$ pf=p(f) $

$ pn=p.^n $

$ P2=cumtrapz(t,pn) $

$ integ=P2(f) $

\(\displaystyle \)
$ y=((3/4)*pf*((b/h1).^2)*(Y*sqrt(pi)/Kic)).^(n-2)-(ci.^((2-n)/2)+((2-n)/2)*v0*((Y*sqrt(pi)/Kic).^n)*(((3/4)*(b/h1).^2 ).^n)*integ) $

$ [tf1]=fzero(@(tf1)tfail(tf1,h1,p,b,Y,Kic,n,v0,t,ci),86400) $


Ciao , la funzione di cui vorrei trovare lo zero è y in funzione di tf1(incognito) che è l'estremo di integrazione dell'integrale integ che compare in y, ovvero la lunghezza del vettore t. Gli altri parametri h1,b,kic,n,vo,ci e il vettore p sono noti.
Grazie mille.
brinchi
New Member
New Member
 
Messaggio: 32 di 80
Iscritto il: 28/11/2015, 12:37

Re: [MatLab] MATLAB

Messaggioda feddy » 21/12/2020, 19:20

Intendevo dire che sarebbe meglio se scrivessi la formulazione matematica del problema: qual è la funzione $F(x)$ che tu intendi azzerare? Leggendo il codice non è chiaro per me, che non so nulla del tuo problema.

Se riesci a scrivere chi è la tua funzione $F(x)$ è molto più facile aiutarti. Ad esempio, se ci sono tanti parametri, possiamo iniziare considerando un caso più semplice.
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2783 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [MatLab] MATLAB

Messaggioda brinchi » 23/12/2020, 07:49

Buongiorno,
questa è la funzione di tf di cui vorrei trovare lo zero


$ y=((3/4)*p(tf)*((b/h).^2)*(Y*sqrt(pi)/(Kic))).^(n-2)-(ci.^((2-n)/2)+((2-n)/2)*v0*((Y*sqrt(pi)/(Kic)).^n)*(((3/4)*(b/h1).^2 ).^n)*int^(tf) p(t)dt) $

Nella funzione compare p che è un vettore noto di pressione funzione del tempo p(t), mentre tf è l'incognita scalare, tempo per cui la funzione si azzera. Tutti gli altri parametri sono scalari noti.
Grazie mille per l'aiuto
brinchi
New Member
New Member
 
Messaggio: 34 di 80
Iscritto il: 28/11/2015, 12:37

Re: [MatLab] MATLAB

Messaggioda feddy » 23/12/2020, 11:18

Potresti definire la funzione f tramite il comando integral di MatLab.

Per non riscrivere tutta la tua funzione, supponi che sia $F(x)= \int_0^x e^{-t^2}dt$. Questa puoi scriverla come cosa di questo tipo f=@(x) integral(@(t) exp(-t^2),0,x)
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2786 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [MatLab] MATLAB

Messaggioda feddy » 23/12/2020, 11:19

Una volta scritta così la tua funzione da azzerare, ti basta darla in pasto al tuo solver, che mi pare sia fzero
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2787 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [MatLab] MATLAB

Messaggioda brinchi » 28/12/2020, 14:08

Grazie mille dell'aiuto!! si confermo, il solver è fzero. L'unica cosa ho ancora dei problemi nell'integrazione perche la mia funzione da integrare p(t) non è data da una legge che lega "p" a "t" (tipo exp) ma è un vettore di dati casuali noti che evolvono nel tempo: ho un vettore di pressioni (un dato misurato ogni 5 minuti) e un vettore tempo creato da me su cui vorrei integrare fino al tempo tf incognito. Scrivo un esempio dei dati disponibili per essere piu comprensibile:
p=[2,5,3,4,8,9..] (vettore 1x 15)
t=[5,10,15,20,25....50] (vettore 1x15)
vorrei integrare "p" lungo "t" , non totalmente (non fino a t=50) ma fino all'istante finale (incognito) che mi risolva l'equazione data.
Spero di non essere stata troppo confusionaria, grazie ancora.
brinchi
New Member
New Member
 
Messaggio: 35 di 80
Iscritto il: 28/11/2015, 12:37


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite