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

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

24/4/2015

Inicio

Funciones MATLAB para calcular las races de una ecuacin

MATLAB

Racesdeecuaciones
Sistemasdeecuaciones
Valoresyvectores
propios
Integracinnumrica
Ecuaciones
diferenciales
Interpolacin,regresin

Numrico

FuncionesMATLABparacalcularlasraces
deunaecuacin
Enestapgina,vamoscalcularlaracesdeunpolinomiomediantelafuncinroots.Unestudiomsdetalladode
lospolinomiosseencuentraenlapginatitulada"Polinomiosyfraccionespolinmicas".Larazdeunaecuacin
medianteprocedimientosgrficos,quenosvaaservirparaestimarunvalorprximoalarazbuscada.Lasraces
deunaecuacintranscendentemediantefzeroyfinalmente,lasracesdeunsistemadeecuacionestranscedentes
mediantefsolve.

Racesdeunpolinomio
Paracalcularlasracesdelaecuacin

Ejercicios

a1xn+a2xn1+...+anx+an+1=0
seemplealafuncinrootsyselepasaelvectorpformadoporloscoeficientesdelpolinomio.Lafuncinroots
devuelveunvectorcolumnaquecontienelasraces.
>>p=[a1a2...anan+1]
>>x=roots(p)

Lafuncinrootstieneunafuncininversapolyqueselepasaelvectorxquecontienelasracesydevuelvelos
coeficientesdelpolinomio
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)%racesdelpolinomio
r=
2.0000
1.0000
1.0000+0.5000i
1.00000.5000i
0.5000
>>c=poly(r)%reconstruimoselpolinomioapartirdelasraces

Comprobamosquelasracescalculadassoncorrectasutilizandolafuncinpolyval,pasndoleloscoeficientesdel
polinomiopyelvalorxidecadaunadelasraces
>>polyval([1332],2)

Comoejerciciosesugiereallector,hallarlasracesdelasecuacionessiguientesconlafuncinrootsyreconstruir
elpolinomioconlafuncinpoly,ocalcularelvalordelpolinomioparacadaunadelasracesconlafuncin
polyval
x3+x2+x+1=0
x5+x22x4=0
x5x4+x3+2x21
http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_2.html

1/8

24/4/2015

Funciones MATLAB para calcular las races de una ecuacin

Procedimientogrfico
Vamosaestudiarvariosprocedimientosparacalcularlarazdeunaecuacintrascedente,porejemplo,x
cos(x)=0
Enprimerlugar,vamosahacerunarepresentacingrficadeestafuncinparaconoceraproximadamenteel
puntodondelafuncincortaalejeX.Escribimoselscriptmouse_raizyloguardamosunfichero.M
x=0:0.1:pi/2
y=xcos(x)
plot(x,y)
gridon
xlabel('x')
ylabel('y')
title('xcos(x)')

SeseleccionaenelmenTools/DataCursor,oeliconodelabarrahorizontaldeherramientas
.
Situamoselcursorenformadecruzprximoalarazdelafuncinypodemosleersuscoordenadas.Cuanto
mejorsealaresolucindelagrficamscercapodremosestardelarazbuscada.Laresolucindelagrficaesel
pasoxutilizado,paracalcularlatabladevalores(x,y)enelintervaloquevadesdexihastaxf.Enesteejemplo
x=0.1

PodemosutilizarlaherramientaZoomInyPan
paraacercarnosaestepuntoyelbotnZoom
Outparaalejarnosyvolveralasituacininicial.
EnlaimagenpodemosverquedespusdeacercarnosrepetidamentealpuntodecorteconelejeXmediante
ZoomInylamanoPan,larazbuscadaestcomprendidaentre0.735y0.74.

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

2/8

24/4/2015

Funciones MATLAB para calcular las races de una ecuacin

Racessimples
PodemosutilizarelpunterodelratnparabuscarlospuntosenlosquelafuncincortaalejeX,aadiendoel
comandoginputalfinaldelscriptmouse_raiz
x=0:0.1:pi/2
y=xcos(x)
plot(x,y)
gridon
xlabel('x')
ylabel('y')
title('xcos(x)')
[xRaiz,yRaiz]=ginput

Enlaventanadecomandoscorremoselscriptmouse_raiz.Larazbuscadasesealamedianteelcursorenforma
decruzdecolornegro.SepulsaelbotnizquierdodelratnyluegolateclaRetorno.
>>mouse_raiz
xRaiz=0.7379
yRaiz=0.0022

Racesmltiples
Silafuncintienemsdeunaraz,sesealacadaunodelospuntosdeinterseccindelafuncinconelejeX
conelpunterodelratnysepulsaelbotnizquierdodelratn.Finalmente,sepulsaRetornoyaparecenlas
abscisasenelvectorxRaizylasordenadasenelvectoryRaizdedichospuntos.
Nosaproximaremosalasracesqueyaconocemosdeunafuncinparailustraresteinteresanteprocedimiento
grfico
Guardamoselscriptmouse_raizmedianteFile/SaveAs..conelnombremouse_raiz_1.Modificamoselscript
pararepresentarlafuncincosenoconelejehorizontalengradosyloguardamosmedianteFile/Saveopulsando
eliconocorrespondiente.
Lasdosracesdecos(x)=0enelintervalo(0,360)son90y270.
x=0:1:360
y=cosd(x)
plot(x,y)

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

3/8

24/4/2015

Funciones MATLAB para calcular las races de una ecuacin


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

