%% MattieT/mlteht/mlNonlinEqu
% 
% 
%% mlNl005R
%
% Tarkastellaan yhtälöä
%
% $$\tan(0.1 x)= 9.2 e^{-x}.$$
% 
% # Osoita, että yhtälöllä on yksikäsitteinen ratkaisu avoimella välillä
%  $(0,2 \pi)$.
% # Piirrä kummankin puolen kuvaaja samaan kuvaan etsiäksesi sopivan
%   alkuarvon x0.
% # Ratkaise yhtälö numeerisesti Matlab-funktiolla |fzero| 
% # Myos Newtonin menetelmalla funktiolla myNewton tms., jos on annettu
%   aiemmin ohjelmoitavaksi (tai annetaan valmiina)
%%
 

%% 
% Ratkaisu
%% (a)
%  Erotuksella eri merkit lähellä päätepisteitä ==> Erotuksella nollakohta.
%  Toinen on kasvava, toinen pienenevä, joten erotus monotoninen ==>
%  ratkaisu yksikäsitteinen.
%  

%% (b)
% 
clear
close all
%%
x=linspace(3,4);
plot(x,tan(0.1*x),x,9.2*exp(-x));grid on;shg
%%
% Haetaan funktion f nollakohtaa, missä:
f=@(x) tan(0.1*x)-9.2*exp(-x)
% Alkuarvaus näkyy kuvasta:
%%
x0=3.3;
x1=fzero(f,x0)
figure
ezplot(f,[3,4])
%%
hold on
plot(x1,f(x1),'ro');grid on;
title(['Ratkaisu = ',num2str(x1)])
shg
%%
format long
x1
%% (d)
help myNewton
%%
syms x
diff(f(x),x)
% ans = 
% (46*exp(-x))/5 + tan(x/10)^2/10 + 1/10
%%
% Maaritellaan funktioksi:
df=@(x)(46*exp(-x))/5 + tan(x/10)^2/10 + 1/10
%%
% Nyt voidaan soveltaa "myNewtonia":
myNewton(f,df,pi)
%% Ihmettely: Miksi funktiomäärittelyissä ei tarvita pisteitä?
% Vastaus: Koska fzero ja myNewton ovat puhdasta skalaarikoodia.
% Entä tilanteessa, jossa tarvitaan?
% Derivaatan lauseke voidaan "pisteyttää" komennolla vectorize.
%% vectorize-esimerkki:
vectorize(df(x))
% Pisteistä ei koskaan ole haittaa (ellei olla suorittamassa 
% matriisialgebraa), joten aina voidaan varmistella.
