www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - MATLAB
MATLAB < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

MATLAB: wie kann man 2. index machen?
Status: (Frage) beantwortet Status 
Datum: 21:16 Mi 27.04.2005
Autor: kaoote

jo... also.. wie fange ich am besten an?
ju.. also, ich denke es können mir eh nur diejenigen helfen die matlab haben, und deshalb hier zwei M-Files.

das erste M-File:

%M-File von Dreieck1
%Dreieck wird im Gegenuhrzeigersinn gedreht.
%u ist die Anzahl der Dreiecke die er machen soll. :) oder Iterationen
% DrehMatrix in Abhängigkeit von a
% Seite des Dreiecks in Abhängigkeit von s


axis equal

[mm] c=sqrt(s^2-(s/2)^2); [/mm]
b=a*pi/180;              % Umrechnung in Bogenmass


m1=[cos(b) -sin(b);sin(b) cos(b)];


L1(:,:,1)=[s/2;-1/3*c];   % Punkt B
L2(:,:,1)=[0;2/3*c];    % Punkt C
L3(:,:,1)=[-s/2;-1/3*c];  % Punkt A



for i=1:u
    L1(:,:,i+1)=m1*L1(:,:,i)*1/(2*sin(150*pi/180-b));
    L2(:,:,i+1)=m1*L2(:,:,i)*1/(2*sin(150*pi/180-b));
    L3(:,:,i+1)=m1*L3(:,:,i)*1/(2*sin(150*pi/180-b));
    hold on
    
    line([L1(1,1,i);L2(1,1,i)],[L1(2,1,i);L2(2,1,i)])
    line([L2(1,1,i);L3(1,1,i)],[L2(2,1,i);L3(2,1,i)])
    line([L3(1,1,i);L1(1,1,i)],[L3(2,1,i);L1(2,1,i)])
end


also das dort mal so reinkopieren in ein M-file und dann mal zeichnen lassen...
und das ganze hier noch für ein quadrat:

% DrehMatrix in Abhängigkeit von a
% Alle Vier punkte in Abhängigkeit von x
% u ist die Anzahl der Quadrate die er machen soll

axis equal
b=a*pi/180;  
m=[cos(b) -sin(b);sin(b) cos(b)];



L1(:,:,1)=[x;x];
L2(:,:,1)=[-x;x];
L3(:,:,1)=[-x;-x];
L4(:,:,1)=[x;-x];

for i=1:u
L1(:,:,i+1)=m*L1(:,:,i)*1/(sin(b)+cos(b));
L2(:,:,i+1)=m*L2(:,:,i)*1/(sin(b)+cos(b);
L3(:,:,i+1)=m*L3(:,:,i)*1/(sin(b)+cos(a));
L4(:,:,i+1)=m*L4(:,:,i)*1/(sin(b)+cos(b));
hold on
line([L1(1,1,i);L2(1,1,i)],[L1(2,1,i);L2(2,1,i)])
line([L2(1,1,i);L3(1,1,i)],[L2(2,1,i);L3(2,1,i)])
line([L3(1,1,i);L4(1,1,i)],[L3(2,1,i);L4(2,1,i)])
line([L4(1,1,i);L1(1,1,i)],[L4(2,1,i);L1(2,1,i)])
end

und jetzt noch für ein 5-eck

% M-File von 5-Eck 1
% 5-Eck wird im Uhrzeigersinn gedreht.
%u ist die Anzahl der Quadrate die er machen soll. :)
% DrehMatrix in Abhängigkeit von a
% s ist die Strecke vom Mittelpunkt zu einem beliebigen Punkt, des 5-ecks


axis equal
b=a*pi/180;



m1=[cos(b) -sin(b);sin(b) cos(b)];



L1(:,:,1)=[s*sin(36*pi/180);-s*sin(54*pi/180)];
L2(:,:,1)=[cos(72*pi/180) -sin(72*pi/180);sin(72*pi/180) cos(72*pi/180)]*L1;
L3(:,:,1)=[cos(72*pi/180) -sin(72*pi/180);sin(72*pi/180) cos(72*pi/180)]*L2;
L4(:,:,1)=[cos(72*pi/180) -sin(72*pi/180);sin(72*pi/180) cos(72*pi/180)]*L3;
L5(:,:,1)=[cos(72*pi/180) -sin(72*pi/180);sin(72*pi/180) cos(72*pi/180)]*L4;


