Escolar Documentos
Profissional Documentos
Cultura Documentos
sym, syms
x=sym(stringa) Esempi x=sym(x) x= x a=sym(alpha) a= alpha rho=sym('(1+sqrt(5))/2') rho = (1+sqrt(5))/2 f=rho^2-rho-1 f= (1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2) simplify(f) ans = 0 f=sym(a*x^2+b*x+c) f= a*x^2+b*x+c Attenzione: non vengono create le variabili a,x,b,c esplicitamente, ma solo f A=hilb(3); A=sym(A) A= [ 1, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5] sym converte a simbolici anche dati definiti numericamente costruisce un oggetto simbolico il cui valore fornito dalla stringa specificata
Queste variabili si possono combinare con tutte le operazioni aritmetiche e le funzioni predefinite di Matlab.
Per fare operazioni matematiche (integrazione, differenziazione, sostituzione, passaggio al limite), occorre creare variabili indipendenti esplicitamente. Invece di fare a=sym(a); b=sym(b);c=sym(c);x=sym(x); si pu usare labbreviazione syms a b c x possibile specificare le propriet matematiche di un simbolo usando real in sym o real in syms: x=sym(x,real); oppure syms x real Esempi syms x y real z=x+ i*y z una variabile complessa z= x+i*y f=x^2+y^2 f non pu essere negativa f= x^2+y^2 conj(x) ans = x conj(z) ans = x-i*y z*conj(z) ans = (x+i*y)*(x-i*y) expand(z*conj(z)) distribuisce prodotti tra le somme ans = x^2+y^2 Per eliminare tale propriet, usare unreal al posto di real. syms x unreal; Esempi >>syms x y t >>r = x^2 + y^2 r= x^2+y^2 >>theta = atan(y/x) theta = atan(y/x) >>e = exp(i*pi*t) e = exp(i*pi*t)
Nel seguente esempio si genera una matrice simbolica: syms a b c A=[a b c; b c a; c a b] A= [ a, b, c] [ b, c, a] [ c, a, b] sum(A(1,:)) operazione ans= a+b+c sum(A(:,1)==sum(A(:,2) test logico ans= 1
subs
y=subs(f,x,valore) y=subs(f) permette di sostituire in f ad ogni occorrenza del simbolo x (o della stringa specificata come x) il valore dato, oppure ad ogni occorrenza di una variabile definita nell'ambiente di lavoro il suo valore. Esempi syms x f=2*x^2; y=subs(f,x,2) y= 8 y=subs(f,x,1:1:4) y= [2 8 18 32 ] g=sym('exp(-a*t)*C1'); a=980;C1=3; subs(g) ans= 3*exp(-980*t)
findsym
findsym(f,n) determina le n variabili simboliche pi prossime a x in ordine alfabetico; findsym(f,1) ritorna la variabile simbolica pi vicina a x; a parit di distanza si prende lultima in ordine alfabetico. Esempi >>syms v x y >>findsym(v+y,1) ans= y
diff
df=diff(funzione,variabile,n) permette di derivare una funzione rispetto a una variabile n volte; se variabile omessa si prende la variabile simbolica findsym(funzione,1); se n omesso, si calcola la derivata prima. Esempi syms x a n; f=sin(a*x); df=diff(f) df= cos(a*x)*a dfa=diff(f,a) dfa = cos(a*x)*x df2=diff(f,2) df2 = -sin(a*x)*a^2 dfa2=diff(f,a,2) dfa2 = -sin(a*x)*x^2 f=x^2/100*sin(x/10) f= 1/100*x^2*sin(1/10*x) df=diff(f) df = 1/50*x*sin(1/10*x)+1/1000*x^2*cos(1/10*x) df2=diff(f,2) df2 = 1/50*sin(1/10*x)+1/250*x*cos(1/10*x)-1/10000*x^2*sin(1/10*x) f=x^n f= x^n df=diff(f,x) % uguale a diff(f) df = x^n*n/x dfn=diff(f,n) dfn = x^n*log(x)
dA=diff(A) dA = [ -sin(a*x)*a, cos(a*x)*a] [ -cos(a*x)*a, -sin(a*x)*a] Calcolo dello jacobiano di una funzione da R3 pR3
detJ=det(J) detJ = -cos(t)^3*cos(f)^2*r^2-cos(t)^3*sin(f)^2*r^2-r^2*sin(t)^2*cos(f)^2*cos(t)r^2*cos(t)*sin(f)^2*sin(t)^2 detJ=simplify(det(J)) detJ = -cos(t)*r^2 syms x y z w=[x*y*z;y;x+z]; v=[x y z]; R=jacobian(w,v) R= [ y*z, x*z, x*y] [ 0, 1, 0] [ 1, 0, 1] b=jacobian(x+z,v) b= [ 1, 0, 1]
syms x y f=2*x^2+3*y^2; grad=[diff(f,x);diff(f,y)] grad = [ 4*x] [ 6*y] S=solve(grad(1),grad(2)) S= x: [1x1 sym] y: [1x1 sym] S.x ans = 0 S.y ans = 0 H=jacobian(grad,[x,y]) H= [ 4, 0] [ 0, 6] eig(H) ans = [ 4] [ 6]
f=log(1+x^2+x*y+2*y^2); grad=[diff(f,x);diff(f,y)] grad = [ (2*x+y)/(1+x^2+x*y+2*y^2)] [ (x+4*y)/(1+x^2+x*y+2*y^2)] [a,b]=solve(grad(1),grad(2)) a= 0 b= 0 H=jacobian(grad,[x,y]) H= [ 2/(1+x^2+x*y+2*y^2)-(2*x+y)^2/(1+x^2+x*y+2*y^2)^2, 1/(1+x^2+x*y+2*y^2)(2*x+y)/(1+x^2+x*y+2*y^2)^2*(x+4*y)] [ 1/(1+x^2+x*y+2*y^2)-(2*x+y)/(1+x^2+x*y+2*y^2)^2*(x+4*y), 4/(1+x^2+x*y+2*y^2)(x+4*y)^2/(1+x^2+x*y+2*y^2)^2] x=a;y=b; H1=subs(H) H1= 21 14 eig(H1) ans = 1.5858 4.4142
limit
lim=limit(funzione, x, val); permette di trovare il limite di una funzione per x tendente a val; se x omessa si usa la variabile indipendente data da findsym(funzione,1); se val omesso, assunto uguale a 0. Aggiungendo left o right come quarto parametro, si trova il limite sinistro o destro. Esempi syms h n x dc=limit((cos(x+h)-cos(x))/h, h, 0) dc= -sin(x) dc=limit((1+x/n)^n, n,inf) dc= exp(x) limit(1/x) il limite calcolato per x tendente a 0 ans= NaN limit(1/x,x,0,left) ans= -inf limit(1/x,x,0,right) ans= inf syms x f=sin(x)/x; limit(f) ans = 1
int
pr=int(funzione,variabile) permette di trovare la primitiva di funzione rispetto alla variabile specificata; se variabile omessa, assunta come variabile dintegrazione findsym(funzione,1). pr=int(funzione,variabile,a,b) permette di calcolare lintegrale di funzione sull intervallo [a,b], ove a e b possono essere variabili simboliche o stringhe. Esempi i=int(x^n) i= x^(n+1)/(n+1) i=int(sin(2*x),0,pi/2) i= 1 pr=int(sin(2*x)) pr = -1/2*cos(2*x) subs(pr,x,pi/2)-subs(pr,x,0) ans= 1 f=exp(-x^2/2); a=int(f,-inf,inf) a= 2^(1/2)*pi^(1/2) double(a) ans = 2.5066
symsum
pr=symsum(funzione) pr=symsum(funzione,variabile) permette di trovare la somma dell'espressione simbolica funzione rispetto alla variabile k come specificata da findsym(funzione,1), da 0 a k-1, oppure rispetto alla variabile specificata da 0 a variabile-1. pr=int(funzione,variabile,a,b) permette di trovare la somma dell'espressione simbolica funzione rispetto alla variabile specificata dal valore di a a quello di b, ove a e b possono essere variabili simboliche o stringhe. Esempi syms x k s1=symsum(1/k^2,1,inf) s1 = 1/6*pi^2 s2=symsum(x^k,k,1,inf) s2 = -x/(x-1)
ezplot
ezplot (funzione,a,b); ezplot(funzione,[a,b],fig) esegue il grafico di funzione (variabile simbolica o stringa) nellintervallo [a,b]; se a e b non sono specificati, il grafico fatto nellintervallo [-2*pi,2*pi]; fig indica il numero della finestra grafica in cui appare il grafico; se omesso, si usa la finestra grafica corrente. >> f=1/(5+4*cos(x)); >>ezplot(f) >>df=diff(f); >>hold on; ezplot(df);
taylor
taylor(funzione,n.termini,punto_iniziale) calcolo il polinomio di Taylor della funzione specificata fino al grado n.termini-1 (con un errore dellordine di xn.termini a partire dal punto_iniziale specificato; se non si specifica punto_iniziale, esso assunto uguale a 0 (polinomio di MacLaurin). >> syms x >>f=1/(5+4*cos(x)) f= 1/(5+4*cos(x)) >>T=taylor(f,8) T= 1/9+2/81*x^2+5/1458*x^4+49/131220*x^6 >>g=exp(x) g= exp(x) >> G=taylor(g,5) G= 1+x+1/2*x^2+1/6*x^3+1/24*x^4 Per vedere ladeguamento del polinomio di MacLaurin alla funzion exp(x) nellintervallo [-1,1], si provi questo codice: syms x; g=exp(x); for n=1:6 close; G=taylor(g,n); ezplot(g,[-1,1]); hold on; ezplot(G,[-1,1]); pause end;
pretty
pretty(funzione) permette di visualizzare in forma migliore una espressione
Le seguenti funzioni permettono di semplificare espressioni simboliche, applicando identit algebriche e trigonomeriche; in tal modo si trasforma una rappresentazione di una funzione in un'altra.
collect
collect(f) esprime f, se possibile, in forma polinomiale standard come somma di termini, ciascuno relativo a una diversa potenza di x; in generale, somma termini simili. syms x f=(x-1)*(x-2)*(x-3) f= (x-1)*(x-2)*(x-3) collect(f) ans = x^3-6*x^2+11*x-6 syms t f=(1+x)*t+x*t f= (1+x)*t+x*t collect(f) ans = 2*x*t+t
expand
expand(f) Distribuisce prodotti rispetto a somme e applica identit che coinvolgono funzioni di somma. syms x y a b expand(a*(x+y)) ans = a*x+a*y expand((x-1)*(x-2)*(x-3)) ans = x^3-6*x^2+11*x-6 expand(exp(a+b)) ans = exp(a)*exp(b) expand(cos(3*cos(x))) ans = 4*cos(cos(x))^3-3*cos(cos(x))
factor
factor(f)
Fattorizza, se possibile, un polinomio usando coefficienti razionali; nel caso non sia possibile, si riottiene il polinomio stesso. syms x f=x^3-6*x^2+11*x-6; factor(f) ans = (x-1)*(x-2)*(x-3) f=x^6+1; factor(f) ans = (x^2+1)*(x^4-x^2+1)
simplify
simplify(f) Tenta di semplificare una funzione. f=(1-x^2)/(1-x); simplify(f) ans = x+1 f=exp(x)*exp(y); simplify(f) ans = exp(x+y) f=cos(x)^2+sin(x)^2; simplify(f) ans = 1
horner
horner(f) Trasforma un polinomio f nella sua rappresentazione di Horner. In tale rappresentazione la valutazione numerica di un polinomio coinvolge il minimo numero di operazioni e il minimo errore se si usa l'aritmetica finita del calcolatore. f=x^3-6*x^2+11*x-6; horner(f) ans = -6+(11+(-6+x)*x)*x
simple
simple(f)
Ha lo scopo di trovare una semplificazione della funzione che usa il minor numero di caratteri. Tenta di raggiungere lo scopo, applicando simplify(f), factor(f), expand(f), collect(f) e altre funzioni di semplificazione. In genera migliora il risultato di una simplify(f). In alcuni casi vantaggioso applicare due volte simple(f) per ottenere differenti semplificazioni. f=(1/x^3+6/x^2+12/x+8)^(1/3); simple(f) simplify: ((2*x+1)^3/x^3)^(1/3) radsimp: (2*x+1)/x combine(trig): ((1+6*x+12*x^2+8*x^3)/x^3)^(1/3) factor: ((2*x+1)^3/x^3)^(1/3) expand: (1/x^3+6/x^2+12/x+8)^(1/3) convert(exp): (1/x^3+6/x^2+12/x+8)^(1/3) convert(sincos): (1/x^3+6/x^2+12/x+8)^(1/3) convert(tan): (1/x^3+6/x^2+12/x+8)^(1/3) collect(x): (1/x^3+6/x^2+12/x+8)^(1/3) ans = (2*x+1)/x
solve
g=solve(eq); g=solve(eq, var); g=solve(eq1,eq2,,eqn); g=solve(eq1,eq2,,eqn,var1,var2,,varn); esegue la risoluzione di una equazione o di un sistema di equazioni, rispetto alla/alle variabili di default, determinate con findsym, oppure rispetto a quella/quelle specificate. L'equazione o le equazioni possono essere espressioni simboliche o stringhe. Se l'equazione o le equazioni non contengono =, viene risolto eq=0 (oppure eq1=0, eq2=0,,eqn=0). Esempi s=solve('a*x^2+b*x+c') s= [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] s=solve('a*x^2+b*x+c','b') s= -(a*x^2+c)/x s=solve('x^3-2*x^2=x-1') s= [ 1/6*(28+84*i*3^(1/2))^(1/3)+14/3/(28+84*i*3^(1/2))^(1/3)+2/3] [ -1/12*(28+84*i*3^(1/2))^(1/3)7/3/(28+84*i*3^(1/2))^(1/3)+2/3+1/2*i*3^(1/2)*(1/6*(28+84*i*3^(1/2))^(1/3)14/3/(28+84*i*3^(1/2))^(1/3))] [ -1/12*(28+84*i*3^(1/2))^(1/3)-7/3/(28+84*i*3^(1/2))^(1/3)+2/31/2*i*3^(1/2)*(1/6*(28+84*i*3^(1/2))^(1/3)-14/3/(28+84*i*3^(1/2))^(1/3))] double(s) ans = 2.2470e+000 +1.0000e-032i -8.0194e-001 +2.0000e-032i 5.5496e-001 -4.0000e-032i
s=solve('x+y=1','x-11*y=5') s= x: [1x1 sym] y: [1x1 sym] s.x ans = 4/3 s.y ans = -1/3 [x,y]=solve('x+y=1','x-11*y=5') x = 4/3 y =-1/3
double([x,y]) ans = 1.3333 -0.3333 syms a u v f1=a*u^2+v^2;f2=u-v-1;f3=a^2-5*a+6; A=solve(f1,f2,f3) A= a: [4x1 sym] u: [4x1 sym] v: [4x1 sym] A.a ans = [ 2] [ 2] [ 3] [ 3] A.u ans = [ 1/3+1/3*i*2^(1/2)] [ 1/3-1/3*i*2^(1/2)] [ 1/4+1/4*i*3^(1/2)] [ 1/4-1/4*i*3^(1/2)] A.v ans = [ -2/3+1/3*i*2^(1/2)] [ -2/3-1/3*i*2^(1/2)] [ -3/4+1/4*i*3^(1/2)] [ -3/4-1/4*i*3^(1/2)] double([A.a(1),A.u(1),A.v(1)]) ans = 2.0000 0.3333 + 0.4714i -0.6667 + 0.4714i Nel caso di funzioni periodiche, vengono determinate spesso solo alcune soluzioni: syms x s=solve(tan(x)+sin(x)-2); x=double(s) x= 0.8863 -1.8979 2.0766 - 1.5151i 2.0766 + 1.5151i ezplot('tan(x)+sin(x)-2');hold on;w=-2*pi:pi/2:2*pi;plot(w,0*w,'r-.') rx=[x(1),x(2)];plot(rx,0*rx,'bo'); mostra le soluzioni trovate px=[x(1)-2*pi,x(2)+2*pi];plot(px,0*px,'r*') mostra le altre soluzioni
dsolve
r=dsolve('equazione1','equazione2',..'equazionen','cond1',,'condn','v'); risolve una o pi equazioni differenziali; il differenziale indicato con D seguito dalla cifra che denota l'ordine (se 1, la cifra pu essere omessa), seguita dalla variabile dipendente; se non specificata in 'v', la variabile indipendente t. Se le condizioni iniziali sono omesse, compaiono costanti arbitrarie nelle soluzioni. Esempi y=dsolve('Dy=y0*y') y= exp(y0*t)*C1 y=dsolve('Dy=y0*y','y(0)=1') y= exp(y0*t) [u,v]=dsolve('Du=v','Dv=u','u(0)=1','v(0)=1') u= exp(t) v= exp(t) [u,v]=dsolve('Du=v','Dv=-u') u= sin(t)*C1+cos(t)*C2 v= cos(t)*C1-sin(t)*C2 y=dsolve('(Dy)^2+y^2=1','s') y= [ sin(s-C1)] [ -sin(s-C1)]