/* Eksempel p? bruk av halveringsmetoden p? f(x)=x*x-2=0. Eksemplet er programmert "halvgenerelt" ved at f gis som en metode av typen double, mens iterasjonen gj?res i main metoden. Helst burde ogs? bruke av halveringsmetoden v?rt kodet som en generell metode som kalles for ulike valg av likninger */ import easyIO.*; class halv{ /* deklarer f i f(x)= 0 vha. metode */ static double f(double x){ return x*x-2.0; }; public static void main(String[] args){ int i, nmax; double a0,b0,a,b,m,fm,fa,fb,xfasit; In les=new In(); Out skjerm=new Out(); /* for losning av annet problem maa f byttes og xfasit endres eller fjernes */ xfasit=Math.sqrt(2.0); skjerm.outln("gi a og b"); a0=les.inDouble();b0=les.inDouble();les.inLine(); skjerm.outln("gi antall iterasjoner"); nmax=les.inInt();les.inLine(); a=a0; b=b0; fa=f(a); fb=f(b); if(fa*fb > 0.0){ skjerm.outln("f(a) og f(b) har samme fortegn");} else {if(fa == 0.0 || fb == 0.0) {skjerm.outln("nullpunkt i ende");} else {skjerm.out(" i",8); skjerm.out("fasit",11); skjerm.out("a",11); skjerm.out("b",11); skjerm.out("fa",11); skjerm.outln("fb",11); fm=fa;i=1; /* l?kke med testing og redefinering av intervaller */ while (i<=nmax && fm != 0.0){ m=0.5*(a+b);fm=f(m); if(fm*fa<0.0) {b=m;fb=fm;} else {a=m;fa=fm;}; skjerm.out(i,3); skjerm.out(xfasit,6,11); skjerm.out(a,6,11); skjerm.out(b,6,11); skjerm.out(fa,6,11); skjerm.outln(fb,6,11); i++; }; }; } } }