0

我正在尝试在 IJulia 笔记本上使用 PyPlot 绘制函数,但我不断收到错误消息。

当我运行这段代码时:

function gtest2(x)
    6.34*(log2(1+exp(10.0*(x+0.5))))^0.8
end

using PyPlot
 x = -1.0:0.1:1.0;
plot(x, gtest2(x));

我得到了这样的错误:

MethodError: no method matching ^(::Array{Float64,1}, ::Float64) 最接近的候选是: ^(::Float64, ::Float64) at math.jl:355 ...

gtest2(x::Number)我在使用or定义我的函数时尝试定义不同类型的变量,gtest2(x::Float64)但我有相同的错误。

它使用linespace而不是做同样的事情-1.0:0.1:1.0。我知道函数在输入中看到的格式与定义不匹配,但我不明白我做错了什么,因为简单的函数可以工作:

function f(x)
    x
end
plot(x,f(x))

为什么在第一种情况下会出现这些错误?

我在 safari 上使用 IJulia notebook 0.5.1。

4

2 回答 2

3

您的代码无法正确处理向量,因此您需要gtest 使用.向量化语法进行更改

function gtest2(x)
    6.34*(log2.(1 + exp.(10.0*(x + 0.5)))).^0.8
end

甚至更容易使用点矢量化,如下所示

plot(x, gtest2.(x));

要了解有关点矢量化的更多信息,请参阅文档中的以下内容:https ://docs.julialang.org/en/latest/manual/functions.html#man-vectorized-1

于 2017-05-13T00:49:13.663 回答
0

第一个定义也适用于:

map(gtest2, x)

或者

gtest2.(x)
于 2017-05-14T14:36:35.227 回答