A bug of function fplot (the figure is inconsistent with the one got by 'plot')
1 次查看(过去 30 天)
显示 更早的评论
syms t_d % input variable
% the expression I would like to plot↓
f(t_d)=((6848549883207071*t_d)/70368744177664 + 619810600876641/147573952589676412928)/((6848549883207071*t_d)/35184372088832 - (exp(-6000000000000*t_d)*(6000000000000*t_d - exp(6000000000000*t_d) + 1))/60000 - (4102889305024308125000000*exp(-(7843586636568035*t_d)/16384)*((7843586636568035*t_d)/16384 - exp((7843586636568035*t_d)/16384) + 1))/2460874053013946398635327350449 + 619810600876641/73786976294838206464);
t_d_lb=0; % lower bound of t_d
t_d_ub=6e-10; % upper bound of t_d
order_t_d_lb=floor(log10(t_d_ub));
t_d_axis=t_d_lb:10^(order_t_d_lb-3):t_d_ub;
figure();% the left figure
plot(t_d_axis,f(t_d_axis));% the left figure
figure();% the right figure
fplot(f(t_d),[t_d_lb t_d_ub]); % the right figure
I often use ‘fplot’ to get the figure of an expression, but today I’ve got different curves plotted by function ‘fplot’ and ‘plot’. As the figure shown below, the left one is got by plugging in sampled inputs and drawn by ‘plot’, which is correct. However, the curve seems disappear at t_d=1.3e-10 at the right figure. I’ve checked the expression value at t_d=1.3e-10/1.6e-10/2e-10, etc, and I can make sure the left figure, which is got using ‘plot’, is correct.
Could anyone tell me if there’s a bug with ‘fplot’, and why there’s a dashed line in the right figure? What should I do to make ‘fplot’ work properly?
0 个评论
采纳的回答
Walter Roberson
2020-7-24
You are correct. The bug is somewhere inside
toolbox/matlab/graphics/function/+matlab/+graphics/+function/@ParameterizedFunctionLine/ParameterizedFunctionLine.p
Work-around:
nF = feval(symengine, 'normal', f);
fplot(nF, [t_d_lb t_d_ub])
4 个评论
Walter Roberson
2020-7-24
I did a bunch of fplot() with smaller intervals, reading off from the graphs to see what new limits I could use.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!