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

Funktion in einer anderen Funktion

 

k123456
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2018, 10:07     Titel: Funktion in einer anderen Funktion
  Antworten mit Zitat      
Hallo Leute,

ich habe die Nullstellen einer Funktion, abgespeichert als Funktionsdatei. Der Übersichtlichkeit halber möchte ich eine weitere Funktionsdatei erstellen, welche mit diesem "Zwischenergebnis" weiterrechnet. Bis jetzt zeigt es mir die Nullstellen nur grafisch an, nicht aber im Workspace. Zudem beinhaltet die zweite Funktion eine Konstante H2, welche ich bereits in der ersten Funktion vorgegeben musste.
Muss ich nun die Konstante bei Parametervariation jedes mal in beiden Funktionen neu vorgeben? Sicher gibt es hier einen zweckmäßigeren Weg Smile

Code:
function [ z ] = zeta(H2)
H2 = 1
N = 101

F = @(zeta) (zeta.^2 - H2^2) .* tan(zeta) - 2*zeta*H2
interval = [0, 10];
start_pts = linspace(interval(1),interval(2),N);
found_roots = [];

for i=1:numel(start_pts)-1
    try
        found_roots(end+1) = fzero(F,[start_pts(i),start_pts(i+1)]);
    end  
end

% Plot results:
figure, hold on
fplot(F,interval,1e-4)
plot(found_roots,zeros(size(found_roots)),'rx')

end


Bei der zweiten weiterführenden Funktion dachte ich prinzipiell gesehen an so etwas:

Code:
function  C  = Cm ( zeta,H2 )
H2 = 1

for m = erster Eintrag(zeta) : Einzelergebnisse(zeta) : bis zum letzten Eintrag(zeta)
C(m) = (-1)^m * 2 .* zeta(m) .* (zeta(m).^2 + 2*H2 + H2^2)^(-1)
end

end


Wie liese sich so ein Problem geschickt lösen? Rolling Eyes

Gruß
k123456
Private Nachricht senden Benutzer-Profile anzeigen


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 16.10.2018, 10:20     Titel:
  Antworten mit Zitat      
Hallo k123456,

wenn du die Variablen in deiner ersten Funktion wieder zurück gibst, dann kannst du die in deiner zweiten Funktion einlesen und verwenden.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2018, 11:00     Titel:
  Antworten mit Zitat      
Hi Jonas,

vielen Dank für die schnelle Antwort. Die Übergabe scheint zu funktionieren (wenn ich in Funktion eins den Wert von H2 ändere und Funktion 2 unverändert ausführe).

Stellt sich nur noch die Frage, wie ich die Wurzeln als Werte angezeigt bekomme und diese dann weiterverarbeiten kann. Question

Grüße
k123456
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.10.2018, 08:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wie ich die Wurzeln als Werte angezeigt bekomme und diese dann weiterverarbeiten kann


Was meinst du damit genau?

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2018, 10:39     Titel:
  Antworten mit Zitat      
Hi Jonas,

ich habe im ersten Code die Wurzeln einer Gleichung gesucht und diese auch geplottet. Dargestellt sind sie als rote Kreuze im Plot. Im Workspace zeigt es mir aber keine Zahlenwerte an. Diese brauche ich aber. Die gewonnen Werte möchte ich als Input für eine andere Funktion in einer separaten Datei nutzen, da die weiterführende Gleichung von den gefundenen Wurzeln abhängt.

Noch dazu handelt es sich bei der weiterführenden Gleichung um eine Summe, welche ich durch eine for-Schleife ausdrücken würde.
Allerdings funktionieren meines Wissens nach nur ganzzahlige Steps. Welche Möglichkeit gibt es noch?

Gruß
k123456
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.10.2018, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Im Workspace zeigt es mir aber keine Zahlenwerte an.


Gibst du diese Werte denn auch an deinen Workspace zurück? Mit dem hier geposteten Code wird ja nur die Variable z zurück gegeben.

Zitat:
Noch dazu handelt es sich bei der weiterführenden Gleichung um eine Summe

Bitte angeben welche Gleichung du meinst, das macht das Lösen deines Problems deutlich einfacher.

Zitat:
Allerdings funktionieren meines Wissens nach nur ganzzahlige Steps. Welche Möglichkeit gibt es noch?

Was ist da dein Problem? Ohne dass du beschreibst was du genau möchtest ist es relativ schwierig zu helfen.
Und nein, For-Schleifen können nicht nur in "ganzzahligen Steps" durchlaufen werden. Allerdings musst du bei kleineren/größeren Schrittweiten dann die Indizierung deiner Vektoren/Matrizen anpassen.
Und es ist übrigens schneller und ratsam, Summen ohne Schleifen zu berechnen; zum Beispiel über Addition von Matrizen oder Vektoren.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2018, 13:37     Titel:
  Antworten mit Zitat      
