WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

erweiterter euklidischer Algorithmus in Z/pZ[x]

 

budspencer
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 14.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2015, 21:50     Titel: erweiterter euklidischer Algorithmus in Z/pZ[x]
  Antworten mit Zitat      
Hallo alle zusammen,
ich stelle hier zum ersten Mal eine Frage und hoffe sehr Hilfe zu finden. Ich bin noch ein Einsteiger und habe versucht mit Hilfe von Matlab den erweiterten euklidischen Algorithmus in Z/pZ[x] (p=Primzahl)zu schreiben. Aber es klappt nicht. Ich glaube es liegt an der zweiten while-Schleife, die nicht aufhört. Kann mir jemand helfen, wo der Fehler liegen könnte? Ich hoffe nicht, dass das alles kompleter Blödsinn ist, was ich geschrieben habe. Ich bin wie gesagt Anfänger.
Oder gibt es in Matlab eigentlich irgendeinen Befehl mit dem ich den beschriebenen erweiterten euklidischen Algorithmus in Z/pZ[x] durchführen kann?

P.S.: grad() und Leitkoeffizient() die in meinem Code vorkommen sind übrigens Funktionen, die ich selber geschrieben habe und die wohl auch funktionieren.

Danke schon mal ,
Gruß Bud Spencer

Code:
%%%ereiterter euklidischer Algorithmus in Z/pZ[X] für eine Primzahl p.
%%%EINGABE: Primzahl p und zwei Polynome aus Z/pZ[X](Die eingegebenen Vektoren müssen
%%%beide gleich lang sein: eventuell links mit Nullen auffüllen.)
%%%Ausgabe:Polynome s,t,ggt aus Z/pZ[X] mit ggt(a,b)=(X^N-1)*s+f*t


p=input('Primzahl: ');
a=input('zu teilendes Polynom: ');
b=input('Teilerpolynom: ');

%%%Variablen
Laenge=length(a);

GradB=grad(b);
LK=Leitkoeffizient(b);

TPversch=zeros(1,Laenge);
QUOfalsch=zeros(1,Laenge); %%%ergibt nachher den Quotienten in umgekehrter Reihenfolge

DIVI=a
REST=a  
TEIL=b
j=1;
A=cell(1,grad(a))  %%%hier sollen für jede Polynomdivision alle vier Polynome
                   %%%in jeweils einer Zelle abgespeichert werden.
r=a
while (isequal(mod(r,p), zeros(1,Laenge))==0)
    %%% POLYNOMDIVISION ANFANG
    %%%while Schleife läuft solange grad(r)>=GradB
    r=a
    while grad(r)>=grad(TEIL)
           [ggt,s,t]=eEuklid(p,Leitkoeffizient(REST))
           Inverse=mod(t,p)
      QZahl=mod(Leitkoeffizient(r)*Inverse,p)
      QUOfalsch((grad(r)-grad(TEIL))+1)=QZahl %%%QZahl wird an die richtige Position gesetzt; QUOfalsch ergibt nachher umgedreht den richtigen Quotienten
      %%%Teilerpolynom verschoben wir jetzt mit for Schleife gebildet
        for i= 1:1:(Laenge-(grad(r)-grad(TEIL)))
        TPversch(i)=b(i+(grad(r)-grad(TEIL)));
        end %%%for
      r=mod((r- QZahl*TPversch),p);
      TPversch=zeros(1,Laenge);
     REST=r
    QUOTIENT=mod(fliplr(QUOfalsch),p)
     A{1,j}=[DIVI;TEIL;QUOTIENT;REST];  %%%für jede Polynomdivision werden die vier Polynome der daraus resultierenden Gleichung dem j-ten Cell-Array abgelegt
    j=j+1 %%%Danach wird j um Eins erhöht, so dass das nächste Cell-Array belegt werden kann
    DIVI=TEIL
    TEIL=REST
    end %%%while
    %%%ENDE POLYNOMDIVISION
end

ggt=A{1,i-2}(4,:)
t=zeros(1,Laenge);
t(Laenge)=1;         %%%Startwert für t aus ggt=as*bt ist :[0 ... 0 1]
s=zeros(1,Laenge);%%%Startwert für s aus ggt=as*bt ist ein Vektor nur aus Nullen
 
 
for j=(i-2):-1:1
    platz=t;
    AL=conv(A{1,j}(3,:),t) %%%Abzug Lang, das ist schon das Produkt aus qt
    AK=zeros(1,Laenge);    %%%Abzug Kurz
   
    for k=0:1:(Laenge-1)
    AK(Laenge-k)=AL(2*Laenge-(k+1))
    end;
end
 t=mod(s-AK,p)
 s=mod(platz,p)
Private Nachricht senden Benutzer-Profile anzeigen


Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 24.07.2015, 10:32     Titel:
  Antworten mit Zitat      
Diese isequal()==0-Abfrage finde ich eigenartig.
Soll der solange laufen, wie mod(r,p) überall Null ist, oder nicht?

Sonst Breakpoints setzten und Variablen nachverfolgen.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.