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

Post on 05-Sep-2015

94 views 3 download

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