Hi,

ok, dann müsste ich doch sagen, dass Funktion
Code:
function [ z ] = zeta(H2)

erweitert wird um "found_roots" zu
Code:
function [ z, found_roots,zeta ] = zeta(H2)
.
Die Outputvariablen sollen den Input für
Code:
function C  = Cm( zeta,H2,found_roots )
liefern, weshalb ich diese Funktion ebenfalls um "found_roots" zu
Code:
  function C  = Cm ( zeta,H2,found_roots )
erweitern müsste. Wähle ich komplett den falschen Ansatz oder wo ist das Problem? Es funktioniert leider nicht.

Wenn dieses Problem gelöst würde, könnte dann die Summenbildung über deine empfohlene schnellere Variante mittels Matrizenrechnung angegangen werden, um die Summe
Code:
C(m) = (-1)^m * 2 .* zeta(m) .* (zeta(m).^2 + 2*H2 + H2^2)^(-1)
zu lösen.


Grüße
k123456
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.10.2018, 13:43     Titel:
  Antworten mit Zitat      
Hi,

wie rufst du denn die Funktionen auf?

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2018, 13:52     Titel:
  Antworten mit Zitat      
Hi,

ich habe eine weitere Funktionsdatei erstellt mit dem Namen Cm.m und anschließend die Funktion
Code:

function  C  = Cm(found_roots,zeta,H2)

C = @found_roots
bzw.
C = found_roots

end
 

reingeschrieben ohne die vollständige Summe nur zum Testen, ob es funktioniert.
Mit einer der beiden Varianten erhoffte ich mir die Werte von "found_roots" im Workspace nachlesen zu können.

Grüße
k123456
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.10.2018, 13:56     Titel:
  Antworten mit Zitat      
Ich meinte wie du in deinem Code die Funktionen aufrufst. Da musst du ja irgendwo angeben wann du die "benutzen" möchtest.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2018, 14:02     Titel:
  Antworten mit Zitat      
ich bin neu in der Thematik und dachte, damit sei es getan.
Also wenn ich sage C = found_roots , dann rufe ich sie "wann - jetzt" auf, indem ich auf ausführen klicke...so die eigentliche Idee.
Hast du eine Idee, wie sich so etwas ausdrücken lässt?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.10.2018, 12:28     Titel:
  Antworten mit Zitat      
Hallo k123456,
Zitat:

Also wenn ich sage C = found_roots , dann rufe ich sie "wann - jetzt" auf, indem ich auf ausführen klicke...so die eigentliche Idee.

Was bedeutet "auf Ausführen klicke" und "wann - jetzt"?

Ich verstehe noch nicht, was genau das Problem ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2018, 13:54     Titel:
  Antworten mit Zitat      
Hi Jan,

ich möchte einfach nur das Ergebnis eines Funktionsskripts als Input für ein anderes Funktionsskript nutzen und dabei die errechneten Ergebnisse im Workspace haben, mehr nicht.

Das mit dem
Zitat:
Da musst du ja irgendwo angeben wann du die "benutzen" möchtest.


Wegen dem "wann". Wie ist das gemeint?

Gruß
k123456
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 19.10.2018, 06:08     Titel:
  Antworten mit Zitat      
Hi,

du musst in deinem Matlab-Code die Funktionen ja irgendwann aufrufen. Mit dem "wann" ist dieser Aufruf in deinem m-file gemeint. Wie sieht der aus?

Du hast ja deine Funktion
Code:
function [y1,...,yN] = myfun(x1,...,xM)

Wobei "myfun" der Funktionsname ist, x1 ... nM die Funktionseingänge und y1... yN die Ausgabe deiner Funktion.
Wenn du jetzt innerhalb deines m-files deine Funktion aufrufst:
Code:
[e1,...,eK] = myfun(x1,...,xM)
 

Dann stehen deine Funktionsausgabe in e1...eK. Und dann stehen die damit auch im Workspace.

Rufst du eine Funktion innerhalb einer Funktion auf, musst du die Werte in der inneren Funktion erst an die erste zurückgeben und dann von dieser an den Workspace zurück geben. Dann hast du die auch im Workspace stehen.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
k123456
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2018, 08:40     Titel:
  Antworten mit Zitat      
Hi Jonas,

Zitat:
Rufst du eine Funktion innerhalb einer Funktion auf, musst du die Werte in der inneren Funktion erst an die erste zurückgeben und dann von dieser an den Workspace zurück geben. Dann hast du die auch im Workspace stehen.


Kannst du mir mit meinem Code bitte zeigen wie das aussieht?

Bei mir zeigt es zumindest schon mal die Werte der Wurzeln im Commad Window (immer noch nicht im Workspace) an, wenn ich in "found_roots" als globale Variable setze, auch wenn das von deinem Vorschlag abweicht.

Grüße
k123456
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.