Liceo Scientifico "A.Righi", Bologna
(Dis) equazioni di grado superiore al II
Per una lettura corretta del testo occorre avere installato i font di caratteri TI-92 symbols e TI92PC
I progressi tecnologici avvenuti negli ultimi 10 anni mettono a disposizione degli insegnanti di matematica alcuni SW didattici che promettono di, e a mio avviso possono, migliorare la professionalità docente senza quelle forzature o inevitabili ampliamenti di contenuti che avevano già segnato la prima fase, non ancora matura, di introduzione delle tecnologie nella didattica. E’ così possibile estendere un approccio “sperimentale” anche a argomenti tradizionali, o affrontare problemi con più attenzione ai “saper fare” piuttosto che ai “fare”, differenziando le due attività. E’ così possibile per il docente migliorare la qualità dell’esposizione, non solo migliorando la qualità dei disegni - non sempre necessaria, dato che la matematica può anche essere ancora considerata come l’abilità di formarsi immagini mentali precise da raffigurazioni imprecise o incomplete -, ma soprattutto aumentando la capacità di produrre esempi numerosi per illustrare fatti o concetti anche in tempi ristretti. Inoltre una calcolatrice inserita nell’attività didattica amplia l’ambito dei numeri oltre il ridotto repertorio di numeri semplici, né troppo grandi né troppo piccoli, caratteristici degli esercizi tradizionali concepiti per non complicare il calcolo numerico. Quello che si vuole mostrare in questo quaderno/articolo è anche la possibilità di resistere alla tentazione di arrendersi di fronte alle difficoltà incontrate - da sempre, oggi forse più drammatiche nel momento in cui si chiede alla matematica e alle materie scientifiche in genere di essere accessibile a tutti - da molti studenti nella acquisizione degli automatismi di calcolo algebrico necessari anche solo per controlli minimi dei risultati prodotti dalle macchine. Non si può evitare di fare i conti con gli effetti della pigrizia mentale già riscontrati a seguito dell’uso delle calcolatrici numeriche. L’obiettivo, assolutamente “tradizionale” dell’apprendimento di tecniche di calcolo algebrico, per la risoluzione di equazioni e disequazioni algebriche viene qui perseguito attraverso attività di “insegnamento” a una calcolatrice simbolica, del docente insieme agli studenti, per potenziare le attuali limitate capacità di manipolazione simbolica della macchina. Qui lo strumento informatico non consente tanto di accorciare i tempi; richiede invece di concentrarsi anche su una conoscenza tecnica del linguaggio specifico della macchina, oltre che sui “saper fare” caratteristici dell’argomento matematico. Per una classe di 3 liceo scientifico, quale quella a cui è stata concepita tale attività, la prima parte contiene qualche novità e richiede impegno soltanto per il “saper fare” e il “fare” con la calcolatrice: conoscenza di function predefinite per la manipolazione simbolica e tipi di dati, struttura di una function e sintassi per esprimere le strutture fondamentali del linguaggio di programmazione procedurale. Potremmo dire che una tale attività permette di alleggerire la fatica del fare algebra per apprendere il saper fare algebra spostando la fatica come quella di saper come fare -strutture linguistiche per la programmazione procedurale, strutture dati, function predefinite- e di fare -distrazioni di battitura, interpretazione e altri accidenti vari -. Possono ciononostante verificarsi problemi di sovrapposizione tra obiettivi legati al saper fare algebra, saper come fare con lo strumento informatico. Il vantaggio di sostituire la fatica di fare algebra con la fatica di saper come fare e farlo bene con uno strumento informatico, dovrebbe essere ampiamente ripagato dalla versatilità della nuova abilità informatica, più ricca di potenzialità del solo saper fare algebra, spendibile su altri argomenti di matematica. Ricordiamo che la fatica si può misurare con l’incidenza di errori di distrazione, frequenti anche nell’uso di una calcolatrice. Interessante considerare anche questo fatto:una volta creata una nuova function, questa va messa alla prova. Lo si fa anche sulla base di casi particolari, oltre che alla convinzione raggiunta anche per fattori come la semplicità del programma, ciò che non va confuso con la dimostrazione. Ci si rende conto che possono essere imprevedibili i controesempi - casi per cui la function non funziona come si vorrebbe! Anche solo per i limiti delle function predefinite della macchina stessa; quindi c’è lavoro di adeguamenti successivi
Assicurati innanzitutto che 3 Exact/Approx sia posto in Auto, poi elimina dalla memoria le assegnazioni di valore alle variabili rappresentate con una singola lettera con Clear a-z.
Come primo approccio alla calcolatrice grafica TI-92, opera in ambiente " . Scrivi la seguente espressione
a* x- b+x ¸
La calcolatrice rielabora e visualizza …………………
Esamina ora l’operatore ANS[1], per richiamare una precedente espressione, premendo insieme i tasti,
2 ±
La calcolatrice visualizza …………………
Esamina ora l’operatore per effettuare sostituzioni premendo insieme i tasti 2 Í .
2 ± 2 Í a =ë 2
La calcolatrice rielabora e visualizza …………………
Attenzione alla differenza tra il tasto · per indicare l’opposto e il tasto | per indicare l’operatore di differenza.
Se inoltre digiti
2 ± 2 Í
x = t + 1la calcolatrice rielabora e visualizza …………………
Attenzione: la calcolatrice TI-92 non accetta sostituzioni tipo x=x+1 in cui a una variabile è sostituita un'espressione nella stessa variabile.
Calcola inoltre le seguenti espressioni per una introduzione agli operatori logici not, and e or e al loro impiego in eguaglianze algebriche :
not x = ë 1
La calcolatrice rielabora e visualizza …………………
not x > 1
La calcolatrice rielabora e visualizza …………………
x <ë 1 and x >1
La calcolatrice rielabora e visualizza …………………
x <1 and x >1
La calcolatrice rielabora e visualizza …………………
not (x ³ ë 1 and x < 2)
Per ottenere il simbolo ³ oppure £ oppure ¹ digitare contemporaneamente ¥ > oppure ¥ < oppure ¥ =
La calcolatrice rielabora e visualizza …………………
In ambiente " trascrivi la seguente equazione di I grado: x – (3 – 2·x) = 4 – 3·x.
Premendo ¸ la calcolatrice visualizza ……………………………………………….
Evidentemente ha applicato le note proprietà …………………………………………….
Ricorda: risolvere l’equazione significa trasformarla, ma in modo tale da non cambiare l’insieme delle soluzioni, fino a ottenere la forma x = numero oppure numero1 = numero2. Nel primo caso {numero} è l’insieme delle soluzioni, nel secondo caso: se l’uguaglianza è vera l’insieme delle soluzioni è ………………, altrimenti l’insieme delle soluzioni è ………………
Digita dunque 2 ± +3 per aggiungere 3 a entrambi i membri dell’equazione in modo da ottenere …………….
Digita dunque 2 ± …… in modo da ottenere 6·x = 7.
Digita infine 2 ± …….. per ottenere x = ……
Ora digita , seleziona Solve( e digita ¸ .
Completa la linea di edizione con Solve(x – (3 – 2* x) = 4 – 3* x, x). Il primo argomento di Solve(equazione, variabile) puoi inserirlo muovendoti con il cursore @ fino a raggiungere la linea di " nella quale è rimasto il testo dell’equazione. Il secondo argomento rappresenta la variabile nella quale va risolta l’equazione. Digita ¸ e confronta il risultato con quello precedentemente calcolato.
Utilizza ora Solve(equazione, variabile) per risolvere a·x + b = 0 prendendo come incognita la variabile x.
La calcolatrice rielabora e visualizza …………………
Correggi il risultato visualizzato: ………………………………
Puoi utilizzare Solve(equazione, variabile) anche per risolvere a·x + b = 0 prendendo come incognita la lettera a oppure la lettera b, che di solito sono considerati parametri, cioè variabili che saranno fissate prima di pensare x come variabile.
Utilizza ora Solve(equazione, variabile) per risolvere x – (3 – 2·x) = 4 – a·x
La calcolatrice rielabora e visualizza …………………
Correggi il risultato visualizzato: ………………………………
Possiamo migliorare le prestazioni di Solve definendo una nuova function.
In ambiente O Program Editor/New seleziona tra Program e Function questa seconda opzione. Attribuisci poi il nome Soll alla funzione inserendolo a fianco di Variable: Infine premi ¸ ¸ .
La struttura di una function è
:NomeFunction(argomento1, argomento2, …)
:Func
…
:EndFunc
I due punti sono un segnale di inizio riga inserite dalla macchina.
Inserisci a questo punto le righe seguenti:
Soll(equaz,xx)
Func
Local aa, bb, binomio
left(equaz)- right(equaz) ! binomio
binomio | xx=0 ! bb
(binomio – bb) /xx ! aa
Return aa¹ 0 and Solve(xx=ë bb/aa,xx) or aa=0 and bb=0
EndFunc
La prima riga definisce le variabili locali, quelle che nascono in fase di esecuzione della function, automaticamente eliminate al termine.
Il segno ! , che si ottiene digitando il tasto § , significa che alla variabile a destra viene assegnato il risultato dell’espressione a sinistra.
Le function predefinite left(dis/equazione) e right(dis/equazione) restituiscono rispettivamente l’espressione a destra e l’espressione a sinistra del segno di uguale o diseguale.
Il comando Return precede l’espressione risultato della function.
Al posto di Solve(xx=ë bb/aa,xx) si potrebbe usare anche solo xx=ë bb/aa; tuttavia in quest’ultimo caso la calcolatrice visualizza nella forma aa* xx+bb=0
Torna in ambiente " e calcola Soll(a* x=b+x,x).
La calcolatrice rielabora e visualizza …………………
Calcola poi Soll(a* x=b+a* x,x).
La calcolatrice rielabora e visualizza …………………
Calcola ora Soll(1=1,x).
La calcolatrice visualizza …………………………………………
Con una function come quella definita occorre che l’argomento equaz non sia già del tipo numero1=numero2; altrimenti le function predefinite left(equaz) e right(equaz) non producono alcun valore ma in fase di esecuzione viene segnalato un errore. Infatti la TI-92 semplifica un'uguaglianza numerica in true o false. Per rimediare al problema inseriremo un controllo preliminare della condizione
string(equaz)="true" or string(equaz)="false"
dove string(argomento) è una function predefinita che ha per valore il contenuto della variabile argomento trasformato in formato stringa.
Soll(equaz,xx)
Func
Local aa, bb, binomio
If string(equaz)="true" or string(equaz)="false" Then
Return equaz
Else
left(equaz)-right(equaz) ! binomio
binomio| xx=0 ! bb
(binomio – bb) /xx ! aa
Return aa¹ 0 and Solve(xx=ë bb/aa,xx) or aa=0 and bb=0
EndIf
EndFunc
In ambiente " scrivi la seguente disequazione di I grado: x – (3 + 8·x) > 4 – 3·x.
RiSolverla significa trasformarla via via in modo da ottenere infine una disequazione equivalente del tipo x > numero oppure x < numero oppure numero1 > numero2. ( In quest’ultimo caso l’insieme delle soluzioni è tutto  quando la disuguaglianza è …… oppure l’insieme vuoto Æ quando la disuguaglianza è ……). Registra dunque la sequenza dei passaggi:
utilizza 2 ± + ……… sommando così la stessa espressione a entrambi i membri della disequazione in modo da eliminare il termine contenente la variabile dal II membro, visualizzando ë 5xì 3>4;
utilizza 2 ± + …….. sommando così la stessa espressione a entrambi i membri della disequazione appena ottenuta in modo da eliminare il termine di grado 0 dal I membro, visualizzando ………….;
utilizza 2 ± / …….. dividendo così entrambi i membri della disequazione appena ottenuta in modo da ottenere solo x al I membro visualizzando …………..
La sequenza delle disequazioni visualizzate, tutte equivalenti tra loro in fatto di soluzioni, conduce a una disequazione particolarmente semplificata dalla quale risulta evidente l’insieme delle soluzioni.
Utilizza ora Solve(disquazione, variabile) per risolvere x – (3 + 8·x) > 4 – 2·x.
Cosa ottieni ? ………………….
Puoi ottenere questo risultato passo passo: …………………………………………..
…………………………………………………………………………………………
Utilizza ora Solve(disequazione, variabile) per risolvere a·x + b > 0 nella variabile x.
La calcolatrice rielabora e visualizza …………………………...
Il risultato dovrebbe essere invece: ………………………………
Si può utilizzare la function predefinita Solve anche per risolvere a·x + b > 0 nella lettera a o nella lettera b che di solito si considerano parametri. Utilizzala dunque per risolvere a·x + b > 0 nella variabile b.
La calcolatrice rielabora e visualizza …………………………...
Ora ripeti passo passo con la calcolatrice la risoluzione della disequazione a·x + b > 0 nella variabile x.
Inserisci la disequazione. Utilizza 2 ± e sottrai b a entrambi i membri.
Se a=0 la disequazione ha soluzione Æ quando …………. e ha soluzione Ñ quando ………….
Se invece a ¹ 0, utilizzando 2 ± / a viene visualizzato ……………..
Quella ottenuta non è una disequazione equivalente a quella iniziale.
Correggi il risultato visualizzato: ………………………………
Possiamo migliorare le prestazioni definendo una nuova function.
posPol(binomio,xx)
Func
Local aa, bb, binomio
binomio| xx=0 ! bb
(binomio – bb) /xx ! aa
Return aa>0 and xx>ë bb/aa or
aa=0 and bb>0 or
aa<0 and xx<ë bb/aa
EndFunc
Le due righe dopo Return, così organizzate per una migliore lettura, dovranno invece essere scritte su un’unica riga.
Risolvi ora le disequazioni da 6 a 8 a pag 648 del libro di testo.
Risolvi inoltre i sistemi da 127 a 130 a pag 651 del libro di testo. Ricordando che risolvere un sistema di (dis)equazioni significa trovare i valori della variabile che risolvono contemporaneamente tutte le (dis)equazioni, la soluzione del 127 si può ottenere con il calcolo:
PosPol(ë (x- 3),x) and not posPol(ë (x- 4), x)
.
Utilizza ora Solve(equazione, variabile) per risolvere -x2 + 2·x + 1 = 0.
La calcolatrice rielabora e visualizza …………………
Utilizza Solve(equazione, variabile) per risolvere -x2 + 2·x - 4 = 0.
La calcolatrice rielabora e visualizza …………………
Utilizza Solve(equazione, variabile) per risolvere x2 + 2·x + 1 = 0.
La calcolatrice rielabora e visualizza …………………
Utilizza Solve(equazione, variabile) per risolvere x2 + a = 0.
La calcolatrice rielabora e visualizza …………………
Utilizza ora Solve(equazione, variabile) per risolvere a·x2 + b·x + c = 0.
La calcolatrice rielabora e visualizza …………………
Correggi il risultato visualizzato:
se a = 0
allora ……………………………
altrimenti
se b2- 4ac > 0
allora …………………………..
altrimenti
se b2- 4ac = 0
allora ………………………
altrimenti …………………………
Possiamo migliorare le prestazioni definendo due nuove function. La prima calcola il grado di un polinomio:
gradoPol(pp,xx)
Func
Local nn
0! nn
(pp- (pp|xx=0))/xx ! pp
While string(pp) ¹ "0"
(pp - ( pp|xx=0) ) /xx ! pp
nn+1! nn
EndWhile
Return nn
EndFunc
La seconda intende migliorare le prestazioni miglior della function predefinita Solve.
Soll(equaz,xx)
Func
Local aa, bb, cc, delta, pp
If string(equaz)="true" or string(equaz)="false" Then
Return equaz
Else
left(equaz)- right(equaz) ! pp
If gradoPol(pp,xx) =0 Then
Return pp=0
ElseIf gradoPol(pp) =1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return aa¹ 0 and xx=ë bb/aa or aa=0 and bb=0
ElseIf gradoPol(pp) =2 Then
pp| xx=0 ! cc
( pp – cc) /xx = 0 ! bb
bb| xx = 0 ! bb
( pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and Soll(bb*x+cc=0,xx) or
aa¹ 0 and
(
delta= 0 and Solve(xx=ë bb /(2*aa),xx) or
delta> 0
and Solve(xx=(ë bb-Ö delta)/(2*aa),xx)
and Solve(xx=(ë bb+Ö delta)/(2*aa),xx)
)
Else
Return pp=0
EndIf
EndIf
EndFunc
L’espressione nella istruzione Return, scritta indentata per maggior chiarezza di lettura, va tuttavia scritta su una stessa riga.
Osserva che la function Soll(equaz,var) è ricorsiva: dal suo interno richiama se stessa. Nel caso della ricorsione questa circolarità non è viziosa poiché a ogni richiamo la function si avvia a verificare una condizione che ne interrompe il regresso all'infinito. E' quel che avviene nella riga:
Return aa=0 and Soll(bb* x+cc=0,xx) or …
ove la function è applicata a un equazione di grado inferiore.
Applica Soll(equazione, variabile) per risolvere l'equazione a·x2 + b·x + c = 0.
Adesso esamina un’altra function, analoga a Solve, per trovare gli zeri di un polinomio, cioè Zeros(polinomio,variabile):
Zeros(ë x2 + 2·x + 1, x)
La calcolatrice rielabora e visualizza …………………
Dim(ans(1))
La calcolatrice rielabora e visualizza …………………
Zeros(ë x2 + x ì 2, x)
La calcolatrice rielabora e visualizza …………………
Dim(ans(1))
La calcolatrice rielabora e visualizza …………………
Zeros(x2 + 2·x + 1, x)
La calcolatrice rielabora e visualizza …………………
Dim(ans(1))
La calcolatrice rielabora e visualizza …………………
L'oggetto matematico visualizzato, come qualunque elenco tra parentesi graffe, si chiama lista.
Attenzione: ci serviamo solitamente della parentesi graffe per descrivere insiemi; una lista è un insieme "ordinato": ad esempio la lista {1,2,3} è diversa dalla lista {1,3,2} mentre l'insieme {1,2,3} è lo stesso di {1,3,2}. Il numero di elementi di una lista si ottiene attraverso la function dim(lista).
È possibile richiamare un elemento di una lista indicando tra parentesi quadra la posizione dell’elemento. Ad esempio {1,3,2}[2] è l'elemento 3.
Osserva allora a questo punto che
ë 1*(x – ans(1)[1])(xì ans(1)[2])
restituisce una fattorizzazione del trinomio dato, cioè …………….
Poi
expand(± )
restituisce il trinomio.
Ricorderai infatti che in generale se x1 e x2 sono gli zeri del polinomio ax2+bx+c allora
ax2+bx+c= a(x - x1)(x - x2).
Applica ora Zeros per determinare gli zeri del polinomio letterale x2+a.
La calcolatrice visualizza ………………………………………………
Nota la diversa scrittura rispetto agli stessi valori ottenuti con la function Solve.
L'operatore predefinito
when(condizione, valore per condizione vera, eventuale valore altrimenti)
permette di specificare valori sotto opportune condizioni.
Per le disequazioni di II grado il comando Solve(dis-quazione, variabile) serve ben poco, come puoi renderti conto facendo calcolare ad esempio Solve(ë x2 + 2x + 1 >0, x).
La calcolatrice visualizza …………………
Dovremo quindi modificare la function posPol(polinomio,variabile) precedentemente realizzata per le disequazioni di I grado adattandola a questa nuova esigenza.
posPol(pp,xx)
Func
Local aa, bb, cc, delta, zeri, za, zb
If gradpol(pp,xx)=0 Then
Return pp>0
ElseIf gradpol(pp,xx)=1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return (aa>0 and Solve(xx>ë bb/aa,xx) ) or
(aa =0 and bb>0) or
(aa<0 and Solve(xx<ë bb/aa,xx) )
ElseIf gradpol(pp,xx)=2 Then
pp| xx=0 ! cc
(pp – cc) /xx ! bb
bb| xx = 0 ! bb
(pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and posPol(bb*x+cc,xx) or
aa>0 and (
delta<0 or
delta=0 and Solve(xx¹ ë bb/(2*aa),xx) or
delta> 0 and (
Solve(xx<ë bb- Ö delta)/(2*aa),xx) or Solve(xx>(ë bb+Ö delta)/(2*aa),xx) ) ) or
aa<0 and delta>0 and
Solve(xx>(ë bb+Ö delta)/(2*aa),xx) and
Solve(xx<(ë bb-Ö delta)/ (2*aa),xx)
Else
Return pp>0
EndIf
EndFunc
Per rendere più agevole il calcolo puoi definire eventualmente anche le funzioni negPol, noPosPol, noNegPol servendoti di posPol e del not. Ad esempio si può porre direttamente in ambiente "
Not posPol(ë pp,xx) ! noNegPol(pp,xx).
Tuttavia quando le soluzioni di posPol sono complicate la calcolatrice TI-92 si blocca nel costruire la negazione. Perciò è opportuno definire nel modo seguente, con una veloce operazione di taglia/incolla ( ¤ @ per selezionare, Copy per fare una copia della selezione, Paste per inserire il testo di cui si è fatta una copia ) a partire dal listato della funzione posPol.
noNegPol(pp,xx)
Func
Local aa, bb, cc, delta, zeri, za, zb
If gradpol(pp,xx)=0 Then
Return pp³ 0
ElseIf gradpol(pp,xx)=1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return (aa>0 and xx³ -bb/aa) or (aa =0 and bb³ 0)
or (aa<0 and xx£ ë bb/aa)
ElseIf gradpol(pp,xx)=2 Then
pp| xx=0 ! cc
(pp – cc) /xx ! bb
bb| xx = 0 ! bb
(pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and noNegPol(bb*x+cc,xx) or
aa>0 and (
delta£ 0 or
delta> 0 and (
Solve(xx£ ë bb-Ö delta)/(2*aa),xx) or
Solve(xx³ (ë bb+Ö delta)/ (2*aa),xx)
)
) or
aa<0 and delta> 0 and
Solve(xx³ (ë bb+Ö delta)/(2*aa),xx) and
Solve(xx£ (ë bb-Ö delta)/ (2*aa),xx)
Else
Return pp³ 0
EndIf
EndFunc
Per visualizzare sulla retta un insieme di soluzioni numeriche in x, come quello che si ottiene dall’applicazione della precedente funzione a disequazioni in x senza parametri, può essere utile la funzione seguente:
grafSoll (Soll)
Prgm
ClrDraw
DrawFunc when(Soll,1,0)
EndPrgm
Le istruzioni predefinite ClrDraw e DrawFunc consentono rispettivamente di ripulire la finestra grafica e di disegnare il grafico di una funzione nella variabile x.
Delimita, eventualmente, la finestra grafica in ambiente O Window Editor cambiando opportunamente in particolare i valori di xmin e xmax, di ymin e ymax.
Ad esempio:
grafSoll ( not posPol(5x^2-x,x) )
oppure, equivalentemente
not posPol(5x^2-x)
grafSoll (± ,x).
La calcolatrice rielabora e visualizza (disegna il grafico)…………………
Risolvi ora le disequazioni da 9 a 33 a pag 648 del libro di testo.
Risolvi inoltre le disequazioni da 60 a 70 a pag 649 del libro di testo.
Ad es. per il n°61 calcola
nonPosPol(x-1,x) and nonPosPol(4-x^2,x) or nonNegPol( x-1,x) and nonNegPol(4-x^2,x)
Risolvi infine i sistemi da 131 a 140 a pag 651 del libro di testo.
(Dis) equazioni di grado superiore al II
Per risolvere equazioni di grado superiore al secondo non conosci formule generali. Ce ne sono, comunque, solo per le equazioni di III e IV grado. Alternativamente si cerca in genere di fattorizzare il polinomio dato in prodotti di polinomi di I e II grado: raccoglimenti a fattor comune, ricerca per tentativi di uno zero sono i metodi più seguiti.
Si può usare la function predefinita Factor(polinomio,variabile) per scomporre in fattori. Accedere a ciascuno dei fattori, però, non è immediato.
Ci si può attrezzare anche in questo caso con un'opportuna function, come la seguente, che fa uso della function predefinita String(espressione) per trasformare una espressione in formato stringa in modo che sia poi possibile analizzarla per individuare ad esempio la presenza di caratteri particolari, ciò che si ottiene con la function predefinita inString(stringa, carattere), o per estrarre la parte a destra o quella a sinistra a partire da un certo punto, ciò che si ottiene con Right(stringa,posizione), Left(stringa,posizione) (consultare il manuale per le specifiche):
Fattori(ff)
Func
Local nn,ll
{}! ll
string(ff)! ff
inString(ff,"* (")! nn
While ff¹ "" and nn>0
augment(ll,{expr(left(ff,nn-1))})! ll
right(ff,dim(ff)-nn)! ff
inString(ff,"* (")! nn
EndWhile
augment(ll,{expr(ff)})! ll
Return ll
EndFunc
Sebbene si tratti di un analizzatore sintattico piuttosto rozzo, è sufficiente per aumentare la potenza della function Soll.
Soll(equaz,xx)
Func
Local aa, bb, cc, delta, pp, lstFatt, ss, ii
If string(equaz)="true" or string(equaz)="false" Then
Return equaz
Else
left(equaz)-right(equaz) ! pp
If gradoPol(pp,xx) =0 Then
Return pp=0
ElseIf gradoPol(pp,xx) =1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return aa¹ 0 and xx=-bb/aa or aa=0 and bb=0
ElseIf gradoPol(pp,xx) =2 Then
pp| xx=0 ! cc
(pp – cc) /xx = 0 ! bb
bb| xx = 0 ! bb
(pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and Soll(bb*xx+cc=0,xx) or aa¹ 0 and
(delta = 0 and Solve(xx=ë bb/(2*aa),xx) or
delta > 0 and
Solve(xx=(ë bb-Ö delta)/(2*aa),xx) and Solve(xx=(ë bb+Ö delta)/(2*aa),xx) )
Else
Fattori(Factor(pp,xx))! lstFatt
Soll(lstFatt[1]=0,xx) ! ss
For ii,2,dim(lstFatt)
ss or Soll(lstFatt[ii]=0,xx)! ss
EndFor
Return ss
EndIf
EndIf
EndFunc
Nello studio della positività di un polinomio di grado superiore al II potenzieremo la function posPol già realizzata.
posPol(pp,xx)
Func
Local aa, bb, cc, delta, lstFatt, ii
If gradopol(pp,xx)=0 Then
Return pp>0
ElseIf gradpol(pp,xx)=1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return (aa>0 and xx>ë bb/aa) or (aa =0 and bb>0) or (aa<0 and Solve(xx<ë bb/aa,xx) )
ElseIf gradopol(pp,xx)=2 Then
pp| xx=0 ! cc
(pp – cc) /xx ! bb
bb| xx = 0 ! bb
(pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and posPol(bb*x+cc,xx) or
aa>0 and (delta<0 or delta=0 and Solve(xx¹ ë bb/(2*aa),xx) or
delta> 0 and (Solve(xx<ë bb- Ö delta)/(2*aa),xx) or
Solve(xx>(ë bb+Ö delta)/(2*aa),xx))) or
aa<0 and delta> 0 and Solve(xx>(ë bb+Ö delta)/(2*aa),xx) and Solve(xx<(ë bb- Ö delta)/(2*aa),xx)
Else
fattori(Factor(pp,xx))! lstFatt
If dim(lstFatt)>1 Then
pp/lstFatt[1] ! pp
Return posPol(lstFatt[1],xx) and posPol(pp,xx) or
posPol(ë lstFatt[1],xx) and posPol(ë pp,xx)
Else
Return pp>0
EndIf
EndIf
EndFunc
Osserva che anche queste function sono ricorsive
Infatti ad esempio nella riga: ………………………………………… la function Soll richiama se stessa.
Infatti ad esempio nella riga: ………………………………………… la function posPol richiama se stessa.
Adegua opportunamente anche la funzione per valutare quando il polinomio è non negativo.
noNegPol(pp,xx)
Func
Local aa, bb, cc, delta, lstFatt, ii
If gradopol(pp,xx)=0 Then
Return pp³ 0
ElseIf gradpol(pp,xx)=1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return (aa>0 and xx³ ë bb/aa) or (aa =0 and bb³ 0) or
(aa<0 and Solve(xx£ ë bb/aa,xx) )
ElseIf gradopol(pp,xx)=2 Then
pp| xx=0 ! cc
(pp – cc) /xx ! bb
bb| xx = 0 ! bb
(pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and noNegPol(bb*x+cc,xx) or
aa>0 and (delta£ 0 or
delta> 0 and (Solve(xx£ ë bb- Ö delta)/(2*aa),xx) or Solve(xx³ (ë bb+Ö delta)/(2*aa),xx))) or
aa<0 and delta> 0 and Solve(xx³ (ë bb+Ö delta)/(2*aa),xx)
and Solve(xx£ (ë bb- Ö delta)/(2*aa),xx)
Else
fattori(Factor(pp,xx))! lstFatt
If dim(lstFatt)>1 Then
pp/lstFatt[1] ! pp
Return noNegPol(lstFatt[1],xx) and noNegPol(pp,xx)
or noNegPol(ë lstFatt[1],xx) and noNegPol(ë pp,xx)
Else
Return pp³ 0
EndIf
EndIf
EndFunc
Risolvi ora le disequazioni da 70 a 90 a pag 649-50 del libro di testo e i sistemi 141-2-5-6 a 149 a pag 651.
(Dis)equazioni razionali fratte
Usa Solve per risolvere l'equazione razionale fratta .
La risposta fornita dalla calcolatrice ……… è errata. Infatti …………………………….
Ciò dipende dal fatto che l’espressione viene semplificata senza tener conto del suo campo di esistenza. Così, digitando ad esempio x2/x la calcolatrice visualizza immediatamente x; dovrebbe visualizzare invece x and x¹ 0.
Usa Solve anche per risolvere l'equazione razionale fratta : nota l'uso dei simboli ¥ e -¥ per indicare un "numero infinitamente grande" e un "numero negativo di valore assoluto infinitamente grande".
Puoi mettere Solve alla prova anche di altre equazioni o disequazioni di questo tipo e otterrai risposte insoddisfacenti o nessuna risposta.
Cercheremo perciò di realizzare una funzione utile al caso.
Ricordando che un’equazione come equivale a , ecco una funzione per risolvere equazioni di questo tipo:
SollFraz(equaz,xx)
Func
Local fraz
left(equaz) – right(equaz) ! fraz
not Soll(getDenom(fraz)=0,xx) and Soll(getNum(fraz)=0, xx)
EndFunc
Le funzioni getNum(espressione) e getDenom(espressione) sono predefinite e s'incaricano di isolare numeratore e denominatore di una espressione.
Osservando che il segno di una espressione fratta come A(x)/B(x) è lo stesso del prodotto A(x)·B(x) tra numeratore e denominatore, puoi costruire una funzione come la seguente:
posFraz(espressione,xx)
Func
posPol(getNum(espressione)* getDenom(espressione),xx)
EndFunc
Risolvi ora le disequazioni da 91 a 126 a pag 650-1 del libro di testo e i sistemi 142–3-4-7-8-9 a pag 651.
posFraz(espressione,xx)
Func
Local Num, Den
getNum(espressione)! Num
getDenom(espressione)! Den
Return posPol(Num,xx) and posPol(Den,xx) or posPol(ë Num,xx) and posPol(ë Den,xx)
EndFunc
Costruisci un’unica funzione posFunz(espressione, variabile) che valuti la positività sia di una espressione polinomiale sia di un’espressione razionale fratta.
Determina attraverso Solve le soluzioni delle seguenti equazioni:
La calcolatrice visualizza ……..
La calcolatrice visualizza ……..
La calcolatrice visualizza ……..
La calcolatrice visualizza ……..
Prova poi a verificare la soluzione con x+Ö (x+1)=0|2 ± . Ottieni ……
Cercheremo anche in questo caso di costruire una funzione seguendo un metodo e le funzioni precedentemente realizzate.
Ricorda che un’equazione irrazionale come equivale al sistema: .
Traduci il sistema nel linguaggio della TI-92 nel modo seguente:
noNegPol(B,x) and Soll(A=B^2,x)
Ricorda che una disequazione irrazionale come equivale al sistema: .
Traduci il sistema nel linguaggio della TI-92 ad esempio nel modo seguente:
noNegPol(A,x) and noNegPol(B,x) and posPol(B^2 - A,x)
Ricorda che una disequazione irrazionale come equivale a una disgiunzione tra un sistema e una disequazione: vel .
Traduci il sistema nel linguaggio della TI-92 ad esempio nel modo seguente:
noNegPol(A,x) and posPol(ë B,x) or posPol(A- B^2,x) and noNegPol(B,x)
Definisci infine, concentrando i casi, la seguente funzione in cui A è sempre il radicando e B la parte intera:
disEqIrr ( A, segno, B, xx)
Func
If segno = "=" Then
Return noNegPol(B,xx) and Soll(A=B^2,xx)
ElseIf segno ="<" Then
Return noNegPol(A,xx) and noNegPol(B,xx) and
posPol(B^2 - A,xx)
ElseIf segno ="£ " Then
Return noNegPol(A,xx) and noNegPol(B,xx) and
noNegPol(A- B^2,xx)
ElseIf segno =">" Then
Return noNegPol(A,xx) and
posPol(ë B,xx) or posPol(A- B^2,xx) and noNegPol(B,xx)
ElseIf segno ="³ " Then
Return noNegPol(A,xx) and posPol(ë B,xx) or
noNegPol(B^2 - A,xx) and noNegPol(B,xx)
EndIf
EndFunc
Il parametro segno dovrà essere di tipo stringa cioè nel formato "=", "<", ">" ecc….
Risolvi ora le disequazioni da 173 a 191 a pag 653 del libro di testo.
Risolvi inoltre le disequazioni da 199 a 218 a pag 649 del libro di testo.
Possiamo scrivere una funzione che estenda la funzione Solve(Espressione, varaibile), predefinita nell’ambiente simbolico della TI-92, per risolvere equazioni e disequazioni razionali:
Soll(diseq,xx)
Func
Local aa, bb, cc, delta, pp, segno, lstfatt,ii,ss
If string(diseq)="true" or string(diseq)="false" Then
Return diseq
Else
left(diseq) – right(diseq) ! pp
string(diseq)! diseq
If GetDenom(pp)=1 Then
If InString(diseq,"=") Then
If gradoPol(pp,xx) =0 Then
Return pp=0
ElseIf gradoPol(pp,xx) =1 Then
pp| xx=0 ! bb
(pp – bb) /xx ! aa
Return aa¹ 0 and xx=-bb/aa or aa=0 and bb=0
ElseIf gradoPol(pp,xx) =2 Then
pp| xx=0 ! cc
( pp – cc) /xx = 0 ! bb
bb| xx = 0 ! bb
( pp – bb*xx - cc) /xx^2 ! aa
bb^2- 4*aa*cc ! delta
Return aa=0 and Soll(bb*xx+cc=0,xx) or
aa¹ 0 and (
delta= 0 and Solve(xx=ë bb /(2*aa),xx) or
delta> 0
and Solve(xx=(ë bb-Ö delta)/(2*aa),xx)
and Solve(xx=(ë bb+Ö delta)/(2*aa),xx)
Else
Fattori(Factor(pp,xx))! lstFatt
If dim(lstFatt)>1 Then
Soll(lstFatt[1]=0,xx) ! ss
For ii,2,dim(lstFatt)
ss or Soll(lstFatt[ii]=0,xx)! ss
EndFor
Return ss
Else
Return Solve(pp=0,xx)
EndIf
ElseIf InString(diseq,"¹ ") Then
Return not soll(pp=0)
ElseIf InString(diseq,">") Then
PosPol(pp,xx)
ElseIf InString(diseq,"<") Then
PosPol(ë pp,xx)
ElseIf InString(diseq,"³ ") Then
NoNegPol(pp,xx)
ElseIf InString(diseq,"£ ") Then
NoNegPol(ë pp,xx)
EndIf
Else
If InString(diseq,"=") Then
Soll(getNum(pp)=0,xx) and not Soll(getDenom(pp)=0,xx)
If InString(diseq,"¹ ") Then
not (Soll(getNum(pp)=0,xx) or Soll(getDenom(pp)=0,xx))
ElseIf InString(diseq,">") Then
posPol(getNum(pp)·getDenom(pp),xx)
ElseIf InString(diseq,"<") Then
posPol(ë getNum(pp)·getDenom(pp),xx)
ElseIf InString(diseq,"³ ") Then
NoNegPol(getNum(pp)·getDenom(pp),xx) and not Soll(getDenom(pp)=0,xx)
ElseIf InString(diseq,"£ ") Then
NoNegPol(ë getNum(pp)·getDenom(pp),xx) and not Soll(getDenom(pp)=0,xx)
EndIf
EndIf
EndIf
EndFunc
Potrebbe essere utile per altri scopi la seguente funzione che determina la lista dei coefficienti di un polinomio pp che è funzione di una sola variabile xx:
coeffPol(pp,xx)
Func
Local c,listc
pp|xx=0! c
{c}! listc
(pp – c)/x! pp
While string(pp) ¹ "0"
pp|xx=0! c
augment({c},listc)! listc
(pp – c)/x! pp
EndWhile
Return listc
EndFunc