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

Matrix erstellen mit Funktionen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2009, 10:57     Titel: Matrix erstellen mit Funktionen
  Antworten mit Zitat      
Hallo liebe Matlabkundigen

ich hab da ein Problem mit meiner Studienarbeit. Muss meine Formeln in Matlab bringen und stoße dabei als Programmierlegasteniker immer wieder schnell an meine Grenzen, wie nun auch wieder. hab hier folgenden code:
Code:

theta0=theta1:deltatheta:theta2;
theta=theta0';
w=0;
while w<100
  Escort(w) =   A1* Z0/r *(Eigenmoden(w,f,theta,r,theta1,phi))+....
  w=w+1;
end
 


Also eigentlich sollte mir dieser Code eine Matrix ausgeben. Übergebe den Vektor theta meiner Funktion. Das funktioniert auch noch. hab dann nen Vektor mit 100 Zeilen. jetzt will ich aber auch 100Spalten haben, die über w laufen. Aber obiger Code gibt immer folgenden Fehler aus:

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


Habs auch schon mit 2 schleifen über theta und w versucht aber da kommt das gleiche. Am schönsten wär es natürlich in der Form Escort(theta,w), so dass ich jedes Element der Matrix auch aufrufen kann, aber hab leider keine Ahnung wie das funktioniert. Ich freu mich auf Antworten und hoff dass mir hier jemand helfen kann. Auf jeden fall schon mal vielen dank im vorraus
Thomas


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 12.06.2009, 11:06     Titel:
  Antworten mit Zitat      
Moin,

was erwartet die Funktion "Eigenmoden" als Eingang, müssen das alles Skalare sein oder gehen auch Vektoren? Was gibt die Funktion zurück, einen Vektor oder einen einzelnen Wert? In welcher Zeile taucht der Fehler auf? Wenn schon eine Schleife, dann wenigstens eine for-Schleife und auch nicht bei 0 beginnend (das ist nur in C so) sondern bei 1, da in Matlab der erste Index 1 ist (so wie man das auch vermuten würde). Ich vermute mal alle anderen Werte, die bei dir in dem Code stehen sind Skalare, also keine Vektoren?

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bane
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 09.06.09
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 12.06.2009, 11:15     Titel:
  Antworten mit Zitat      
Also wenn Deine Funktion 'Eigenmoden' , wie ich vermute, eine Matrix zurückgibt, dann kannst Du sie nicht einem Skalar 'Escort(w)' zuweisen.
Dann kommt es nämlich zu Deiner Fehlermeldung.
Übergib' doch 'w' als Vektor und lasse die Schleife weg.
Man vermeidet i.d.R. Schleifen über Parameter, sondern löst das mit Indizes!

Gruß, Phil
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2009, 13:00     Titel:
  Antworten mit Zitat      
so, hab mich jetzt auch mal angemeldet.
Also schon mal danke für eure schnellen Antworten. nun zu den Fragen. Die Funktion Eigenmoden berechnet die Wellengleichung für höhere Moden in einer GTEM-Zelle eigentlich nur an einem Punkt, also im Grunde sind alle Werte Skalare. nun hab ich eine diskrete Anzahl von Punkten genommen ( Eigentlich die Oberfläche eines Dipols) die durch den Vektor theta beschrieben sind. So erhalte ich also wenn ich nur theta als Vektor nehme auch einen Vektor mit dem Ergebnis der Wellengleichung für den jeweiligen Punkt auf meinem Dipol (das funktioniert auch). In der Funktion Eigenmoden werden auch Legendrrpolynome verwendet. Deren Indizes sind durch w gegeben. Ich will nun für jeden Punkt theta den Index von 1 bis 100 laufen lassen und so eine Matrix bekommen, die als Zeilenindex theta und als Spaltenindex w hat....

@Alex: wieso eine for Schleife?

Danke für eure Mühen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 12.06.2009, 13:33     Titel:
  Antworten mit Zitat      
Moin,

also ein for-Schleife ist eine normale Zählschleife, das heißt man weiß vorher wie lange die Schleife laufen soll. Bei ein While oder Do-While-Schleife ist es so, das vor bzw. nach einem Schleifendurchlauf eine beliebige Bedingung auf ihre Gültigkeit hin überprüft wird, dass kann ein Zähler sein, es ist aber in den meisten Fällen ein Flag, der gesetzt wird.

Zu deinem Problem:
Code:
numW = 100;
theta0=theta1:deltatheta:theta2;
theta=repmat(theta0,numW);
w = repmat(1:numW,length(theta0));

Escort =   A1 .* Z0./r .* (Eigenmoden(w,f,theta,r,theta1,phi))+....
 

Ich hoffe das funktioniert. Wenn nicht, dann überprüfe ob in "Eigenmoden" überall die elementweisen Operatoren verwendet werden.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Tommy1984
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.06.09
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 15.06.2009, 10:48     Titel:
  Antworten mit Zitat      
Hallo Alex
wiedermal vielen Dank für deine Mühen. leider funktioniert das ganze immer noch nicht. jetzt kommt immer die Fehlermeldung:
Code:
??? Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==> Eigenmoden at 16
kr=sqrt(ny*(ny+1));

habs auch mal mit ner for-schleife probiert:
Code:
EscortN=ones(100);
for p=1:1:100,
EscortN(:,p)= A1* Z0/r*(Eigenmoden(p,f,theta,r,theta1,phi))'+...
end

aber da werden die werte gegen ende hin immer größer. versteh aber nicht wieso. müsste da nicht jede zeile neu belegt werden? also sollten alles werte im bereich e^-5 bis e^-6 sein aber es kommen in den letzten zeilen werte im bereich e^24 raus. ich hab jetzt mal die funktion Eigenmoden mit angehängt. vielleicht is ja auch da n fehler aber aufrufen kann ich sie ja und mit der übergabe von einem einzelnen Vektor funktioniert es ja auch.....
vielen dank
Thomas

Eigenmoden.m
 Beschreibung:

Download
 Dateiname:  Eigenmoden.m
 Dateigröße:  1.64 KB
 Heruntergeladen:  429 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 15.06.2009, 13:34     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
Wenn nicht, dann überprüfe ob in "Eigenmoden" überall die elementweisen Operatoren verwendet werden.


Du musst in deiner Funktion dann auch alle Operationen auf "elementweise" ändern, d.h. in Zeile 16 müsste es dann z.B.
Code:
kr=sqrt(ny.*(ny+1));
lauten.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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 - 2024 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.