Ich habe eine Funktion F, die als ein Vektor ein nimmt. Sowohl der Ausgang der Funktion als auch a sind Vektoren der Länge N, wobei N beliebig ist. Jede Komponente F n ist von der Form g (a (n), ein (n-k)), wo g das gleiche für jede Komponente ist.Verwenden Sie symbolische Matlab für flexible Anzahl von Argumenten und Funktionen
Ich möchte diese Funktion in Matlab mit seiner symbolischen Funktionalität zu implementieren und berechnen Sie seine Jacobi (und speichern Sie dann sowohl die Funktion und seine Jacobi als eine normale. M-Datei mit matlabFunction
). Ich weiß, wie man das für eine Funktion macht, bei der jede Eingabe ein Skalar ist, der manuell gehandhabt werden kann. Aber hier möchte ich ein Skript, das in der Lage ist, diese Dateien für jedes N zu produzieren. Gibt es einen schönen Weg, dies zu tun?
Eine Lösung, die ich gefunden habe, besteht darin, ein Array von Strings "a0", "a1", ..., "aN" zu generieren und jede Komponente der Ausgabe mit eval
zu definieren. Aber das ist unordentlich und ich frage mich, ob es einen besseren Weg gibt.
Vielen Dank!
[EDIT]
ist hier ein minimales Arbeitsbeispiel meiner aktuellen Lösung:
function F = F_symbolically(N)
%generate symbols
for n = 1:N
syms(['a',num2str(n)]);
end
%define output
F(1) = a1;
for n = 2:N
F(n) = eval(sprintf('a%i + a%i',n,n-1));
end
Bitte fügen Sie Beispielcode in Ihre Frage ein, um Ihr Problem zu demonstrieren, entweder eine Version für eine feste Anzahl von Argumenten oder Ihre 'eval' Lösung. Ich bin mir sicher, dass es besser gemacht werden kann, aber ich weiß nicht, ob ich Komma-getrennte Listen erklären muss, wie die symbolische Toolbox mit Vektoren oder beiden arbeitet. – Daniel
[Verwenden Sie keine dynamischen Variablennamen] (http://StackOverflow.com/a/32467170/5211833) es ist schlecht. MATLAB hat mehrere Datencontainerformate, die für diese Aufgabe sehr geeignet sind, wie Strukturen. – Adriaan
kennen Sie die Syntax: 'a = sym ('a', [1 N])', die dann als 'a (i)' zugegriffen werden kann? – Amro