How to find positive x-root of this function?
6 次查看(过去 30 天)
显示 更早的评论
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 个评论
Gang-Gyoo
2012-11-4
you shound put the fprintf statement inside the while statement as
fprintf('%f %f %f \n', fl, fu, xr);
采纳的回答
Jonathan Epperl
2012-11-1
编辑:Jonathan Epperl
2012-11-1
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 个评论
Jonathan Epperl
2012-11-2
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
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Hypothesis Tests 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!