numerical derivative
Låt f(x) = cos(2x). Skriv en m-fil numerical_derivative.m som utför numerisk derivering. Använd den för att plotta en approximation till f
0
(x) på
intervallet [−π, π]. I samma graf skall ni plotta den exakta derivatan. De olika
graferna ska ha olika färger och det ska tydligt framgå vilken kurva som är
vilken (tips: använd kommandot legend). Undersök även felet genom att plotta skillnaden mellan approximationen och den exakta derivatan på intervallet
[−π, π] i en ny graf. Gör detta för fallen h = 0.1 och h = 0.01.
I din m-fil ska du ha följande funktionshuvud:
✞
function y = n um e ri c al _ d e ri v a ti v e ( f , x )
% Beräknar den numer iska d e r i v a t a n av f i punk ten x .
% −−− In p u t −−−
% f : f u n k t i o n s h a n d t a g f ö r f u n k t i o n e n f ( x )
% x : punk ten där d e r i v a t a n sk a be r äkn a s
% −−− Ou tpu t −−−
% y : den numer iska d e r i v a t a n av f i punk ten x .
jag bifogade uppgiften ovan. jag vet inte riktigt vad jag ska ha för input och output, eller hur jag ska tänka för att skriva dem
Input är din funktion f och ett x-värde. Jag skulle väl säga att även h bör vara input.
Prova att approximera derivatan med centraldifferenskvot.
function y = numerical_derivative( f , x, h)
dfdx = (f(x+h)-f(x-h))/(2*h);
diff(f)/diff(x);
f = ('cos(2x)');
x=[-pi:pi];
dfdx= diff(f,x;0.01);
y = dfdx;
end
Tack för svaret, så där försökte jag att skriva, vet inte riktigt hur jag ska vidare, eller om jag har gjort rätt.
Det finns en smidig funktion som heter
feval(f,x)
som räknar ut funktionsvärdet f(x). Till den funktionen ska du alltså skicka en funktion och ett x-värde som input. För att beräkna cos(x + h) så kan du skriva
feval(@cos,x + h)
där x är något värde och h ditt steg.
Ser nu att det skulle vara cos(2x) som skulle deriveras. Här finns kod som deriverar cos(x). Koden kan egentligen derivera valfri funktion numeriskt.
Tack så jättemycket för hjälpen.
För en sammansatt funktion som cos(2x) så kan du skriva
@(x) cos(2*x)
och sedan göra på samma sätt, t.ex så här.