Enlaventanadecomandoscorremoselscriptmouse_raiz_1.Enlaventanagrfica,pulsamosdosveceselbotn
izquierdodelratn:
1. cuandoelpunteroestsituadoaproximadamenteenelpuntodecoordendas(90,0),pulsamoselbotnizquierdo
delratn
2. cuandoelpunteroestsituadoenelpunto(270,0),pulsamoselbotnizquierdodelratn
3. pulsamosRetorno,
yobtenemoslosiguiente:
>>mouse_raiz_1
xRaiz=89.8618270.5069
yRaiz=0.00880.0029

Elprocedimientogrficonosdaunaestimacindelasraces(puntosdeinterseccinenlarepresentacingrfica
delafuncinconelejeX)deunaecuacintrascendenteenunintervalo(a,b)dado.

LafuncinMATLABfzero
Lafuncinfzeropuedeencontrarlarazdeunaecuacintrascendentef(x)=0.Susintaxises
fzero(funcion,x0)
Dondefuncioneselnombredelafuncincuyasracesqueremosdeterminaryx0eselintervalo[ab]dondela
funcincambiadesigno,esdecir,elsignodef(a)esdistintoalsignodef(b).x0puedesertambinunvalor
cercanoalarazesdecir,unaprimeraaproximacin.Podemosdefinirunafuncinannimayguardarlaenel
manejadorfunc.Lepasamoslafuncinannimafuncafzero.
Enlaventanadecomandos,definimoslafuncinybuscamosunintervalo[0.41]dondelafuncincambiade
signo.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])%intervalodondeseencuentralaraz
r=0.7391
>>fzero(func,0.6)%aproximacininicialalaraz
ans=
0.7391

Podemosdefinirexplcitamentelafuncinfuncyguardarlaenelficherofunc.m
functiony=func(x)
y=cos(x)x
end

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

Aveceslafuncinfuncdefinidayguardadaenunfichero.Mprecisadelosvaloresdeciertosparmetrosa,b
functiony=func(x,a,b)
%cdigodelafuncin
end

Afzerosolamentelepodemospasarelmanejador(handle)delafuncindevariablex.Laformaenquela
funcinfuncconoceelvalordesusparmetrosaybescrearunafuncinannimaf1entrminosdefuncysele
pasamossumanejadoralafuncinfzero
f1=@(x)func(x,a,b)

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

4/8

24/4/2015

Funciones MATLAB para calcular las races de una ecuacin


p=fzero(f1,x0)

Enelejercicio"LaecuacindevanderWaals"utilizaremosestaopcin.

Funcionesimplcitas
LasiguientefuncinseestudiaenlaasignaturaEnergaSolarFotovoltaica(tercercurso).
y = 3

510

12

x + 0.01y
exp

0.025

1)

x + 0.01y
1000

Dondexrepresentaladiferenciadepotencialeylaintensidaddelacorrienteelctrica.
Representamoslafuncinf(x,y)elintervalo[0,0.7]enelejeXyenelintervalo[0,3.1]enelejeY.Utilizamosla
funcinMATLABcontourquehabitualmenteseempleaparadibujarcurvasdenivel.
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)/1000y
contour(x,y,f,[0,0],'r')
xlabel('d.d.p.V')
ylabel('Intensidad')
title('Fotovoltaica')
gridon

Unarepresentacingrficasimilarlaobtenemosconlafuncinezplot
Vamosaestudiarconmsdetalleestafuncin.
Enprimerlugar,sabemosqueparaelvalordexprximoa0.6V(diferenciadepotencial)laintensidadyvale
cero.EmpleamoslafuncinMATLABfzeroparaobtenerunvalormspreciso.
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)
fprintf('Valormximodelad.d.p.%1.4f\n',Vmax)

Enlaventanadecomandosvemosestevalor
Valormximodelad.d.p.0.6780

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

5/8

24/4/2015

Funciones MATLAB para calcular las races de una ecuacin

Dadounvalordeladiferenciadepotencialxenelintervalo[0,0.678],queremosobtenerelcorrespondientevalor
delaintensidaddelacorrientey.Suministramosafzerounvalorprximoalarazbuscada,porejemplo,3.
Aadimoslassiguienteslneasdecdigoalscript.
....
x=0.6
g=@(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],queremosobtenerel
correspondientevectordeintensidadesy.Finalmente,conestosdosvectores(x,y)dibujaremoslacurvadiferencia
depotencialintensidadmedianteelcomandoplot.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')%evitaquefzeroemitamensajesdeaviso
y=zeros(size(x))
fori=1:n
y(i)=fzero(@(y)f(x(i),y),3,opt)
end
plot(x,y,'r')
ylim([03.1])
xlabel('d.d.p.V')
ylabel('Intensidad')
title('Fotovoltaica')

ObtenemosunarepresentacingrficasimilaralaobtenidaempleandolafuncinMATLABcontour.

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

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

6/8

24/4/2015

Funciones MATLAB para calcular las races de una ecuacin

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

VamosautilizarlafuncinfsolvedeMATLABparaobtenerelpuntodeinterseccin.
Enprimerlugar,tenemosquedefinirlafuncindenominadasis_ecuacionesyguardarlaenelcorrespondiente
fichero.M.Aestafuncinletenemosquepasarlosvaloresdexeyenelvectorxn,ynosdevuelvelosvaloresde
lasfuncionesf1(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_scriptparallamaralprocedimientonumricoimplementadoenlafuncin
fsolvedeMATLAB.
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)delpunto
deinterseccinbuscadoylosvaloresdelasfuncionesf1(x,y)yf2(x,y)endichopunto.
Enlaventanadecomandoscorremoselscriptsis_ecuaciones_script
>>sis_ecuaciones_script
Lasolucinesx=3.958,y=2.664
Valoresdelafuncin=1.33692e010
Valoresdelafuncin=3.07305e009

EnergasRenovablesEUITIdeEibar

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

7/8

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

También podría gustarte