for i=1:u
    [mm] L1(:,:,i+1)=m1*L1(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
    [mm] L2(:,:,i+1)=m1*L2(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
    [mm] L3(:,:,i+1)=m1*L3(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
    [mm] L4(:,:,i+1)=m1*L4(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
    [mm] L5(:,:,i+1)=m1*L5(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
    hold on
    
    line([L1(1,1,i);L2(1,1,i)],[L1(2,1,i);L2(2,1,i)])
    line([L2(1,1,i);L3(1,1,i)],[L2(2,1,i);L3(2,1,i)])
    line([L3(1,1,i);L4(1,1,i)],[L3(2,1,i);L4(2,1,i)])
    line([L4(1,1,i);L5(1,1,i)],[L4(2,1,i);L5(2,1,i)])
    line([L5(1,1,i);L1(1,1,i)],[L5(2,1,i);L1(2,1,i)])
end

      
so... nun möchte ich das ganze für ein n-Eck machen.
das habe ich mal geschrieben, geht aber nicht! aber guckt es euch mal an.

% das ultimative M-file.
% der name ist ultimativ
% a=Winkel
% f=Anzahl Ecken
% s= strecke des Ursprungs zu einem Punkt
% u=Anzahl iterationen


c=a*pi/180;           % umrechnen in Bogenmass
b=(pi-(2*pi/f))/2     % das ist winkel beta, in dem Dreieck O, L1(:,:,1), L1(:,:,2)

j=pi-c-b              % das ist winkel gamma, in dem Dreieck O, L1(:,:,1), L1(:,:,2)
q=(2*pi)/f            % das ist der Winkel den ich brauche um die übrigen punkte des f-ecks zu berechnen
m1=[cos(c) -sin(c);sin(c) cos(c)]; % das ist die drehmatrix die ich brauche für die drehung, analog wie im quadrate1
w=s*sin(b)/sin(j)     %diese Strecke brauche ich um den streckungsfaktor zu errechnen. Vom sinus satz her abgeleitet

for k=1:f
    m3=[cos(k*q) sin(k*q);-sin(k*q) cos(k*q)]; % das ist die drehmatrix zum die anderen Punkte zu berechnen

  L1(:,:,1)=[s*cos(b);s*sin(b)]
  Lk+1(:,:,1)=m3*[s*cos(b);s*sin(b)]
  
  for i=1:u
      Lk(:,:,i+1)=m1*Lk(1,1,i)*(w/s)
  end
end




for i=1:u
  
    for k=1:f
    
    line([Lk(1,1,i);Lk+1(1,1,i)],[Lk(2,1,i);Lk+1(2,1,i)]
    end
end

nun habe ich das ganz analog geschrieben wie ich es z.b. beim 5-eck gemacht habe...
nur geht das mit dem Lk und dem LK+1 nicht... irgendwie sollte man ein zweiten index einführen.
ju... und wieso ich zwei for befehle habe, ich stelle mir das so vor, dass matlab zuerst den zweiten for befehl alle zahlen durchgeht, dann zum ersten for befehl geht und dort eine zahl höcher macht, und dann wieder alle zahlen durchmachen beim zweiten for befehl.
naja.. irgendwie noch schwer zu erklären.
Ich hoffe dass mir irgendwer helfen kann und dass ich das problem genug klar formuliert habe, sonst fragt, ich gebe gerne antwort.
und ja... ich habe gar keine ahnung obs überhaubt ein problem dafür gibt... vielleicht geht es gar nicht, vielleicht braucht man noch ein anderes programm. helft mir einfach, wäre sehr dankbar dafür!
danke schon mal im vorraus, für alle die sich die zeit genommen haben.
mfg
KaOoTe


        
Bezug
MATLAB: antwort
Status: (Antwort) fertig Status 
Datum: 22:06 Mi 27.04.2005
Autor: Physikus

hi kaoote,
kann dir zwei lösungsvorschläge machen.
den eleganten hast du schon fast da stehen.
benutzte einfach die dritte dimension für deine verschieden punkte.
also L1(:,:,1)->L(:,:,1)
L2(:,:,1)->L(:,:,2)
L3(:,:,1)->L(:,:,3) usw
würde mich ja mal interessieren warum du da überhaupt immer die 1 in der dritten dimension stehen hast. brauchst du in deinen ersten drei beispiele nicht.
die zweite lösung ist umständlicher und langsamer. soll dir eigentlich auch nur zeigen wie man bei matlab mit laufende name bilden kann.( sinnvoll wenn man datein speichert.
und zwar leifert der ausdruck
for k=1:10
   for j=1:10
      eval(sprintf('L%01i=matrixoperations_etc%01i;',k,j))
   end
end
deine variablen L1 bis L10 wobei jeweils die matrixoperation 1 bis 10 ausgeführt wurde
sprintf setzt an die stelle %01i den integer k ein. (%02i würde eine laufende null vorsetzten 01,02...,09,10,11...) und gibt das ganze als string zurück, eval setzt den string in einen matlab befehl um.
hoffe das hilft dir weiter
grüsse Physikus

Bezug
                
Bezug
MATLAB: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 17:45 Fr 29.04.2005
Autor: kaoote

jo.. das hat schon einen grund wieso da ne 1, steht.
eigentlich hat das, so meinte ich, nichts mit der dritten dimension zu tun, aber hm... also ich habe das eins dort als index verwendet.
denn z.b. bei den quadraten.
L1(:,:,1)=[x;x];  das ist der erste punkt! da müsste das eins glaube ich nicht stehen, aber schauen wir doch mal die for-schleife an.
for i=1:u
L1(:,:,i+1)=m*L1(:,:,i)*1/(sin(b)+cos(b));
das ist jetzt eine rekursive Schreibweise. m ist hier die Drehmatrix. Ins deutsch übertragen heisst das: L1(:,:,2)=m*L1(:,:,1)  also L1 ist der erste punkt des quadrats, und L1(:,:,1) ist der ursprüngliche Punkt, L1(:,:,2) ist der gedrehte punkt, aber immernoch der erste Punkt, nur halt gedreht.


hm... also bei deinem zweiten ausdruck der zwar etwas langsamer ist. Für was brauchst genau brauchst du da zwei variabeln?
also.. für was steht da noch j? und was passiert konkret wenn man %01i macht? dann gibt es keine nullstelle? also dann heisst es:
L1, L2, u.s.w. bis L10?
hm.. na aber ich versuchs mal mit dem, habs zwar noch nicht ganz so den Durchblick, aber probieren kann ja nie schaden!
dank dir vielmals!
mfg KaOoTe

Bezug
                
Bezug
MATLAB: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:33 Fr 29.04.2005
Autor: kaoote

naja, also wie gesagt, hab mal etwas herumprobiert.
Es soll ja schlussendlich ein m-file sein, wo man die anzahl ecken eingeben kann und dann automatisch ein n-eck gebildet wird mit u iterationen.

schaut das mal an! :

% das ultimative M-file.
% der name ist ultimativ
% a=Winkel
% f=Anzahl Ecken
% s= strecke des Ursprungs zu einem Punkt
% u=Anzahl iterationen
axis equal


c=a*pi/180;           % umrechnen in Bogenmass
b=(pi-(2*pi/f))/2;     % das ist winkel beta, in dem Dreieck O, L1(:,:,1), L1(:,:,2)

j=pi-c-b;              % das ist winkel gamma, in dem Dreieck O, L1(:,:,1), L1(:,:,2)
q=(2*pi)/f;            % das ist der Winkel den ich brauche um die übrigen punkte des f-ecks zu berechnen
m1=[cos(c) -sin(c);sin(c) cos(c)]; % das ist die drehmatrix die ich brauche für die drehung, analog wie im quadrate1
w=s*sin(b)/sin(j);     %diese Strecke brauche ich um den streckungsfaktor zu errechnen. Vom sinus satz her abgeleitet

for k = 1:f
   m3=[cos(k*q) sin(k*q);-sin(k*q) cos(k*q)];% das ist die drehmatrix zum die anderen Punkte zu berechnen

        
           eval(['L' num2str(k) ' = m3*[s*cos(b);-s*sin(b)]'])
  
end

nun gibt er L1 L2, bis Lf heraus... f ist die anzahl ecken.
Die Punkte werden nun auch immer schön richtig angeordnet, nun solte man noch diesen teil einfügen irgendwie.
for i=1:u
    [mm] L1(:,:,i+1)=m1*L1(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
    [mm] L2(:,:,i+1)=m1*L2(:,:,i)*(5^0.5+1)/(4*sin(b+54*pi/180)); [/mm]
u.s.w.   einfach diese rekursive schreibweise dass L1(:,:,i+1)=m1*L1(:,:,i) ist. m1 ist hier die drehmatrix.
jo.. also was ich schon probiert habe ist: Lk in der hoffnung dass er dann jedes k dort einsetzt als zahl.. nur schaut er die Variabel Lk wie Fg an.. hm.. und erkennt dort kein k, hoffe ihr versteht was ich meine :)
ju also... das problem wurde jetzt hoffentlich noch etwas präziser geschildert.



Bezug
                        
Bezug
MATLAB: Antwort
Status: (Antwort) fertig Status 
Datum: 20:14 Fr 29.04.2005
Autor: Physikus

ok auf ein neues,

nur

> schaut er die Variabel Lk wie Fg an.. hm.. und erkennt dort
> kein k, hoffe ihr versteht was ich meine :)
>  ju also... das problem wurde jetzt hoffentlich noch etwas
> präziser geschildert.

sorry  aber den satz verstehe ich nicht. aber deine eval variante sollte funktionieren.

ok das problem mit dem dritten index hab ich verstanden. aber auch kein problem. nimm einfach nen vierten index . also zb. index 1 und 2 für drehmatrix index 3 für den punkt  und index 4 für die i-te iteration.
keinproblem für matlab. nur ein wenig aufpassen mit dem speicher. ab ner millon iteration könnte es kritsch werden *g*.
generell kann matlab mit bielibig vielen dimensionen umgehen.
grüsse physikus
  

Bezug
                                
Bezug
MATLAB: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:08 Sa 30.04.2005
Autor: kaoote

jup mit der 4. dimension ist es gegangen, wer sich dafür interessiert kann mir ja ein mail schreiben, kanns ihm dann schicken!
danke
mfg
KaOoTe

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de