krikol Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 Hei, skulle hatt litt hjelp med en oppgave i Matlab. Oppgaven er som følger: Lag en programkode som finner løsningen av ligningen e2x2 = 3√x med en feil på mindre enn 10−5 vha Newton(-Raphson)s metode Noen her inne som kan hjelpe meg å forstå hvordan eg skal gå fram her? Lenke til kommentar
Selvin Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 (endret) Du skal altså løse likn. vha. Newtons Metode? http://en.wikipedia.org/wiki/Newton's_method Pseudokode blir ca. x0 = .. # Initial guess eps = 10E-5 while f(x0) > eps: x_new = x0 - f(x0)/f'(x0) x0 = x_new Endret 16. oktober 2013 av Selvin Lenke til kommentar
Selvin Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 (endret) Med initial guess x0 = 1. fikk jeg nullpunkt til å være ca. x = 0.67. Med x0 = 0.01 får jeg nullpunkt i x = 0.11741 Så har du resultatene. Stemmer også med Wolfram: http://www.wolframalpha.com/input/?i=e%5E%282*x**2%29+-+3*sqrt%28x%29+%3D+0 EDIT: Sorry, editoren her tuller seg helt, ødela hele forrige innlegget der. Endret 16. oktober 2013 av Selvin Lenke til kommentar
krikol Skrevet 16. oktober 2013 Forfatter Del Skrevet 16. oktober 2013 x_new = x0 - f(x0)/f'(x0) Denne linjen får eg feil på Error: Unbalanced or unexpected parenthesis or bracket. Eg er virkelig grønn på Matlab. Lenke til kommentar
Selvin Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 (endret) Den koden jeg har skrevet er ikke Matlab-kode, mer Python-kode egentlig. I Matlab er det bedre å skrive inn funksjonene direkte tror jeg, slik at du får x_new = x0 - (exp(2*x0**2) - 3*sqrt(x0))/(4*x0*exp(2*x0**2) - 3./(2*sqrt(x0)) x0 = x_new Det kan være en idè å få en grei forståelse matlab-syntax før man implementerer Newtons metode. Endret 16. oktober 2013 av Selvin Lenke til kommentar
Han Far Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 x_new = x0 - f(x0)/f'(x0) Denne linjen får eg feil på Error: Unbalanced or unexpected parenthesis or bracket. Eg er virkelig grønn på Matlab. Det går ikke an å bruke ' for å få den deriverte av en funksjon i matlab. Du må skrive inn både funksjonen din og den deriverte. Hvis du vil gjøre dette litt mer avansert kan du lage to matlabfunksjoner for dette, men hvis du er helt grønn anbefaler jeg at du bare skriver uttrykkene rett inn i koden. 2 Lenke til kommentar
Nebuchadnezzar Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 (endret) Helt enig, bare skriv rett inn om ikke du er så dreven. For fun er det fullt mulig å få til om en tillater symboler. Da må en først skrive syms x for å vise at x skal nå bli behandlet som et symbol.Deretter så kan begynnelsen av koden din eksempelvis se slik ut function x1 = Newton(f,x0,Max,err) format long G = inline(char(f)); Gx = inline(char(diff(f))); for i = 1:Max x1 = x0 - G(x0)/Gx(x0); . . . Med input Newton(x^3-3,-1,100,10^(-5)) Endret 16. oktober 2013 av Nebuchadnezzar Lenke til kommentar
krikol Skrevet 16. oktober 2013 Forfatter Del Skrevet 16. oktober 2013 Har kommet fram til denne koden: syms x; e = 10e-5; dx = e + 1; f = (exp(2*x^2)-3*sqrt(x)); x = 0.5; count = 0; p = zeros(1,1); while (abs(dx) > e) dx = eval(f/(diff(f))); x = x - dx count = count + 1; p(count) = x; end % plot(abs(p)); if (count < 300) fprintf('Løsningen er = '); %printing the result x fprintf('\nAntall initieringer = %d\n',count); end Ligningen har jo to løsninger, korleis kan eg få skriptet til å finne den andre løsningen? Eller må ein prøve seg fram? Lenke til kommentar
Selvin Skrevet 16. oktober 2013 Del Skrevet 16. oktober 2013 Prøve seg frem ja, sett opp flere initial guesses. Lenke til kommentar
krikol Skrevet 16. oktober 2013 Forfatter Del Skrevet 16. oktober 2013 Tusen takk for all hjelp:) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå