Funciones MATLAB Para Calcular Las Raíces de Una Ecuación

8
Raíces de ecuaciones Sistemas de ecuaciones Valores y vectores propios Integración numérica Ecuaciones diferenciales Interpolación, regresión Ejercicios Inicio MATLAB Numérico Funciones MATLAB para calcular las raíces de una ecuación En esta página, vamos calcular la raíces de un polinomio mediante la función roots. Un estudio más detallado de los polinomios se encuentra en la página titulada "Polinomios y fracciones polinómicas ". La raíz de una ecuación mediante procedimientos gráficos, que nos va a servir para estimar un valor próximo a la raíz buscada. Las raíces de una ecuación transcendente mediante fzero y finalmente, las raíces de un sistema de ecuaciones transcedentes mediante fsolve. Raíces de un polinomio Para calcular las raíces de la ecuación a 1 x n +a 2 x n1 +...+a n x+a n+1 =0 se emplea la función roots y se le pasa el vector p formado por los coeficientes del polinomio. La función roots devuelve un vector columna que contiene las raíces. >> p=[a 1 a 2 ... a n a n+1 >> x=roots(p) La función roots tiene una función inversa poly que se le pasa el vector x que contiene las raíces y devuelve los coeficientes del polinomio p=poly(x) Sea f(x)= x 5 3.5x 4 +2.75x 3 +2.125x 2 3.875x +1.25 Guardamos los coeficientes del polinomio en el vector fila p=[1 3.5 2.75 2.125 3.875 1.25]; Mediante la función plolyval, podemos calcular el valor del polinomio cuando proporcionamos el valor de x >> p=[1 3.5 2.75 2.125 3.875 1.25]; >> polyval(p, 1.5) %valor del polinomio cuando se proporciona el valor de x. ans= 0.6250 >> r=roots(p) %raíces del polinomio r = 2.0000 1.0000 1.0000 + 0.5000i 1.0000 0.5000i 0.5000 >> c=poly(r) %reconstruimos el polinomio a partir de las raíces Comprobamos que las raíces calculadas son correctas utilizando la función polyval, pasándole los coeficientes del polinomio p y el valor x i de cada una de las raíces >> polyval([1 3 3 2], 2) Como ejercicio se sugiere al lector, hallar las raíces de las ecuaciones siguientes con la función roots y reconstruir el polinomio con la función poly, o calcular el valor del polinomio para cada una de las raíces con la función polyval x 3 + x 2 + x +1=0 x 5 +x 2 2x4=0 x 5 x 4 + x 3 +2x 2 1

description

Funciones para calcular raices en MATLAB

Transcript of Funciones MATLAB Para Calcular Las Raíces de Una Ecuación

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 1/8

    Racesdeecuaciones

    Sistemasdeecuaciones

    Valoresyvectorespropios

    Integracinnumrica

    Ecuacionesdiferenciales

    Interpolacin,regresin

    Ejercicios

    Inicio MATLAB Numrico

    FuncionesMATLABparacalcularlasracesdeunaecuacin

    Enestapgina,vamoscalcularlaracesdeunpolinomiomediantelafuncinroots.Unestudiomsdetalladodelospolinomiosseencuentraenlapginatitulada"Polinomiosyfraccionespolinmicas".Larazdeunaecuacinmedianteprocedimientosgrficos,quenosvaaservirparaestimarunvalorprximoalarazbuscada.Lasracesdeunaecuacintranscendentemediantefzeroyfinalmente,lasracesdeunsistemadeecuacionestranscedentesmediantefsolve.

    Racesdeunpolinomio

    Paracalcularlasracesdelaecuacin

    a1xn+a2xn1+...+anx+an+1=0

    seemplealafuncinrootsyselepasaelvectorpformadoporloscoeficientesdelpolinomio.Lafuncinrootsdevuelveunvectorcolumnaquecontienelasraces.

    >>p=[a1a2...anan+1]>>x=roots(p)

    Lafuncinrootstieneunafuncininversapolyqueselepasaelvectorxquecontienelasracesydevuelveloscoeficientesdelpolinomio

    p=poly(x)

    Seaf(x)=x53.5x4+2.75x3+2.125x23.875x+1.25

    Guardamosloscoeficientesdelpolinomioenelvectorfilap=[13.52.752.1253.8751.25]

    Mediantelafuncinplolyval,podemoscalcularelvalordelpolinomiocuandoproporcionamoselvalordex

    >>p=[13.52.752.1253.8751.25]>>polyval(p,1.5)%valordelpolinomiocuandoseproporcionaelvalordex.ans=0.6250>>r=roots(p)%racesdelpolinomior=2.00001.00001.0000+0.5000i1.00000.5000i0.5000>>c=poly(r)%reconstruimoselpolinomioapartirdelasraces

    Comprobamosquelasracescalculadassoncorrectasutilizandolafuncinpolyval,pasndoleloscoeficientesdelpolinomiopyelvalorxidecadaunadelasraces

    >>polyval([1332],2)

    Comoejerciciosesugiereallector,hallarlasracesdelasecuacionessiguientesconlafuncinrootsyreconstruirelpolinomioconlafuncinpoly,ocalcularelvalordelpolinomioparacadaunadelasracesconlafuncinpolyval

    x3+x2+x+1=0x5+x22x4=0x5x4+x3+2x21

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 2/8

    Procedimientogrfico

    Vamosaestudiarvariosprocedimientosparacalcularlarazdeunaecuacintrascedente,porejemplo,xcos(x)=0

    Enprimerlugar,vamosahacerunarepresentacingrficadeestafuncinparaconoceraproximadamenteelpuntodondelafuncincortaalejeX.Escribimoselscriptmouse_raizyloguardamosunfichero.M

    x=0:0.1:pi/2y=xcos(x)plot(x,y)gridonxlabel('x')ylabel('y')title('xcos(x)')

    SeseleccionaenelmenTools/DataCursor,oeliconodelabarrahorizontaldeherramientas .Situamoselcursorenformadecruzprximoalarazdelafuncinypodemosleersuscoordenadas.Cuantomejorsealaresolucindelagrficamscercapodremosestardelarazbuscada.Laresolucindelagrficaeselpasoxutilizado,paracalcularlatabladevalores(x,y)enelintervaloquevadesdexihastaxf.Enesteejemplox=0.1

    PodemosutilizarlaherramientaZoomInyPan paraacercarnosaestepuntoyelbotnZoomOutparaalejarnosyvolveralasituacininicial.EnlaimagenpodemosverquedespusdeacercarnosrepetidamentealpuntodecorteconelejeXmedianteZoomInylamanoPan,larazbuscadaestcomprendidaentre0.735y0.74.

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 3/8

    Racessimples

    PodemosutilizarelpunterodelratnparabuscarlospuntosenlosquelafuncincortaalejeX,aadiendoelcomandoginputalfinaldelscriptmouse_raiz

    x=0:0.1:pi/2y=xcos(x)plot(x,y)gridonxlabel('x')ylabel('y')title('xcos(x)')[xRaiz,yRaiz]=ginput

    Enlaventanadecomandoscorremoselscriptmouse_raiz.Larazbuscadasesealamedianteelcursorenformadecruzdecolornegro.SepulsaelbotnizquierdodelratnyluegolateclaRetorno.

    >>mouse_raizxRaiz=0.7379yRaiz=0.0022

    Racesmltiples

    Silafuncintienemsdeunaraz,sesealacadaunodelospuntosdeinterseccindelafuncinconelejeXconelpunterodelratnysepulsaelbotnizquierdodelratn.Finalmente,sepulsaRetornoyaparecenlasabscisasenelvectorxRaizylasordenadasenelvectoryRaizdedichospuntos.

    Nosaproximaremosalasracesqueyaconocemosdeunafuncinparailustraresteinteresanteprocedimientogrfico

    Guardamoselscriptmouse_raizmedianteFile/SaveAs..conelnombremouse_raiz_1.ModificamoselscriptpararepresentarlafuncincosenoconelejehorizontalengradosyloguardamosmedianteFile/Saveopulsandoeliconocorrespondiente.

    Lasdosracesdecos(x)=0enelintervalo(0,360)son90y270.

    x=0:1:360y=cosd(x)plot(x,y)

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 4/8

    gridonxlabel('x')ylabel('y')title('cos(x)')[xRaiz,yRaiz]=ginput

    Enlaventanadecomandoscorremoselscriptmouse_raiz_1.Enlaventanagrfica,pulsamosdosveceselbotnizquierdodelratn:

    1. cuandoelpunteroestsituadoaproximadamenteenelpuntodecoordendas(90,0),pulsamoselbotnizquierdodelratn

    2. cuandoelpunteroestsituadoenelpunto(270,0),pulsamoselbotnizquierdodelratn

    3. pulsamosRetorno,

    yobtenemoslosiguiente:

    >>mouse_raiz_1xRaiz=89.8618270.5069yRaiz=0.00880.0029

    Elprocedimientogrficonosdaunaestimacindelasraces(puntosdeinterseccinenlarepresentacingrficadelafuncinconelejeX)deunaecuacintrascendenteenunintervalo(a,b)dado.

    LafuncinMATLABfzero

    Lafuncinfzeropuedeencontrarlarazdeunaecuacintrascendentef(x)=0.Susintaxises

    fzero(funcion,x0)

    Dondefuncioneselnombredelafuncincuyasracesqueremosdeterminaryx0eselintervalo[ab]dondelafuncincambiadesigno,esdecir,elsignodef(a)esdistintoalsignodef(b).x0puedesertambinunvalorcercanoalarazesdecir,unaprimeraaproximacin.Podemosdefinirunafuncinannimayguardarlaenelmanejadorfunc.Lepasamoslafuncinannimafuncafzero.

    Enlaventanadecomandos,definimoslafuncinybuscamosunintervalo[0.41]dondelafuncincambiadesigno.Alternativamente,probamosunaprimaraaproximacinalarazbuscadax0=0.6

    >>func=@(x)cos(x)x>>func(0.4)ans=0.5211>>func(1)ans=0.4597>>r=fzero(func,[0.41])%intervalodondeseencuentralarazr=0.7391>>fzero(func,0.6)%aproximacininicialalarazans=0.7391

    Podemosdefinirexplcitamentelafuncinfuncyguardarlaenelficherofunc.m

    functiony=func(x)y=cos(x)xend

    Llamamosafzeroanteponiendoalnombredelafuncinelsmbolo@(vasealfinaldelapginaFunciones)

    >>fzero(@func,0.6)ans=0.7391

    Aveceslafuncinfuncdefinidayguardadaenunfichero.Mprecisadelosvaloresdeciertosparmetrosa,b

    functiony=func(x,a,b)%cdigodelafuncinend

    Afzerosolamentelepodemospasarelmanejador(handle)delafuncindevariablex.Laformaenquelafuncinfuncconoceelvalordesusparmetrosaybescrearunafuncinannimaf1entrminosdefuncyselepasamossumanejadoralafuncinfzero

    f1=@(x)func(x,a,b)

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 5/8

    p=fzero(f1,x0)

    Enelejercicio"LaecuacindevanderWaals"utilizaremosestaopcin.

    Funcionesimplcitas

    LasiguientefuncinseestudiaenlaasignaturaEnergaSolarFotovoltaica(tercercurso).

    Dondexrepresentaladiferenciadepotencialeylaintensidaddelacorrienteelctrica.

    Representamoslafuncinf(x,y)elintervalo[0,0.7]enelejeXyenelintervalo[0,3.1]enelejeY.UtilizamoslafuncinMATLABcontourquehabitualmenteseempleaparadibujarcurvasdenivel.

    xx=linspace(0,0.7,50)yy=linspace(0,3.1,100)[x,y]=meshgrid(xx,yy)f=35e12*(exp((x+y*0.01)/0.025)1)(x+y*0.01)/1000ycontour(x,y,f,[0,0],'r')xlabel('d.d.p.V')ylabel('Intensidad')title('Fotovoltaica')gridon

    Unarepresentacingrficasimilarlaobtenemosconlafuncinezplot

    Vamosaestudiarconmsdetalleestafuncin.

    Enprimerlugar,sabemosqueparaelvalordexprximoa0.6V(diferenciadepotencial)laintensidadyvalecero.EmpleamoslafuncinMATLABfzeroparaobtenerunvalormspreciso.

    f=@(x,y)35e12*(exp((x+y*0.01)/0.025)1)(x+y*0.01)/1000yg=@(x)f(x,0)Vmax=fzero(g,0.6)fprintf('Valormximodelad.d.p.%1.4f\n',Vmax)

    Enlaventanadecomandosvemosestevalor

    Valormximodelad.d.p.0.6780

    Z + w

    FYQ

    +

    +

    +

    Y Z

    Y Z

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 6/8

    Dadounvalordeladiferenciadepotencialxenelintervalo[0,0.678],queremosobtenerelcorrespondientevalordelaintensidaddelacorrientey.Suministramosafzerounvalorprximoalarazbuscada,porejemplo,3.Aadimoslassiguienteslneasdecdigoalscript.

    ....x=0.6g=@(y)f(x,y)y=fzero(g,3)fprintf('Paraunad.d.p.de%1.4flecorrespondeunaintensidadde%1.4f\n',x,y)

    Enlaventanadecomandosvemosestevalor

    Paraunad.d.p.de0.6000lecorrespondeunaintensidadde2.6214

    Dadounvectordevaloresdeladiferenciadepotencialxelintervalo[0,0.678],queremosobtenerelcorrespondientevectordeintensidadesy.Finalmente,conestosdosvectores(x,y)dibujaremoslacurvadiferenciadepotencialintensidadmedianteelcomandoplot.Elscriptcompletoeselsiguiente

    f=@(x,y)35e12*(exp((x+y*0.01)/0.025)1)(x+y*0.01)/1000y

    g=@(x)f(x,0)Vmax=fzero(g,0.6)%intervalodevaloresdelad.d.p.[0,Vmax]

    x=linspace(0,Vmax,100)n=length(x)opt=optimset('display','off')%evitaquefzeroemitamensajesdeavisoy=zeros(size(x))fori=1:ny(i)=fzero(@(y)f(x(i),y),3,opt)endplot(x,y,'r')ylim([03.1])xlabel('d.d.p.V')ylabel('Intensidad')title('Fotovoltaica')

    ObtenemosunarepresentacingrficasimilaralaobtenidaempleandolafuncinMATLABcontour.

    Sistemasdeecuacionesnolineales

    Calcularlasracesdelsistemadedosecuaciones:

    f1(x,y)=2x2xy5x1=0f2(x,y)=x+3log10xy2=0

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 7/8

    EnlafiguravemoselpuntodeinterseccinymedianteTools/DataCursorsuscoordendasaproximadas..

    x=linspace(2.5,5.5,50)y1=(2*x.^ 25*x1)./xy2=sqrt(x+3*log10(x))plot(x,y1,'b',x,y2,'r')

    VamosautilizarlafuncinfsolvedeMATLABparaobtenerelpuntodeinterseccin.

    Enprimerlugar,tenemosquedefinirlafuncindenominadasis_ecuacionesyguardarlaenelcorrespondientefichero.M.Aestafuncinletenemosquepasarlosvaloresdexeyenelvectorxn,ynosdevuelvelosvaloresdelasfuncionesf1(x,y)yf2(x,y)enelvectors.

    functions=sis_ecuaciones(xn)x=xn(1)y=xn(2)s=[2*x^ 2x*y5*x1,x*3*log10(x)y^ 2]end

    Creamoselscriptsis_ecuaciones_scriptparallamaralprocedimientonumricoimplementadoenlafuncinfsolvedeMATLAB.

    x0=[32]%valorinicial[x,fval]=fsolve(@sis_ecuaciones,x0)fprintf('Lasolucinesx=%1.3f,y=%1.3f\n',x(1),x(2))fprintf('Valoresdelafuncin=%g\n',fval)

    Afsolvetenemosquepasarlelafuncinquehemosdefinido,sis_ecuacionesylaaproximaxininicial(x0,y0)quehemosencontradoanteriormentedeformagrfica.Estafuncinnosdevuelvelascoordenadas(x,y)delpuntodeinterseccinbuscadoylosvaloresdelasfuncionesf1(x,y)yf2(x,y)endichopunto.

    Enlaventanadecomandoscorremoselscriptsis_ecuaciones_script

    >>sis_ecuaciones_scriptLasolucinesx=3.958,y=2.664Valoresdelafuncin=1.33692e010Valoresdelafuncin=3.07305e009

    EnergasRenovablesEUITIdeEibar

  • 24/4/2015 Funciones MATLAB para calcular las races de una ecuacin

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html 8/8