Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Matlab - polynom , uprava programu

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Matlab - polynom , uprava programu

Autor: Braňo

13:11:23 16.12.2010

Možno neskoro, ale vkladám moje funkčné riešenie Z Matlabu tejto metody Durand-Kerner alias Weierstrass, algoritmus je zo stranky http://en.wikipedia.org/wiki/Durand%E2%80%93Kerner_method

function roots = Weierstrass(pol) % http://en.wikipedia.org/wiki/Durand%E2%80%93Kerner_method
%pociatocna hodnota
sv = 0.4+0.9i;
x=30;
l = length(pol)-1;
% vektor korenu
s = ones(l,x);
pol = pol / pol(1); % normalizacia polynomu (celý polynom sa vydelí prvý koeficientom, aby koeficient bol rovný 1)

for i = 2:1:l;
s(i,1) = s(i - 1,1) * sv; % nastavenie pociatocneho korena pre aproximaciu
end
% iteracna premena
i = 1;
while ( ii = i + 1;
for n = 1:l %zmena premenej
d=1+0i;
for f = 1:l % vypocet delitela
if (n d=d*(s(n,i-1)-s(f,i-1)); %zmena delitela
end
if (n>f)
d=d*(s(n,i-1)-s(f,i));
end
end
s(n,i)=s(n,i-1)-polyval(pol,s(n,i-1))/d; % dosadenie do vzorca
end
end
roots = s(:,x);
return;
end

Citovat příspěvek

 

Matlab - polynom , uprava programu

Autor: Mo.ri

14:09:23 28.08.2009

Zdrawím,
chtěl bych poradit s následujícím příkladem:
[quote]
% aproximace korenu polynomu pomoci metody Durand-Kernerovou
% vstupní parametr je vektor polynomu (pol)
%výstupní parametr (roots) - koreny polynomu

function roots = dkm(pol)
%pocatecni hodnota
sv = 0.4+0.6i;

l = length(pol) - 1;
% vektor korenu
s = 1:1:l;
t = 0+0i; %promena slouzi k zasteveni iteraci, kdyz uz jsou hodnoty
pol = pol / pol(1); % normalizace polynomu (celý polynom se vydelí prvním koeficientem, aby koeficient byl roven 0)
% nastaveni pocatecnich korenu pro aproximaci
for i = 2:1:l;
s(i) = s(i - 1) * sv;
end
% iteranci promena
i = 0;

while not (t == s(l) && i < 100)% t==s(l) = zastaví cyklus, kdyz hodnata predchozi iterace se opakuji
t = s(l);
i = i + 1;
% algoritnusm výpočtu kořenů
for n = 1:1:l
d = 1+0i;
for m = 1:1:l
if not (m == n)
d = d * (s(n) - s(m));
end
end
r = 0+0i;
for h = 1:1:l
r = (r + pol(h)) * s(n);
end
s(n) = s(n) - (r + pol(l + 1)) / d;
end

end

roots = s;
[/quote]
musím to předělat pomocí funkcí varargin a varargout. A také jak přidělat vstup a výstup do souboru.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: