Accessing sinc(0) using the Symbolic Math Toolbox.
24 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Walter Roberson
2017 年 1 月 26 日
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 件のコメント
Walter Roberson
2024 年 11 月 22 日 0:27
sinc = @(x) sin(x ./ (x + (x == 0))) + (x == 0);
Paul
2024 年 11 月 22 日 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)))]
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Symbolic Math Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!