2016-03-23 4 views
2

Ich benutze Octave, aber um die Chancen auf eine Antwort zu erhöhen, würde ich alles versuchen, was von Matlab kommt.fplot Funktion mit mehreren Ein- und Ausgängen

Ich habe eine Funktion mehrere Werte zurückgegeben werden, wie es in

function [ a, b ] = myfunc(x, y) 
    a = 1; 
    b = 2; 
endfunction; 

Wie würde ich fplot b (x, 1)? Eigentlich wollte ich einen Ausdruck bekommen, der das direkt aufzeichnet. Jetzt kam ich zu dem Schluss, dass ich zuerst b extrahieren und dann plotten müsste. Ich habe eigentlich noch keinen Code dafür geschrieben, aber wenn es vermieden werden kann, würde ich es gerne tun.

Was ich konnte tun ist

x = 0 : 0.1 : 4; 
[ a, b ] = myfunc(x, 1); 
plot(x, b); 

aber ich frage mich, ob fplot etwas tun kann, in einer oder zwei Zeilen.

+0

es klingt ähnlich, dies zu: http://stackoverflow.com/q/36098404/97160. Wenn eine Funktion mehrere Variablen zurückgibt, müssen Sie sie "erhalten", es gibt keinen anderen Weg. Sie können diejenigen ignorieren, an denen Sie nicht interessiert sind, d. H. '[~, B] = myfunc (x, y)'. Natürlich, wenn sie am Anfang auftreten, können Sie einfach 'a = myfunc (x, y)' schreiben, in welchem ​​Fall 'b' nicht empfangen wird. Besser noch, Sie können Ihre Funktion ändern, um einen Vektor oder ein Zellenarray anstelle von separaten Variablen zurückzugeben, so nennen Sie es in Octave genau wie hbaders vorgeschlagen – Amro

+0

@Amro - Tatsächlich scheint der Link, den Sie gepostet haben, auf meine Frage zutreffen. Ich habe ursprünglich meine Funktion geschrieben, um einen Vektor zurückzugeben, aber in meinem speziellen Fall musste ich ihn ändern, um mehrere Werte zurückzugeben. Vielleicht kann ich das beheben, obwohl ich momentan nicht weiß, wie das geht, in meinem speziellen Fall (die Details gehören hier nicht dazu). Ich werde ein bisschen basteln, und wenn nötig, würde ich eine separate Frage dazu stellen. Auf jeden Fall ist es für mich nicht klar, wie ich die Antworten/Kommentare mit "fplot" kombinieren kann, was ein wichtiger Teil der Frage ist. –

+0

ehrlich gesagt, es ist es nicht wert, halten Sie einfach den Code, wie Sie jetzt in zwei separaten Aussagen haben. Es ist einfacher und leichter zu lesen, es muss nicht alles in einer Zeile sein! Verwenden Sie einfach "~", um unerwünschte Ausgaben zu ignorieren. – Amro

Antwort

3

Sie können Octaves nthargout verwenden, um einen bestimmten Rückgabewert zu erhalten. Das können Sie mit einem anonymous function kombinieren, um es an fplot zu übergeben.

fplot(@(x) nthargout(2, @myfunc, x, 1), [0 1]) 
+0

+1 weil ich 'nthargout' vorher nicht gesehen habe. Aber um klar zu sein, wenn man sich die Implementierung 'edit nthargout' anschaut, sieht man, dass es das tut, was wir gerade beschrieben haben, dass es alle Ausgabeargumente erhält und die angeforderte zurückgibt. Das Erfassen der Ausgaben kann entweder mit expliziten Variablen '[out1, out2, .., outN] = f()' erfolgen, oder bequemer mit einem Zellen-Array mit kommagetrennten Listen Syntax '[out {:}] = f () 'so dass es mit einer beliebigen Anzahl von Ausgängen funktioniert. – Amro

+0

Super! Ich habe es versucht und es hat funktioniert. –

Verwandte Themen