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

Summe mit for-Schleife

 

TeChierys
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 14.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2014, 16:01     Titel: Summe mit for-Schleife
  Antworten mit Zitat      
Ich stehe wieder auf den Schlauch. Zu erzeugen ist eine Summe mit Laufindex l=1...k. Der Algorithmus sieht so aus:

Code:

n=length(M(:,1);
P=[];
k=numel(P);
i_k=1;
u=0*M(:,i);
v=0*M(i,:);
while k<n
a=M(i_k,:);
[b]for l=1:k
a=a - Summe von l bis k (u(i)*v)
end for[/b]
...
...
P=union(P,i);
i=...
u=...
v=...
end while


Also in jedem Schritt(while-Schleife) werden die Zeilenindex i, zwei Vektoren u und v und die Menge der Zeilenindex P erneuert. a wird zum Begin jeder Iteration aus der Input gewählt, und dann von der bereits ausgerechneten Approximationsmatrix (u*v) abgezogen.
In Latex-Sprache heißt es a=a- \sum\limits_{l=0}^k u_l (i) v_l. Nun wie kann man die Summe in einer For-Schleife mit l einpacken. Bisher kann ich nur eine forschleife so vorstellen, in dem man die Laufindex l in die Summe einpacken, z.B.
Code:


Eine dumme Idee von mir ist, dass ich die While-Schleife dafür anwende und anstatt Vektoren u und v zwei Matrizen u(i,j) v(i,j) erneuern. Aber da taucht wieder das Problem mit der Aufwand. Also
Code:
....
a=M(i,:);
sum=0;
temp=k;
while temp >= 1
sum=u(i,temp)*v(temp,:)+sum;
temp=temp-1
end while
a=a-sum;
 


Ist das korrekt und gibts vielleicht leichterer Wege so eine Summe zu beschrieben?
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 03.04.2014, 20:40     Titel:
  Antworten mit Zitat      
ich bin mir nicht ganz sicher was du machen willst.
sum ist übrigens ein matlab befehl und sollte nicht überschrieben werden und als variablen name verwendet werden. bringt dir der befehl
Code:
etwas?
wenn nicht sind mir in deinem code zu viele ... um zu verstehen was du machen willst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
TeChierys
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 14.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2014, 15:00     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
ich bin mir nicht ganz sicher was du machen willst.
sum ist übrigens ein matlab befehl und sollte nicht überschrieben werden und als variablen name verwendet werden. bringt dir der befehl
Code:
etwas?
wenn nicht sind mir in deinem code zu viele ... um zu verstehen was du machen willst.


Ich kann das Additionsverfahren nicht richtig erklaeren. Wie kann ich hier Latex-Code eingeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
ovo
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2014, 16:03     Titel:
  Antworten mit Zitat      
Deinen Latex Code habe ich wie folgt verstanden:
Du multiplizierst jedes Element in der Matrix ul mit dem Wert vl und addierst es auf und dann ziehst du die summe ab von a. Stimmt das?

Ich habe ein Beispiel gemacht:

Code:
ul = [1, 2, 3; 4, 5, 6; 7, 8, 9];
vl = 2;

l = size(ul);

i=1:l(1)*l(2);
x = sum(ul(i)*vl);
Private Nachricht senden Benutzer-Profile anzeigen
 
TeChierys
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 14.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2014, 16:54     Titel:
  Antworten mit Zitat      
ovo hat Folgendes geschrieben:
Deinen Latex Code habe ich wie folgt verstanden:
Du multiplizierst jedes Element in der Matrix ul mit dem Wert vl und addierst es auf und dann ziehst du die summe ab von a. Stimmt das?

Ich habe ein Beispiel gemacht:

Code:
ul = [1, 2, 3; 4, 5, 6; 7, 8, 9];
vl = 2;

l = size(ul);

i=1:l(1)*l(2);
x = sum(ul(i)*vl);


Jep, so etwa, wobei u_l, v_l zwei Vektoren sind. Der "l" bei u_l heißt "l"-te Spalte, bei v_l andersrum, "l"-te Zeile.

Also jede Multiplikation u(i)*v heißt eigentlich: u_l(i) die l-te Spalte von u an der Spaltenstelle i(also ein Zahl, da hast du völlig recht) mal v_l also der l-te Zeile. Der Indexzahl i wird bei der while-environment bestimmt und spielt hier keine große Rolle. Eigentlich ist das Problem, dass bei jeder while-Iteration(äußerste Schleife) werden neue u_k, v_k ausgerechnet, und hierfür gespeichert werden. Deshalb denke ich, obwohl auf Paper u,v überhaupt nicht zu speichern brauchen, die sollen durch solche for-schleife automatisch ausgerechnet sein, speicher ich die Vektoren in Matrixform u(:,l) und v(l,Smile. Spalte u_5 kommt zb. in der 5. Spalte in der Matrix u rein rein, Zeile v_3 in der 3. Zeile der Matrix v rein. Nun ist aber das Problem wie speicher ich solche Matrizen? Lade hier mein bisherigen Code hoch und hoffe ihr könnt mir dabei hlefen.
Code:
function [ A3 ] = A3(M,erf)
tic;
n=length(M(:,1));
P=[];
k=1;
i=1;
u=0*M(:,i);
v=0*M(i,:);
while norm(M(i,:))<10^(-13)
    i=i+1
end

while k <= n
    a=M(i,:);
    add=0;
temp=k;
while temp >= 1
add=add + u(i,temp)*v(temp,:);
temp=temp-1 ;
end  
a=a-add;
      P=union(P,i);
    if norm(a)>10^(-13)
      [c,j]=max(abs(a));
      v(k,:)=1/c*a;
      u(:,k)=M(:,j); %[u] Hier schon mal das erste Definitionsproblem[/u]
      kemp=k;
      sdd=0;
      while kemp >=1
          sdd=sdd+v(kemp,j)*u(:,kemp);
          kemp=kemp-1;
      end
      u(:,k)=u(:,k)-sdd;
            [g,i]=max(abs(u));
         if ismember(i,P)==1
             g=0;
             [g,i]=max(abs(u));
                  end
    else break
    end
    k=k+1;
fehl= norm(u(:,k))*norm(v(k,:));

if fehl <=erf
    break
end
m=numel(P);
if m==n
    break
    S=u*v
end


end
toc;
plot....
end
Private Nachricht senden Benutzer-Profile anzeigen
 
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.