# how to write a bisection loop?

20 ビュー (過去 30 日間)
wenchong chen 2021 年 2 月 28 日

y = (-0.50598*10^-10)*x.^3 + (0.38292*10^-7)*x.^2 + (0.74363*10^-4)*x + 0.88318*10^-2
and I am trying to use bisection to find three point for this function, here is what I did.
For bisection one: xl = -1000 and xu = -500, xm = (-1000+(-500))/2 = -750
If xl*xu < 0
Xu=xm
Xm=(xl+xu)/2
error = ((xm-xu)/xm)*100
end
If xl*xu >0
xl = xm
Xm=(xl+xu)/2
error = ((xm-xu)/xm)*100
end
If error < 5
end
this is what I plan to do in word I dont know how to make a funtion to start it.
##### 7 件のコメント表示非表示 6 件の古いコメント
Jan 2021 年 3 月 1 日
It is still not clear, what you want to achieve. "bisection between -1000 to -500, -500 to 0 and 1500 – 2000" does not explain this, because you can divide anything into anything. I guess, you want to find a minimum or zero value?
If you check for "if xl*xu<0" you need an "else" to handle the opposite case. Changing the value of xu and checking again "if xl*xu>0" is not suffcient.
The case that "xl*xu==0" is not considered.
Most likely I assume you want to create a function, which is evaluated at the points xl and xu. Comparing the x values is not meaningful. You can find many bisection codes in Matlab, if you ask an internet search engine.

サインインしてコメントする。

### 回答 (1 件)

Matt J 2021 年 3 月 1 日

Because y is a polynomial, it is much more expedient to use roots(),
y = [(-0.50598*10^-10) , (0.38292*10^-7) , (0.74363*10^-4), 0.88318*10^-2];
r=roots(y)
r = 3×1
1.6884 -0.8029 -0.1288
fplot(@(x)polyval(y,x)); hold on
plot(r,0*r,'*'); hold off
xlim([min(r), max(r)])

サインインしてコメントする。

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by