5 svar
235 visningar
tech.60 behöver inte mer hjälp
tech.60 5 – Fd. Medlem
Postad: 18 nov 2020 18:47

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

Dr. G 9483
Postad: 18 nov 2020 20:09

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. 

tech.60 5 – Fd. Medlem
Postad: 18 nov 2020 20:29

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.

Dr. G 9483
Postad: 18 nov 2020 23:24

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. 

tech.60 5 – Fd. Medlem
Postad: 18 nov 2020 23:38

Tack så jättemycket för hjälpen.

Dr. G 9483
Postad: 18 nov 2020 23:49

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

Svara
Close