如何将此方程式转换为倍频程代码并绘图

时间:2019-05-11 19:31:34

标签: plot octave equation

我有一个在Desmos网站上创建的方程式

equation

我使用下面的代码尝试在Octave中重新创建它。但是当我绘制它时,结果就不同了。如何在Octave中修复代码(如果可能,不更改主方程式),使其看起来像Desmos图像?

Error: spawn cmd ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:249:19)
at onErrorNT (internal/child_process.js:442:16)
at processTicksAndRejections (internal/process/task_queues.js:84:9)
Emitted 'error' event at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:255:12)
at onErrorNT (internal/child_process.js:442:16)
at processTicksAndRejections (internal/process/task_queues.js:84:9)

Incorrect image / equation

PS:我正在使用Octave 4.2.2

2 个答案:

答案 0 :(得分:1)

Desmos.com并不绘制(x,eq1)而是绘制(x,y),其约束条件是x,y满足给定方程。因此,您需要为x的每个值求解y,然后绘制对(x,y)。
由于存在log(x),log(y),因此x和y> 0(否则,还必须绘制x <0)。

clear; clc;
x = linspace(0,1,150);

S = 13.2;
T = 1.12;

y = zeros(size(x));
for i = 1:length(x)
  y(i) = (1-exp(S*T*log(x(i))))^(1/S/T);
end
plot(x,y)  

注意:
1)我假设log(x)表示ln(x)(使用e为底的对数)。
2)我使用了150点更密集的离散化,以便绘制的曲线看起来更平滑。
3)在数学上,linspace(0,1,150)不起作用,因为未定义log(x = 0)。但是对于Matlab log(0) = -inf,这意味着exp(-inf) = 0。这就是为什么不会引发运行时错误的原因。 4)顺便说一下,所提供的方程式可以简化为x ^(ST)+ y ^(ST)= 1,且约束x,y>0。

答案 1 :(得分:1)

enter image description here

 S = 13.2;
 T = 1.12;
 f = @(x)exp(log(1-exp(S*T*log(x)))./(S*T));
 fplot(f, [0, 1])