Die Gleichung wird in der Form func(x) =
0 geschrieben und die Funktion wie üblich mit @(x)
definiert:
func = @(x) tan(x) - x .* log(0.1*x);
Um Anfangswerte für fzero zu
finden, wird sie nun geplottet:
x = [0:0.1:10];
y = func(x);
plot(x, y, [0 10], [0 0]);
Dabei stellt man fest, dass an den Stellen π/2, 3 π/2
und 5 π/2 große Sprünge auftreten, die von den Polen des Tangens
an diesen Stellen herrühren:
Die nahezu senkrechten Linien gehören nicht zur Funktion,
sondern sie werden durch die Vorzeichenwechsel an den Polstellen verursacht:
Matlabs Plot-Funktion verbindet einfach die beiden an einen Pol angrenzenden
Werte. Insbesondere liegen hier keine Nullstellen!
Durch die ungünstige Skala sind die wahren Nullstellen
etwas schwierig zu erkennen, aber ggf. mit Hilfe der Lupe liest man folgende
Werte ab:
1.9, 5.0, 8.5
Mit fzero(func, 1.9) etc. bestimmt
man mit diesen Startwerten die genauen Nullstellen zu
1.8790, 4.9931, 8.4728
Der Plot legt nahe, dass bei 0 ebenfalls eine Nullstelle vorliegt.
Dort ist die Funktion zwar nicht definiert, lässt sich aber tatsächlich
stetig zu 0 fortsetzen, wie man z.B. über den Satz von l'Hospital beweisen
kann. Natürlich lässt sich hier mit fzero
nichts machen, weil die Funktion auf der linken Seite der Nullstelle gar nicht
definiert ist.
Übrigens lassen sich die hässlichen Sprünge
im Plot mit einem kleinen Trick vermeiden: Man ersetzt dazu in der Variablen
y die betragsmäßig sehr großen Werte
an den Polen durch den Wert NaN.
max = 40;
indizes = find(abs(y) > max);
y(indizes) = NaN;
plot(x, y, [0 10], [0 0]);
Die Plot-Funktion lässt diese Werte dann aus, insbesondere
verbindet sie sie nicht. Das Ergebnis ist deutlich hübscher: