Accessing sinc(0) using the Symbolic Math Toolbox.

24 visualizaciones (últimos 30 días)
Atul Bansal
Atul Bansal el 26 de En. de 2017
Comentada: Paul el 22 de Nov. de 2024 a las 1:46
I have this code-
syms t;
sinc_function = symfun(sinc(t),t);
Now, sinc_function(0) gives an error message 'Division by zero' but the command sinc(0) gives me the correct value 1. I want to get the correct value from the sinc_function. How can I do this? It can be rectified by piecewise function, but I have the MATLAB 2015a version, so the piecewise function is not present there.

Respuesta aceptada

Walter Roberson
Walter Roberson el 26 de En. de 2017
The Symbolic Toolbox does not define a sinc() function. You are getting the purely numeric sinc() function from the signal processing toolbox. That function works by testing the input for 0 using logical indexing. Unfortunately when you pass in a symbolic variable, that is not equal to 0 (because it is a symbol, not 0), so no special handling is arranged for that case.
You will have to program around this.
You would not be able to use piecewise() even if you had R2016b, because symfun() cannot generate code for piecewise().
You will need to reconsider using sinc() in a symbolic function. For example, define
syms SINC(t)
and code in terms of SINC(t) without having defined SINC(t) anywhere. Call matlabFunction. You will get a warning about unknown function SINC, but it will be written into the handle. Then you bring SINC.m onto your path, defined as
function y = SINC(x)
y = sinc(x);
Now that is done, you can run the anonymous function you generated.
If your had SINC.m on the path at the time you did the matlabFunction, it would have called the function with the symbolic expression as parameter, leading to sin(t)/t being generated right in the code. But with SINC.m not on the path at the time of the matlabFunction, it just generates the name in the function handle, and then when you put it on the path and run the function handle it will find the SINC.m
  4 comentarios
Walter Roberson
Walter Roberson el 22 de Nov. de 2024 a las 0:27
sinc = @(x) sin(x ./ (x + (x == 0))) + (x == 0);
Paul
Paul el 22 de Nov. de 2024 a las 1:46
Signal Processing and Symbolic Math Toolboxes implement the normalized sinc function, so (also, the parentheses needed to be fixed)
nsinc = @(x) sin(pi*x) ./ (pi*x + (x == 0)) + (x == 0);
x = 0.4;
[nsinc(x),sinc(x),double(sinc(sym(x)))]
ans = 1×3
0.7568 0.7568 0.7568
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Symbolic Math Toolbox en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by