Matlab - 尝试使用Matlab数值函数和ezplot获得相同的曲线

时间:2018-01-13 22:38:00

标签: matlab plot

我有以下符号功能:

f(x)=(2*5^(1/2)*atanh((5^(1/2)*x)/150))/3 - 100/x

如果我用它绘图:

figure(2);
vMax=150/5^(1/2);
ezplot('(2*5^(1/2)*atanh(x/vMax)/3 - 100/x',[0.1, vMax]);
axis([0.1 150/5^(1/2) 0 3]);
view([90 -90]);

我得到了下图:

ezplot figure

正如您在view(90 -90])看到的那样,我反转(Ox)和(Oy)轴:这是因为我想绘制上面解析表达式的反函数。

现在,我想找到相同的情节但是有数值。为此,我做了:

syms f x;
f=(2*5^(1/2)*atanh((5^(1/2)*x)/150))/3 - 100/x;
ht=matlabFunction(f);

vMax=150/5^(1/2);
% Speed array
v_start=0.1;
step=0.0001;
v_final=vMax;
% Construct array vNew
vNew=v_start:step:v_final;
%Plot results : Speed vs Time
figure(1);
plot(vNew,ht(vNew));
axis([0 vMax 0 3]);
view([90 -90]);

使用此代码段,我得到下图:

numerical function

在这里,我不明白两件事:

  1. 第二条曲线(第一条曲线的顶部)来自哪里?
  2. 启动此脚本后,我收到以下警告:
  3. 警告:忽略复杂X和/或Y参数的虚部

    行:plot(vNew,ht(vNew));

    我知道atanh-infty < x < -1的{​​{1}}函数会显示复数,但就我而言,我已经采取了:

    1 < x < +infty

    0.1/vMax <= x/vMax <= 1 ,间隔为vMax = 150/5^(1/2),在此范围内,[0.1/vMax,1]具有实际值。

    从逻辑上讲,执行命令时我不应该找到复杂的值:

    atanh(x/vMax)

    如果有人可以帮我找到关于这两件事的解释。

    更新1:错误已修复,因为我超出了范围-1&lt; x&lt; 1通过plot(vNew,ht(vNew));进行计算以及vMax=150/(5^(1/2))+20,即两者之间存在冲突。

    由于

0 个答案:

没有答案