Test auf Hurwitz-Polynom < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 12:59 Do 04.09.2008 | Autor: | grenife |
Aufgabe | Programmieren Sie den folgende Test auf das Vorliegen eines Hurwitz-Polynoms:
Sei [mm] $f(z)=a_nz^n+a_{n-1}z^{n-1}+\ldots +a_0$, [/mm] $a>0$ ein Polynom mit reellen Koeffizienten. $f$ ist genau dann ein Hurwitz-Polynom (d.h. $f$ besitzt nur Nullstellen mit negativem Realteil), wenn sämtliche Hurwitz-Determinanten positiv sind (Beschreibung findet sich unter http://de.wikipedia.org/wiki/Hurwitzpolynom). |
Hallo zusammen,
habe den Test in Matlab programmiert und würde mich freuen, wenn jemand Verbesserungs- bzw. Korrekturvorschläge hätte.
Vielen Dank und viele Grüße
Gregor
function f(x,y)
%Koeffizienten müssen alle größer 0 sein.
if (sum(x>0)~=length(x))
fprintf('Mindestens ein Koeffizient des Polynoms ist <=0. Somit kann dieses kein Hurwitz-Polynom sein.');return
end
%zweiter Eingabeparameter bestimmt, ob die Matrizen und Determinanten
%mit ausgegeben werden sollen. Erlaubte Werte für y sind 1 und 0.
if (y~=1 & y~=0)
fprintf('Ausgabe der Matrizen und Determinanten mit y=1, ansonsten bitte y=0 setzen');return
end
n=length(x)-1;
j=1;
flag=1;
%Erzeugung der Hurwitz-Matrizen. Flag ist gleich 1, also true. Die Matrizen
%werden mit aufsteigendem Index generiert, erfüllt eine Matrix nicht die
%Bedingung det(D)>0, wird Flag=0 gesetzt und die übrigen Matrizen müssen
%nicht mehr generiert werden.
while j<=n & flag
%erzuege die Matrix mit Nullen als Einträgen
DJ = zeros(j,j);
%Auffüllen der Matrix mit den Koeffizienten
for k=1:j
for l=1:j
if ((n+1-2*k+l)>=1) & ((n+1-2*k+l)<=length(x))
DJ(k,l)=x(n+1-2*k+l);
end
end
end
%Falls Option y=1 gesetzt wurde, werden die Matrix und ihre
%Determinante ausgegeben.
if (y==1)
DJ
det(DJ)
end
%Ist det(D)<0 wird Flag auf FALSE gesetzt und die While-Schleife wird
%beendet.
if det(DJ)<=0
flag=0;
end
%Hochzählen von j
j=j+1;
end
%ist die Schleife durchgelaufen, ohne dass Flag auf FALSE gesetzt wurden,
%sind sämtliche Determinanten positiv, p also ein Hurwitz-Polynom.
if flag==1
fprintf('p ist ein Hurwitz-Polynom.')
else
fprintf('p ist kein Hurwitz-Polynom.')
end
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:42 So 05.10.2008 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|