Accessing sinc(0) using the Symbolic Math Toolbox.
21 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Atul Bansal
il 26 Gen 2017
Commentato: Paul
il 22 Nov 2024 alle 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 Commenti
Risposta accettata
Walter Roberson
il 26 Gen 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 Commenti
Walter Roberson
il 22 Nov 2024 alle 0:27
sinc = @(x) sin(x ./ (x + (x == 0))) + (x == 0);
Paul
il 22 Nov 2024 alle 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)))]
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Symbolic Math Toolbox in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!