Kirjautuminen

Haku

Tehtävät

Kilpailu

Murra koodi!
Lue ja osallistu!
Voittajia 1 + yrittäjiä 1

Keskustelu: Koodit: Pascal: Newtonin menetelmä

koodaaja [19.02.2022 23:40:01]

#

Tämä esittelee Newtonin menetelmää Pascalilla. Newtonin menetelmässä etsitään likiarvo funktion nollakohdalle. Tämä lasketaan x-f(x)/f'(x), kunnes ollaan tarpeeksi lähellä nollakohtaa. Ohjelmassa voidaan käyttää enintään kolmannen asteen funktiota ja se derivoidaan.

program NewtoninMenetelma;

uses Math;

var
 kerroin_a: Single;
 kerroin_b: Single;
 kerroin_c: Single;
 kerroin_d: Single;
 eksponentti_a: Single;
 eksponentti_b: Single;
 eksponentti_c: Single;
 x: Single;
 x2: Single;
 d: Single;
 y: Single;

begin
 kerroin_a := 0.0;
 kerroin_b := 0.0;
 kerroin_c := 0.0;
 kerroin_d := 0.0;
 eksponentti_a := 3.0;
 eksponentti_b := 2.0;
 eksponentti_c := 1.0;
 x := 1.0;
 x2 := 0.0;
 y := 0.0;
 d := 0.0;
 {Annetaan lähtötiedot}
 WriteLn('Anna kerroin a');
 readln(kerroin_a);

 WriteLn('Anna kerroin b');
 readln(kerroin_b);

 WriteLn('Anna kerroin c');
 readln(kerroin_c);

 WriteLn('Anna kerroin d');
 readln(kerroin_d);

 {Lasketaan funktion nollakohdan likiarvo annettujen tietojen mukaan}
y := kerroin_a*power(x,eksponentti_a)+kerroin_b*power(x,eksponentti_b)+kerroin_c*power(x,eksponentti_c)+kerroin_d;
d := kerroin_a*eksponentti_a*power(x,eksponentti_a-1)+kerroin_b*eksponentti_b*power(x,eksponentti_b-1)+kerroin_c;
x2 := x-y/d;
x := x2;

repeat
{Jatketaan nollakohdan etsimistä}
y := kerroin_a*power(x,eksponentti_a)+kerroin_b*power(x,eksponentti_b)+kerroin_c*power(x,eksponentti_c)+kerroin_d;
d := kerroin_a*eksponentti_a*power(x,eksponentti_a-1)+kerroin_b*eksponentti_b*power(x,eksponentti_b-1)+kerroin_c;
x2 := x-y/d;

x := x2;

until ((y < 0.001) and (y > -0.001));

{Näytetään lopullinen tulos}
WriteLn('Tulos:');
WriteLn((x2):2:6);


end.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta