# Rooting Around in MATLAB – Part 2

In a recent post, I started a series of posts about finding roots of equations, and how you might use MATLAB to teach some of this topic. In particular, I will introduce the idea of fixed point iteration.

### Contents

### Set Up

clear all close all

### Example

Let me restate the example function. We'll start with a simple cubic polynomial `f`

which I define as an anonymous function.

f = @(x) x.^3 + x - 1; fplot(f,[-2 2]) title f grid on

### Fixed Point Algorithm

One way to find a solution to `f(x)` = 0 is to define another function, `g` such that `g(x) = x` where the function `g` is related to `f`. If we can find a value `x` that solves the equation with `g`, this **fixed point** is also the zero of the function `f`. How do we define such a suitable `g`? Looking at the equation for `f` and setting its value to zero, we can derive an equation for `x`.

Here's one way we can rewrite `f(x) = 0` so that `x` is alone on one side of the equation.

Let's call this function `g1`.

g1 = @(x) 1 - x.^3; fplot(g1,[-2 2]); g1str = '1-x^3'; title g1 grid on

Now let's add a straight line to represent

straightLine = @(x) x; title '' hold on fplot(straightLine, [-2 2], 'g') legend(g1str,'x','Location','SouthEast') axis([-2 2 -2 2]), axis equal

The intersection of these 2 curves is a fixed point of `g1(x)`, and therefore a zero of `f(x)`. Let's zoom in a bit.

axis([0 1 0 1])

That intersection looks like it happens around the same location as the answers we got from using `roots` and `fzero` in the previous post.

fzsolution = fzero(f,0.5)

fzsolution = 0.68233

`plot(fzsolution, g1(fzsolution),'b*')`

### Let's Try to "Zero" in on the Solution

First, we'll select the same starting value that we used when we called `fzero`. The starting point is then (0.5,0.5). And then we can easily calculate the next value of `g1`.

x(1) = 0.5; y(1) = x(1); x(2) = x(1); y(2) = g1(x(2));

Let's plot the trajectory of the solutions, noting the first point with a red star.

plot(x,y,'r',x(1),y(1),'r*')

### First Iteration

Now let's get the next estimate. We'll set the current value of `g1` to the new `x` value, sliding onto the straight line, and then calculate the next value of `g1` from this new value for `x`. And plot it.

```
x(3) = y(2);
y(3) = y(2);
x(4) = x(3);
y(4) = g1(x(4));
plot(x,y,'r')
```

### Second Iteration

Let's do the same set of steps again.

```
n = 5;
x(n) = y(n-1);
y(n) = y(n-1);
x(n+1) = x(n);
y(n+1) = g1(x(n+1));
plot(x,y,'r')
```

### Third Iteration

And again.

n = 7; x(n) = y(n-1); y(n) = y(n-1); x(n+1) = x(n); y(n+1) = g1(x(n+1)); plot(x,y,'r') hold off

### The Conundrum

By now, you have surely noticed that instead of spiraling into the solution we found with `fzero`, our estimates are spiraling out! In the next post, we'll explore another definition for `g(x) = x` and see what happens from there.

### Confession

Yes, I know in this post I kept overplotting lines successively. But I didn't want us to get distracted by managing the plots.

### The Series of Posts

In addition to this post and the previous one, there will be one more. Until it is published, the 3rd link will not be useful.

## 댓글

댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.