In MATLAB möchte ich eine anonyme Funktion, die eine bestimmte Summe enthält, und eine andere anonyme Funktion darin definieren. Hier ist ein MWE die hoffentlich beschreibt, was ich zu tun versucht:MATLAB: Verwenden Sie eine anonyme Funktion innerhalb von symsum, dann fsolve
clear; n=1; syms j; a=0; b=sqrt(0.5);
Finv = @(x) logninv(x,a,b);
fun = @(x) 0.5-symsum(Finv(j*x), j, 1, n+1);
fsolve(fun,0.1)
Der Fehler zurückgegeben:
Fehler symfun mit> validateArgNames (Linie 211) Zweiter Eingang muss ein Skalar oder Vektor eindeutige symbolische Variablen.
Fehler in Symfun (Zeile 45) y.vars = validateArgNames (Eingaben);
Fehler in sym/subsasgn (Zeile 762) C = symfun (B, [inds {:}]);
Fehler in logninv (Zeile 60) p (p < 0 | 1 < p) = NaN;
Fehler in @ (x) logninv (x, a, b)
Fehler in @ (x) 0,5-symsum (Finv (j * x), j, 1, n + 1)
Fehler in fsolve (Zeile 217) fuser = feval (funfcn {3}, x, varargin {:});
Ursache: Fehler bei der ersten vom Benutzer gelieferten objektiven Funktionsbewertung. FSOLVE kann nicht fortsetzen.
Für diese besondere Auswahl an Finv
Ich löste es eval
und feval
wie folgt verwendet:
clear; n=1; syms j; a=0; b=sqrt(0.5);
Finv = @(x) logninv(x,a,b);
fun = @(x) 0.5-eval(symsum(feval(symengine,'logninv',j*x,a,b), j, 1, n+1));
fsolve(fun,0.1)
, die die Antwort in diesem speziellen Fall erzeugt, weil [email protected](x) logninv(x,a,b)
, aber den Punkt besiegt, die das I möchte Finv
als univariate Funktion meiner Wahl definieren können, nicht unbedingt einen vordefinierten MuPAD-Ausdruck wie 'logninv'
.
Jeder Rat würde am meisten geschätzt werden.
Gibt es einen Grund, symbolische Mathematik zu verwenden? Verwenden Sie statt Summe Summe statt – Daniel
Argh! Du hast recht. Dies löst es leicht: 'Spaß = @ (x) 0,5-Summe (Finv ([1: n + 1] * x));' Danke. – dwarf102