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 Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

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
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. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
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.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]