Accessing sinc(0) using the Symbolic Math Toolbox.
24 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Atul Bansal
am 26 Jan. 2017
Kommentiert: Paul
am 22 Nov. 2024 um 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.
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 26 Jan. 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 Kommentare
Walter Roberson
am 22 Nov. 2024 um 0:27
sinc = @(x) sin(x ./ (x + (x == 0))) + (x == 0);
Paul
am 22 Nov. 2024 um 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)))]
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!