How to find positive x-root of this function?
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Hi All,
I want to find positive root x of this function;
x^10=1;
I wrote a program using modified false postion algorythm but i don't know how to use it to solve equation written above. Here is the Code;
function ModFalsePos=eqn(xl,xu,es,xr,ea)
f=@(x)x^10-1
xl=0
xu=1.3
es=0.01
fl=f(xl)
fu=f(xu)
while (1)
    xr=xu-fu*(xl-xu)/(fl-fu)
    xrold=xr
    fr=f(xr)
    if xr<0
    elseif xr>0
        ea=abs((xr-xold)/xr)*100
    end
    test=fl*fr
    if test<0
        xu=xr
        fu=f(xu)
        iu=0
        il=il+1
        if il>=2
            fl=fl/2
        end
    elseif test>0
        xl=xr
        fl=f(xl)
        il=0
        iu=iu+1
        if iu>=2
            fu=fu/2
        end
    else
        ea=0
    end
    if ea<es
        break
    end
end
ModFalsePos=xr
end
Could anyone please help me for solving this equation using this code? What's wrong here?
Thanks for any Help!
10 comentarios
  Gang-Gyoo
 el 4 de Nov. de 2012
				you shound put the fprintf statement inside the while statement as
fprintf('%f %f %f \n', fl, fu, xr);
Respuesta aceptada
  Jonathan Epperl
      
 el 1 de Nov. de 2012
        
      Editada: Jonathan Epperl
      
 el 1 de Nov. de 2012
  
      Okay, in this line here:
ea=abs((xr-xold)/xr)*100
ea is always going to be zero, since a few lines above, you assigned xold=xr. Thus your algorithm always exits after the first iteration. So you need to flip the first lines after while:
    xrold = xr;
    xr = xu - fu*(xl-xu)/(fl-fu);
Then, you need to initialize iu, il and xr outside of the loop.
xu=1.3;
xr=xu;
iu = 0; il = 0;
Also, remove the function line and the last end, what you have here is a script, not a function. If you want it to be a function, at least f should be an input argument, too, otherwise it doesn't make much sense.
And now it should be running.
2 comentarios
  Jonathan Epperl
      
 el 2 de Nov. de 2012
				Ah yeah, I also forgot that I had to change this line
ea=abs((xr-xold)/xr)*100
to this
ea=abs((xr-xrold)/xr)*100
assuming that you just made a typo, calling on xold instead of xrold. Here is the entire code, and it runs. If you want more outputs, then just remove the semicolon ";" from the end of the respective line.
Another thing that you didn't do: Initialize ea.
Without further ado, here's my complete code, that should really run now, with different values for xl and xu:
f=@(x)x^10-1
xl=-.5
xu=14
xr = xu;
es=0.01
fl=f(xl)
fu=f(xu)
ea = inf;
iu = 0; il = 0;
while (1)
    xrold = xr;
    xr = xu - fu*(xl-xu)/(fl-fu)
      fr = f(xr);
      if xr<0
      elseif xr>0
          ea=abs((xr-xrold)/xr)*100 % relative change in xr?
      end
      test = fl*fr
      if test<0
          xu = xr
          fu = f(xu)
          iu = 0
          il = il+1
          if il>=2
              fl=fl/2
          end
      elseif test>0
          xl=xr
          fl=f(xl)
          il=0
          iu=iu+1
          if iu>=2
              fu=fu/2
          end
      else
          ea=0
      end
      if ea<es
          break
      end
  end
  ModFalsePos=xr
Más respuestas (1)
Ver también
Categorías
				Más información sobre Octave en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



