matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabMATLAB
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
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.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]