필터 지우기
필터 지우기

How to solve function with Bisection and Secant method

조회 수: 9 (최근 30일)
AlyseW7
AlyseW7 2016년 2월 19일
답변: Kinza Shahzad 2018년 6월 1일
Hi, I need help solving the function 600x^4-550x^3+200x^2-20x-1=0 using the Bisection and Secant method in MATLAB. I tried using a previous code for the bisection method but had no luck.
function p = Bisection(f,a,b)
% Provide the equation you want to solve with R.H.S = 0 form.
f = 600*p^4-550*p^3+200*p^2-20*p-1;
% Write the L.H.S by using inline function
% Give initial guesses.
a=1;
b=2;
% Solves it by method of bisection.
if f(a)*f(b)>0
disp('Choose another guess')
else
p = (a + b)/2;
err = abs(f(p));
while err > 1e-7
if f(a)*f(p)<0
b = p;
else
a = p;
end
p = (a + b)/2;
err = abs(f(p));
end
end
For the Secant method, I tried implementing the code used on a Wikipedia site but also am having trouble.
%Secant Method is used to find a solution to f(x)=0
%Reference: https://en.wikipedia.org/wiki/Secant_method
f=@(x) 600*x^4-550*x^3+200*x^2-20*x-1;
x(1)=0.1;
x(2)=1;
for i=1:10
x(i) = x(i-1) - (f(x(i-1)))*((x(i-1) - x(i-2))/(f(x(i-1)) - f(x(i-2))));
end
root=x(10)
I am not used to using MATLAB and would really like some advice on how to solve these problems.

답변 (2개)

Arnab Sen
Arnab Sen 2016년 2월 24일
Hello AlyseW7,
I have investigated on both code for Bisection and secant methods and have few observations, which I will discuss one after another:
1. Bisection method:
I. You need to define 'f' as anonymous function and 'f' should hold the handle of the function as below:
>> f = @(p)600*p^4-550*p^3+200*p^2-20*p-1;
II. The initial guess is not accurate. If we have a closer look into the function 'f' we can easily notice there are very limited set of values for which it will evaluated to be negative. Because we can see that (600*p^4-550*p^3) is positive for any p>=1 and p<0. Similar is the case for (200*p^2-20*p). for p=0, f(p)=-1. So, clearly the solution is something between 0 and 1. Hence we can choose the initial guess wisely as a=0 and b=1. This should give the solution as 0.2324.
2. Secant Method:
I. I notice an error in the line # 7 of the code, i.e evaluation of 'x(i)' inside the for loop. Unlike other languages C or C++ MATLAB array indexing starts from 1 instead of 0. Now for i=1, x(i-1) is evaluated as x(-1) and x(i-2) evaluated as x(-2), where negative subscript in array is not allowed. So, start the loop for i=3 to avoid it as below
for i=3:10
x(i) = x(i-1) - (f(x(i-1)))*((x(i-1) - x(i-2))/(f(x(i-1)) - f(x(i-2))));
end
Regards,
Arnab

Kinza Shahzad
Kinza Shahzad 2018년 6월 1일
but this one is not accurate for 5 decimal places :/ , what to do for that ?

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

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

Start Hunting!

Translated by