Notice that a general function may have infinitely many roots even of a finite interval.
And MATLAB can find only one root at once starting from some initial value.
Therefore before writting the script we should localize the roots.
First look at the graph of the function
f(x) = x^3-7x^2cos(3x)+3.
Run the code:
f=@(x) x.^3-7*x.^2.*cos(3*x)+3;
a=-0.1;
b=30;
x=[a:0.01:b];
hold off
plot(x,f(x))
hold on
plot([a,b],[0,0],'r')
We will see in the plot that the positive roots of f are in the interval [0,7], and f(x)>0 for x>7.
Again rerun the script changing b=1.
f=@(x) x.^3-7*x.^2.*cos(3*x)+3;
a=-0.1;
b=1;
x=[a:0.01:b];
hold off
plot(x,f(x))
hold on
plot([a,b],[0,0],'r')
We will see that there are no roots on the interval [-0.1,1]
Rerun the script changing a=1, b=7.
f=@(x) x.^3-7*x.^2.*cos(3*x)+3;
a=-0.1;
b=7;
x=[a:0.01:b];
hold off
plot(x,f(x))
hold on
plot([a,b],[0,0],'r')
We will see 6 roots aproximately at points
1.8, 2.5, 3.8, 4.5, 6.1, 6.5
Now we can find all the by running the following command:
[fzero(f, 1.8), fzero(f, 2.5), fzero(f, 3.8), fzero(f, 4.5), fzero(f, 6.1), fzero(f, 6.5)]
This will give the list f roots
ans =
1.7047 2.4723 3.8722 4.4720 6.1225 6.4119
So to find all positive roots we need the following unique command:
[fzero(f, 1.8), fzero(f, 2.5), fzero(f, 3.8), fzero(f, 4.5), fzero(f, 6.1), fzero(f, 6.5)]
or the following 6 commands:
fzero(f, 1.8)
fzero(f, 2.5)
fzero(f, 3.8)
fzero(f, 4.5)
fzero(f, 6.1)
fzero(f, 6.5)
Comments
Leave a comment