Upload
jose-daniel-fraire
View
88
Download
3
Embed Size (px)
DESCRIPTION
Funciones para calcular raices en MATLAB
Citation preview
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