Re: Ricavare x

Messaggioda sellacollesella » 09/02/2024, 18:09

jhs ha scritto:Il risultato che riporta il libro è 468.2, in linea con quanto hai calcolato tu.

Ottimo! Assodato ciò, tornando all'equazione che avevi scritto in modo corretto sin dal principio: \[
\underbrace{S - \frac{KA(B-C)}{D^2(2-X)}\left[\left(1-\frac{3C}{A}X\right)^{1-\frac{2}{X}}-1\right]}_{f(X)} = 0
\] affinché abbia senso nel campo dei numeri reali dobbiamo imporre: \[
1 - \frac{3C}{A}X > 0
\] e tenendo conto che tutti i parametri sono positivi, tra cui \(X>0\), porta a scrivere: \[
0 < X < \frac{A}{3C} = 1.5269.
\] Pertanto, tenuto conto che:

  • \(f\) è continua in \((0,1.5269)\);

  • \(\begin{aligned}\lim_{X \to 0^+}\end{aligned} f(X) > 0\);

  • \(\begin{aligned}\lim_{X \to 1.5269^-}\end{aligned} f(X) < 0\);
il teorema degli zeri assicura che \(f\) abbia almeno uno zero in tale intervallo e considerando anche il fatto
che \(f\) è monotona decrescente allora lo zero è unico e può essere approssimato con un metodo a piacere.

In particolare, dato che agli estremi \(f\) può essere valutata solo al limite, ci riduciamo all'intervallo: \[
[a,b] := [0.001, 1.526]
\quad \quad \Rightarrow \quad \quad
c := \frac{a+b}{2} = 0.764
\] e applicando il metodo più semplice in assoluto, ossia il metodo di bisezione, abbiamo:

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.001,0.764]\) e \(c = 0.3823\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.3823,0.764]\) e \(c = 0.5729\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.3823,0.5729]\) e \(c = 0.4776\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.4776,0.5729]\) e \(c = 0.5252\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.4776,0.5252]\) e \(c = 0.5014\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.4776,0.5014]\) e \(c = 0.4895\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.4895,0.5014]\) e \(c = 0.4954\);
e così via finché ci si ritiene soddisfatti dall'approssimazione: \(X \approx 0.500\).

pistacios ha scritto:Per curiosità, come posso capire quando in effetti non è esplicitabile in funzioni elementari?

Non conosco alcuna regola generale, tant'è che anche l'equazioncina che ho proposto come esempio ha soluzione reale esprimibile in forma chiusa, ma coinvolgendo la funzione W di Lambert non ne ho tenuto conto, non essendo nella cerchia delle cosiddette funzioni elementari a cui solitamente si fa riferimento.

In linea di principio, l'obiettivo è quello di ricondursi ad un sistema di equazioni polinomiali per le quali, perlomeno numericamente, risulta sempre possibile determinarne tutte le soluzioni in campo complesso; in caso contrario le cose si fanno mooolto più complicate e occorre capire di volta in volta come uscirne vivi. :D
Ultima modifica di sellacollesella il 09/02/2024, 19:10, modificato 3 volte in totale.
sellacollesella
Average Member
Average Member
 
Messaggio: 781 di 959
Iscritto il: 08/04/2022, 12:43

Re: Ricavare x

Messaggioda Faussone » 09/02/2024, 18:12

jhs ha scritto:No, X non può mai essere 0 e nemmeno S. A me interessa ricavare X dati gli altri coefficienti, che sono sempre maggiori di 0.
Nell'esempio S=468.146 (il testo approssima a 468.2).

Ah ok, avevo frainteso.
Faussone
Moderatore
Moderatore
 
Messaggio: 6571 di 10744
Iscritto il: 03/09/2008, 12:44

Re: Ricavare x

Messaggioda pistacios » 09/02/2024, 19:11

un buon indizio è quando appaiono funzioni non algebriche trascendenti (come esponenziali, logaritmi ecc).
Sisi, questo è verissimo ma non è sufficiente (diciamo che è vero tendenzialmente). Quindi mi aveva incuriosito come torvare un controesempio furbo come ha fatto sellacolle. :D
pistacios
New Member
New Member
 
Messaggio: 44 di 71
Iscritto il: 17/08/2023, 09:32

Re: Ricavare x

Messaggioda axpgn » 09/02/2024, 19:54

