"Error Inconsistent Assumptions" only when nesting symbolic functions.

6 visualizaciones (últimos 30 días)
Tomas Votroubek
Tomas Votroubek el 2 de Oct. de 2020
Editada: Torsten el 7 de Abr. de 2025
I do not understand why nesting one symbolic function (nchoosek) in another (user defined symbolic function) causes an error upon evaluation.
Why does the following assignment and evaluation work without error, when the "equivalent" function evaluation causes an "inconsistent assumption error"?
syms f(x, n)
f(x, n) = symsum(nchoosek(n, k), k, x, n);
% Incorrect range!
x = 2;
n = 1;
% The inner function works fine, when assigning variables manually,
symsum(nchoosek(n, k), k, x, n)
% but evaluating f directly does not work?
f(x, n)
The output is:
ans =
0
Error using symengine
Inconsistent assumptions.
Error in sym/subs>mupadsubs (line 160)
G = mupadmex('symobj::fullsubs',F.s,X2,Y2);
Error in sym/subs (line 145)
G = mupadsubs(F,X,Y);
Error in symfun/feval>evalScalarFun (line 42)
y = subs(formula(Ffun), Fvars, inds);
Error in symfun/feval (line 28)
varargout{1} = evalScalarFun(F, Fvars, varargin);
Error in symfun/subsref (line 175)
B = feval(A, inds{:});
Error in testing (line 9)
f(x, n)
Thank you

Respuestas (1)

sanidhyak
sanidhyak el 7 de Abr. de 2025
Editada: Torsten el 7 de Abr. de 2025
I understand that you are encountering the “Inconsistent assumptions” error when evaluating a symbolic function that nests symsum and nchoosek” functions in MATLAB.
The root cause here is that symbolic variables x and n are being redefined as numeric values after defining a symbolic function f(x, n). This causes inconsistency when evaluating the function, as MATLAB expects symbolic inputs for symfun” functions.
To resolve this issue, please avoid overwriting symbolic variables directly. Instead, use subs() to evaluate your symbolic function with numeric values.
Kindly refer to the corrected code below:
syms x n k
f(x, n) = symsum(nchoosek(n, k), k, x, n); % Define symbolic function
% Evaluate using subs instead of assigning numeric values directly
result = subs(f(x, n), [x, n], [2, 1]);
disp(result);
0
The subs() function substitutes the numeric values safely into the symbolic function without conflicting assumptions. This method ensures proper evaluation and avoids the “Inconsistent assumptions” error.
For more information, you can refer to MATLAB’s documentation on symbolic functions:
I hope this helps!

Productos


Versión

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by