Gå til innhold
Trenger du skole- eller leksehjelp? Still spørsmål her ×

Anbefalte innlegg

 

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 = 3x

med en feil på mindre enn 105

 

 

vha Newton(-Raphson)s metode

 

Noen her inne som kan hjelpe meg å forstå hvordan eg skal gå fram her?

Lenke til kommentar
Videoannonse
Annonse

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 av Selvin
Lenke til kommentar

 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.

  • Liker 2
Lenke til kommentar

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 av Nebuchadnezzar
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...