sellacollesella ha scritto:e applicando il metodo più semplice in assoluto, ossia il metodo di bisezione, abbiamo:

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.001,0.764]\) e \(c = 0.3823\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.3823,0.764]\) e \(c = 0.5729\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.3823,0.5729]\) e \(c = 0.4776\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.4776,0.5729]\) e \(c = 0.5252\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.4776,0.5252]\) e \(c = 0.5014\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.4776,0.5014]\) e \(c = 0.4895\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.4895,0.5014]\) e \(c = 0.4954\);
e così via finché ci si ritiene soddisfatti dall'approssimazione: \(X \approx 0.500\).


oppure se non sei sellacollesella puoi usare Wolfram Alpha :-D
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21845 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Ricavare x

Messaggioda jhs » 09/02/2024, 21:30

sellacollesella ha scritto:
jhs ha scritto:Il risultato che riporta il libro è 468.2, in linea con quanto hai calcolato tu.

Ottimo! Assodato ciò, tornando all'equazione che avevi scritto in modo corretto sin dal principio: \[
\underbrace{S - \frac{KA(B-C)}{D^2(2-X)}\left[\left(1-\frac{3C}{A}X\right)^{1-\frac{2}{X}}-1\right]}_{f(X)} = 0
\] affinché abbia senso nel campo dei numeri reali dobbiamo imporre: \[
1 - \frac{3C}{A}X > 0
\] e tenendo conto che tutti i parametri sono positivi, tra cui \(X>0\), porta a scrivere: \[
0 < X < \frac{A}{3C} = 1.5269.
\] Pertanto, tenuto conto che:

  • \(f\) è continua in \((0,1.5269)\);

  • \(\begin{aligned}\lim_{X \to 0^+}\end{aligned} f(X) > 0\);

  • \(\begin{aligned}\lim_{X \to 1.5269^-}\end{aligned} f(X) < 0\);
il teorema degli zeri assicura che \(f\) abbia almeno uno zero in tale intervallo e considerando anche il fatto
che \(f\) è monotona decrescente allora lo zero è unico e può essere approssimato con un metodo a piacere.

In particolare, dato che agli estremi \(f\) può essere valutata solo al limite, ci riduciamo all'intervallo: \[
[a,b] := [0.001, 1.526]
\quad \quad \Rightarrow \quad \quad
c := \frac{a+b}{2} = 0.764
\] e applicando il metodo più semplice in assoluto, ossia il metodo di bisezione, abbiamo:

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.001,0.764]\) e \(c = 0.3823\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.3823,0.764]\) e \(c = 0.5729\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.3823,0.5729]\) e \(c = 0.4776\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.4776,0.5729]\) e \(c = 0.5252\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.4776,0.5252]\) e \(c = 0.5014\);

  • dato che \(f(a)f(c)<0\) allora \([a,b]=[0.4776,0.5014]\) e \(c = 0.4895\);

  • dato che \(f(a)f(c)>0\) allora \([a,b]=[0.4895,0.5014]\) e \(c = 0.4954\);
e così via finché ci si ritiene soddisfatti dall'approssimazione: \(X \approx 0.500\).

pistacios ha scritto:Per curiosità, come posso capire quando in effetti non è esplicitabile in funzioni elementari?

Non conosco alcuna regola generale, tant'è che anche l'equazioncina che ho proposto come esempio ha soluzione reale esprimibile in forma chiusa, ma coinvolgendo la funzione W di Lambert non ne ho tenuto conto, non essendo nella cerchia delle cosiddette funzioni elementari a cui solitamente si fa riferimento.

In linea di principio, l'obiettivo è quello di ricondursi ad un sistema di equazioni polinomiali per le quali, perlomeno numericamente, risulta sempre possibile determinarne tutte le soluzioni in campo complesso; in caso contrario le cose si fanno mooolto più complicate e occorre capire di volta in volta come uscirne vivi. :D

devo studiarmi il tutto, per ora è un po' oltre le mie conoscenze..
Essendo che vorrei scrivere del codice per risolverla, ed ho dato un occhio a come altri hanno risolto il problema, capisco perchè non hanno tentato di risolvere l'equazione, ma per ci sono arrivati per iterazioni partendo da un valore noto aumentando o diminuendo X fino ad arrivare ad un valore vicino e accettabile..

Ricontrollando il testo mi sono accorto di un paio di dettagli che non avevo riportato negli appunti:
X può essere anche <0 (negativo) ma non 0. Mentre gli altri valori sono tutti sempre positivi e maggiori di 0.
jhs
Starting Member
Starting Member
 
Messaggio: 6 di 6
Iscritto il: 09/02/2024, 11:51

Re: Ricavare x

Messaggioda sellacollesella » 09/02/2024, 22:09

Tutto sta a definire per bene il range di variabilità dei vari parametri e di conseguenza la funzione che ne salta fuori, in caso contrario rischi di farti portare a spasso dai metodi numerici senza giungere a destinazione o peggio ancora arrivando ad una meta non desiderata.

Tanto per dire, sopra l'aver determinato un bel intervallo in cui cercare la soluzione, tra l'altro unica, è una situazione favolosa, dato che potenzialmente hai a disposizione una camionata e più di metodi tutti validi.

In particolare, implementare il metodo della bisezione è un colpo di mano:

Codice:
a = 4370;
b = 1500;
c = 954;
d = 3000;
k = 1158;
s = 468.2;
f[x_] := s - k  a (b - c) ((1 - 3 x c/a)^(1 - 2/x) - 1)/d^2/(2 - x)

tol = 10^-3.;
α = 0 + tol;
β = a/(3 c) - tol;
γ = (α + β) / 2;

While[β - α > tol,
      If[f[α] f[γ] < 0, β = γ, α = γ];
      γ = (α + β) / 2;
      Print[{f[α] f[γ], α, β, γ}]
     ];

da cui:

Codice:
{820.344, 0.001, 0.763452, 0.382226}
{-169.275, 0.382226, 0.763452, 0.572839}
{49.7703, 0.382226, 0.572839, 0.477533}
{-11.5333, 0.477533, 0.572839, 0.525186}
{-0.446627, 0.477533, 0.525186, 0.501359}
{4.95533, 0.477533, 0.501359, 0.489446}
{1.09366, 0.489446, 0.501359, 0.495403}
{0.201395, 0.495403, 0.501359, 0.498381}
{0.0207691, 0.498381, 0.501359, 0.49987}
{-0.00241934, 0.49987, 0.501359, 0.500615}
{0.00145057, 0.49987, 0.500615, 0.500242}

Ma, volendo, si può fare a meno di scrivere righe di codice e usare un foglio Excel; dipende dalle esigenze.

D'altro canto, qualora non si riesca a determinare un intervallo chiuso e limitato dove cercare lo zero allora la faccenda si complica e di conseguenza occorre fare riferimento ad un metodo più raffinato. Insomma, non è così facile, ci vogliono varie conoscenze (seppur non troppo avanzate) per prendere delle buone decisioni. :-)
sellacollesella
Average Member
Average Member
 
Messaggio: 783 di 959
Iscritto il: 08/04/2022, 12:43

Re: Ricavare x

Messaggioda axpgn » 09/02/2024, 22:15

sellacollesella ha scritto:Ma, volendo, si può fare a meno di scrivere righe di codice e usare un foglio Excel;


... che funziona benissimo per cose del genere, cinque minuti e hai finito ...
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21846 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Ricavare x

Messaggioda sellacollesella » 09/02/2024, 23:24

axpgn ha scritto:cinque minuti e hai finito

Pensavo di metterci molto di più, invece hai ragione, cinque minuti bastano! :-D

Immagine
sellacollesella
Average Member
Average Member
 
Messaggio: 784 di 959
Iscritto il: 08/04/2022, 12:43

Re: Ricavare x

Messaggioda axpgn » 09/02/2024, 23:39

Ma tu sei troppo raffinato :-D , hai ricostruito in Excel quello che avresti fatto con un programma; io sarei stato molto ma molto più brutale: una volta individuato l'intervallo, si immette la formula, la si ricopia cento volte, si inserisce l'incognita da un estremo all'altro dell'intervallo con passi di un centesimo e casomai si raffina rimpicciolendo l'intervallo e il passo; l'unica finezza la legenda con le variabili come hai fatto tu. :lol: :lol:

Cordialmente, Alex
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21847 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Ricavare x

Messaggioda sellacollesella » 09/02/2024, 23:47

axpgn ha scritto:hai ricostruito in Excel quello che avresti fatto con un programma

Per questo mi vien naturale partire da Mathematica e poi passare ad Excel. Ma lo dice pure mio papà che sono rovescio come un calzino (rigorosamente in dialetto ma vabbè). :-D Dovrò brutalizzarmi prima o poi! :D
sellacollesella
Average Member
Average Member
 
Messaggio: 785 di 959
Iscritto il: 08/04/2022, 12:43

PrecedenteProssimo

Torna a Secondaria II grado

Chi c’è in linea

Visitano il forum: Majestic-12 [Bot] e 1 ospite