我有一个在Desmos网站上创建的方程式
我使用下面的代码尝试在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)
PS:我正在使用Octave 4.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)