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

Matrix

 

bono

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 12:26     Titel: Matrix
  Antworten mit Zitat      
kann mir jemand bei dem befehl "circshift" helfen???

ich will die zeilen meiner matrix jeweils um 0.05 schritten verschieben, das funktioniert auch aber nicht mit jeder zahl, z.b. diese gehen nicht
0.15; 0.3; 0.35; 0.6; 0.7; 0.95; ...
bekomme immer eine fehlermeldung

??? Error using ==> circshift at 38
Invalid shift type: must be a finite, nonsparse, real integer vector.
bla bla

verstehe nicht warum das manchmal geht und machmal nicht???

Code:

for i=1:2:length(yi)
    if zahl < 0
        A(i,:) = circshift(I_Interp1(i,:),[0, zahl/0.05]); % (-)verschiebt die Zeilen nach links
    else
        A(i,:) = circshift(I_Interp1(i,:),[0,zahl/0.05]); % 0.05 Gradschritte
    end  
end
 


hat jemand eine idee?
vielen dank


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 18.11.2009, 12:49     Titel:
  Antworten mit Zitat      
Ich glaube, dass ein Missverständnis zur Funktion vorliegt. Die Funktion kann keine Bilder in kleinen Winkelinkrementen drehen:

Code:

help circshift
...circularly shifts the values in the array A by SHIFTSIZE elements. SHIFTSIZE is a vector of integer scalars where...
 


Wenn SHIFTSIZE kein Integer ist kommt die Fehlermeldung.

Sollte es darum gehen ein Bild zu rotieren:

http://www.mathworks.com/access/hel.....box/images/f12-15785.html

Andreas

Zuletzt bearbeitet von Andreas Goser am 18.11.2009, 13:27, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
bono

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 12:59     Titel:
  Antworten mit Zitat      
hey

danke für die schnelle antwort

leider bring mich das nicht weiter. ich will das bild nicht drehen sondern nur die zeilen verschieben. was die fehlermeldung angeht, so ist das auch ein integer, da ich meine eigabe durch 0.05 teile.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 18.11.2009, 15:15     Titel:
  Antworten mit Zitat      
Durch verschiedene numerische Effekte kann nicht gewährleistet werden, dass Werte die sehr nah an einem ganzzahligen Wert liegen als ganzzahlig interpretiert werden. Es sollte dort eine klare Rundung oder Datentypkonvertierung durchgeführt werden.

Um Zeilen zu verschieben braucht man aber nur Matrix-Standardoperationen. CIRCSHIFT ist entweder nicht geeignet oder ein Overkill.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
bono

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 15:58     Titel:
  Antworten mit Zitat      
aber wenn ich 0.3 / 0.05 = 6 dann kommt eine gerade ganze zahl raus, man muss nicht runden. warum klappt das den, wenn ich z.b. 0.25 / 0.05 = 5 eingebe?

wenn CIRCSHIFT nicht geeignet ist, was kann ich stattdessen nehmen?
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 19.11.2009, 11:03     Titel:
  Antworten mit Zitat      
Ein wenig Theorie zu den numerischen Effekten gibt es hier:

http://www.mathworks.com/support/so.....1-16FOQ/?solution=1-16FOQ

Was anstelle nehmen? Es kommt auf die Aufgabe an. Beispiel: Erste Zeile auf die vierte Zeile verschieben (einfügen):

Code:

a=peaks(7) % Beispieldaten 7x7
a(1,:) % Erste Zeile
a=[a(2:3,:); a(1,:); a(4:end,:)]
 


Andreas[/code]
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
bono

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2009, 11:17     Titel:
  Antworten mit Zitat      
hallo andreas, danke noch mal.

die hilfe hilft mir nicht weil auf englisch Embarassed

na ja, und mit meinem problem bin ich auch nicht weiter, weil ich immer noch nicht verstehe wo eigentlich das problem liegt Crying or Very sad
 
bono

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2009, 12:25     Titel:
  Antworten mit Zitat      
ich habe das jetzt mal vereinfacht ausprobiert
Code:

A = LSVRead; % lese die matirx A ein
zahl = 0.3;
for i=1:151
    B(i,:) = circshift(A(i,:),[0,zahl/0.05]);
end
 

es kommt immer die gleiche fehlermeldung:

??? Error using ==> circshift at 38
Invalid shift type: must be a finite, nonsparse, real integer vector.

Error in ==> TEST at 4
B(i,: ) = circshift(A(i,: ),[0,zahl/0.05]);

wenn ich z.b. zahl = 0.2 eingebe, dann funktionierts. warum??? Rolling Eyes
ich komme überhaupt nicht weiter Crying or Very sad
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 19.11.2009, 13:02     Titel:
  Antworten mit Zitat      
Folgender Code wir den Effekt erklären:

Code:

format long
for k=0.1:0.1:1
   a=k/0.05
   abs(a-round(a))-eps
end
 


a sollte nach normalem Verständnis 2,4,6 usw. ergeben. Tut es auch, aber eben nicht immer 100%ig exakt. Auf meinem Rechner sind z.B.

a =
6.000000000000001
und
a =
11.999999999999998

Wenn immer die Abweichung von der ganzen Zahl zu gross ist, ist es CIRCSHIFT unmöglich die Zahl als Ganzzahl zu interpretieren. Der Code könnte dann mit ROUND funktionieren:

Code:

B(i,:) = circshift(A(i,:),[0,round(zahl/0.05)]);
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
bono

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2009, 14:24     Titel: berlin
  Antworten mit Zitat      
vielen dank Andreas, das hat jetzt funktioniert.

aber ich verstehe immer noch nicht, warum der computer die zahl nicht als ganzes sieht, sondern irgendwas rundet und das dann auch nicht mit jeder zahl? aber dafür weis ich viel zu wenig vom computer.

noch mal danke Very Happy
 
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.