» »

[Java]Ničle polinoma po Newtonovi metodi

[Java]Ničle polinoma po Newtonovi metodi

Steinkauz ::

Navodilo naloge:

Newtonova metoda (Java)

Napiši program za izračun ničle polinoma

p(x) = a0xn + a1xn-1 + ... + an-1x + an

po tangentni (Newtonovi) metodi. Delovanje programa naj temelji na razredu Polinom, ki predstavlja polinom in vključuje metode za potrebne matematične operacije nad polinomom ter njegovo uporabo v programu. Program naj omogoča grafični izris polinoma ter koračno izvajanje in izris približkov in tangent. Stopnjo polinoma, koeficiente polinoma, začetni približek in natančnost iskanja poda pred vsakim izračunom uporabnik. Pri implementaciji programa definiraj ustrezne izjeme in jih uporabi v programu.


Prvo bi rabu razlago, kakšna je tangentna (Newtonova) metoda za računat ničle, oziroma razlago cele naloge

Senitel ::

Tangentna metoda za iskanje ničel gre tako, da najprej vzameš nek začetni približek in v tisti točki polinoma izračunaš tangento na tisto točko (premica). Potem vzameš za nov približek točko kjer ima tangenta (premica) ničlo in postopek ponavljaš dokler nisi zadovoljen z natančnostjo. Moraš pa še obdelat kar nekaj izjem: kaj če ne moreš izračunat odvoda, oziroma je odvod = 0; kaj če je začetni približek predaleč stran,...

Steinkauz ::

Kako pa veš če je začetni približek predaleč stran ? Verjetno ima vsak polinom to drugač. A je kaka formula za izračunat največji še dovoljen približek?

Bojevnik ::

Ne.
Najbolje je omejiti število iteracij metode(okoli 500 bi boglo bit dovlj).

Backup22 ::

Tudi, če je začetni približek "daleč" stran, ni neke panike, če funkicja ni "zelo neugodna". Konvergenca je hitra. Problemi lahko nastopijo okoli extremov, kjer tangente začnejo preskakovati ali pri prevoju, kjer se pojavi osciliranje.

Pred nekaj časa sem sam to delal v Matlabu:
% NEWTON: p[k] = p[k-1] - f(p[k-1])/f'(p[k-1])

function [p0,err,k,y] = newton(f,df,p0,delta,epsilon,max1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% VHODI:                                         %
%   f je vhodna funckija                         %   
%   df je odvod                                  %
%   p0 zacetna aproksimacija nicle funckije f    %
%   delta je toleranca za p0                     %
%   epsilon je toleranca za funkcijsko vrednost  %
%   max je maksimalno stevilo iteracij           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% IZHODI:                                        %
%   p0 je Newtonova aproksimacija nicle          %
%   err je pricakovana napaka za p0              %
%   k je stevilo iteracij                        %
%   y je funckijska vrednost f(p0)               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for k=1:max1
    p1=p0-(feval(f,p0)/feval(df,p0));
    err=abs(p1-p0);
    relerr=2*err/(abs(p1)+delta);
    p0=p1;
    y=feval(f,p0)
    if(err<delta)|(relerr<delta)|(abs(y)<epsilon), break, end
end


Newton-Raphsonova metoda je zelo učinkovita, znana in tega najdeš ogromno na internetu (aplete itn.)...
//

Steinkauz ::

Sej sm neki že najdu ja, sam neo znanje more bit zadi, da bom zastopu kodo :)
Hvala za odgovore

Steinkauz ::

Torej neki sm se lotu pa me zanima če sm kul zbral. Torej uporabnik poda polinom(lahko razmetan v stilu 3*x^5+ 150 - 2*x^18). Mislu sm nardit, da ti pogleda največjo potenco, nardi tabelo(v tem primeru velikosti 18) Potem pa ti koeficiente pomeče v tabelo. Torej bi mi na tabela[0] vrgu vrednost pri x^18, pri tabela[13] x^5 in tko naprej. Ker se mi zdi da bi tkole še najlažje naredu odvod. Al ma kdo bolš idejo?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

polinomi

Oddelek: Šola
5664 (589) St753
»

Polinomi

Oddelek: Šola
91164 (857) marko181914
»

Matematika - pomoč (strani: 1 2 3 )

Oddelek: Šola
10426827 (23402) daisy22
»

Površina kroga brez pi (strani: 1 2 )

Oddelek: Znanost in tehnologija
7710973 (9062) CHAOS
»

E (matematična konstanta) (strani: 1 2 3 4 )

Oddelek: Šola
15315795 (10259) Jst

Več podobnih tem