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

Neuling braucht Hilfe in Sachen Quelltext bzw. beim Program

 

Die Verzweifelte

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 11:43     Titel: Neuling braucht Hilfe in Sachen Quelltext bzw. beim Program
  Antworten mit Zitat      
Hallo zusammen

Matlab gibt mir immer wieder eine Fehlermeldung aus, wahrscheinlich auch zurecht. Ich bin mit dem Programmieren nicht so vertraut.

Code:
function x=vorrueck(L,R,b)
[n,n]=sinze(L)

for j=2:n
   for i=1:n
      c(i)=L(j,i)'*b(i);
   end

   summe=0
   for k=1:n
   summe(j)=summe+c(k)
   end
   y(j)=(b(j)-summe(j))/L(j,j)
end
 



hier geht es darum jeweils einzelne Zeilen einem Vektor zu mutilplizieren. Quasi Skalarprodukt. Jeodch nimmt Matlab meinen ursprüngliche Quelltext auch nicht an, sodass ich es in den obigen Text umschreiben musste. Dies führt allerdings zu der gleichen Meldung.
Kann mir da wer einen Tipp geben? Ich wäre demjenigen wirklich sehr dankbar.

Hier ist mein ursprünglicher Quelltext
Code:

function x=vorrueck(L,R,b)
[n,n]=size(L)
y(1)=b(1)/L(1,1);
for k=2:n
    y(k)=(b(k)-(L(k,1:k-1)'*y(1:k-1)))
end
 

Mit freundlichen Grüßen und im Voraus vielen lieben Dank


Bitte Code-formattierung verwenden - danke! Jan S


CrashBall89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 13:30     Titel:
  Antworten mit Zitat      
Hey,

was genau sagt die Meldung?

MfG
CrashBall89
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2011, 13:43     Titel: Re: Neuling braucht Hilfe in Sachen Quelltext bzw. beim Prog
  Antworten mit Zitat      
Hallo Die Verzweifelte,

Code:
function x=vorrueck(L,R,b)
[n,n] = sinze(L);   % kein 'n' in SIZE,
% Soll n nun size(L, 1) oder size(L, 2) sein?!

for j=2:n
  for i=1:n
    c(i) = L(j,i)'*b(i);  % Das Transponieren eines Skalars ist überflüssig
  end

  summe=0;   % Jetzt is "summe" skalar
  for k=1:n
    summe(j) = summe + c(k);  % Jetzt is "summe" ein [1 x j] Vektor!
  end
  y(j) = (b(j)-summe(j))/L(j,j)
end
 

Matlab kann übrigens mit Matrizen rechnen. "c = L * b" oder etwas ähnliches ist wahrscheinlich genug.

gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DenisR
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 13:45     Titel:
  Antworten mit Zitat      
Hi,

also ich würde dir empfehlen grundsätzlich in Matlab kein i oder j als Zähler zu verwenden, da du sie hier für den Imaginärteil einer Zahl verwendest.
Das sollte aber nicht das Problem sein.

Was soll die Funktion denn zurückgeben? Dein Rückgabeparameter ist x, jedoch wird dieses x an keiner Stelle im Code definiert.
Könnte das das Problem sein?
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 13:56     Titel:
  Antworten mit Zitat      
Wie Jan geschrieben hat ist u.a. die Variable summe das Problem (Skalar vs. Vektor), dies könntest du z.B. vereinfachen zu
Code:
summe = sum(c);
Private Nachricht senden Benutzer-Profile anzeigen
 
Die Verzweifelte

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 16:25     Titel:
  Antworten mit Zitat      
Wow so viel Hilfe. Erst mal vielen vielen Dank an alle Antwortgebenden Very Happy

Also ich soll in Numerik so ein Programm schreiben, welches ermöglicht das LGS zu berechnen:

LRx=b

Wobei Lx=y
Und damit wäre Ly=b, wobei L und R Dreiecksmatrizen sind, sodass man hier x viel einfacher berechnen kann.


Ich hab dooferweise, nur einen Teil des Prog gepostet, weil der untere Teil des Progs ja äquivalent dazu ist und ich quasi durch die Antworten darauf schließen könnte ^^''' So viel zur Theorie...

Code:
function x=vorrueck(L,R,b)
[n,n]=size(L)
y(1)=b(1)/L(1,1);
for k=2:n
    y(k)=(b(k)-(L(k,1:k-1)'*y(1:k-1)))
end
x(n)=y(n)/R(n,n)
for i=n:1:-1
    x(i)=(R(i,i+1:n)'*x(i+1:n))/R(i,i)
end


Das hier ist das gesamte Prog.

L und R und b hab bereits gegeben.
Aber wenn ich die Funktion aufrufe, kommt das hier ._.

??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> vorrueck at 5
y(k)=(b(k)-(L(k,1:k-1)'*y(1:k-1)))

Dabei sind
L=[1 0 0; -2 1 0; 4 5 1]
R=[2 -1 6; 0 3 9; 0 0 -2]
und
b=[18; -3; 231]

Vielen Dank im Vorraus

Bitte Code-Umgebung verwenden - Jan S
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2011, 16:57     Titel:
  Antworten mit Zitat      
Hallo Die Verzweifelte,

Code:
y(k)=(b(k)-(L(k,1:k-1)'*y(1:k-1)));   % ERROR

Du kannst den Debugger benutzen, um solche Probleme zu lösen:
Code:

Dann stoppt Matlab wenn der Fehler auftaucht und Du kannst die Werte im Command-Window genauer untersuchen:
Code:
size(L(k,1:k-1))
size(L(k,1:k-1)')
size(y(1:k-1))
size(L(k,1:k-1)' * y(1:k-1))

Das ergibt nämlich eine Matrix! Ich vermute, Du brauchst das Transponieren bei y.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2011, 17:58     Titel:
  Antworten mit Zitat      
Code:
function x=vorrueck(L,R,b)
for i=n:1:-1  
    x(i)=(R(i,i+1:n)'*x(i+1:n))/R(i,i)
end

Hier hast du noch einen kleinen Fehler: Die for-Schleife wird angegeben als "Startwert : Schrittweite : Endwert " , also in deinem Fall:
Code:

for i=n-1:-1:1  
    % Code
end

da du x(n) ja bereites explizit angegeben hast.
Weiters ist auch hier die Transposition vertauscht, wie Jan bereits geschrieben hat. Außerdem hast du bei der Rücksubstitution das y vergessen Wink.
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.