matlab mesh plot



  • nun wo ich verstehe wie ich filterkoefizienten berechnen kann möchte ich ein
    filter 1.ordnung in matlab ploten. als 3d plot.
    die funktion wäre

    z=1./(x+y+1)
    nun möchte ich das ganze so darstellen das die x achse dem imaginären teil entspricht und die y achse dem reelen anteil die z achse wäre dann die amplitude.

    ich habe das folgendermassen probiert in matlab

    x= -1:0.01:1.5; %imaginärer teil
    y= 0:0.01:-2; %reeler teil
    [X,Y]=meshgrid(x,y);
    Z= 1./(X+Y+1);
    mesh(Z);
    axis([-1 1.5 0 -2 0 20]); %skalierung.

    aber irgendwie scheint das mit der skalierung nicht zu funktionieren, vieleicht kann mir ja jemand weiterhelfen.

    besten dank tobiashofer



  • Also ich habe schon Probleme, den Befehl y=0:0.01:-2 auszuführen. Matlab erstellt nämlich ein leeres Array, kann das wohl nicht rückwärts. Und hast du auch an die Stellen gedacht, wo der Nenner Null wird?



  • hallo bais

    das mit dem array habe ich nicht gewusst. du hast recht mit diesem kleinen
    beispiel habe ich überhaupt nicht daran gedacht wo der nenner null wird.

    nun möchte ich so ein 3d plot machen mit einer nullstelle bei -1,
    wie könnte ich das machen? hast du ne idee?



  • tobiashofer schrieb:

    mit einer nullstelle bei -1

    Eine Nullstelle sollte keine Problem sein, du meinst wohl eher eine Polstelle.. Matlab bringt aber nur eine Warnung und keinen Fehler, also würde ich das einfach mal ausprobieren. An der Stelle wird bestimmt ein Ausschlag ins "Unendliche" sein (so ca. 1e200 vielleicht ;-).
    Hast du schon mal unter der Hilfe nachgeschaut, da sind schöne Bespiele für einen 3D-Plot dabei.



  • ich habe das nochmal ausprobiert aber ich kriege das nicht richtig geplottet.
    vieleicht hat ja jemand ein bisschen mehr erfahrung mit dieser mesh funktion.

    das array habe nun vorwärtsdeklariert.

    gruss tobiashofer



  • Versuch einfach mal statt mesh(Z) den Befehl mesh(X,Y,Z).
    Dann kannst du auch mit axis den Bereich angegeben, den in X und Y angegeben hast. Wenn du den Befehl mesh(Z) benutzt, erstellt Matlab eine fortlaufende Nummer, somit ist deine x-Achse nicht von -1 bis 1.5 sondern von 0 bis 251. nämlich soviele Werte sind ja in dem Array gespeichert. Ich hoffe, das hilft dir weiter.



  • Auch wenn's vielleicht nicht hilft, mit Mathematica siehts so aus...

    Mma Code:
    f[x_,y_]=1/(x+y+1); // Funktions Deklaration
    g=Table[f[x,y],{x,-2,+2,0.01},{y,0,+2,0.01}]; // Generieren von Funktionswerten
    ListPlot3D[g]; // Grafischer Output

    Schon beim Generieren von Funktionswerten meckert er das die dort Funktionswerte ComplexInfinity sind, außerdem plottet auch Mma an den Kanten der Polstelle die Grafik nicht richtig aus...

    Winn



  • habe das nochmal ausprobiert aber funktioniert nicht richtig.
    oder ich überlege mir da etwas falsch.
    das ergebniss sollte eigentlich so aussehen:

    seite 3 simple rc low-pass filter:

    http://www.maxim-ic.com/appnotes.cfm/appnote_number/733/ln/en

    gruss
    tobiashofer



  • Hab noch mal nachgedacht 😉
    Da du ja mit komplexen Zahlen arbeitest und dein Z ja der Betrag sein soll, muß du deine Funktion etwas umändern.
    Z=1X2+Y2Z = \frac{1}{\sqrt{X^2 + Y^2}}
    Dann mit mesh(X,Y,Z) plotten und Axeneinstellung vornehmen. Ich hoffe es klappt so.



  • nun hat es funktioniert!

    danke


Anmelden zum Antworten