Optimization 使用“Plots.jl”在三维空间中将二维函数绘制为曲面`

Optimization 使用“Plots.jl”在三维空间中将二维函数绘制为曲面`,optimization,plot,julia,surface,plots.jl,Optimization,Plot,Julia,Surface,Plots.jl,使用Plots.jl打印时出现以下问题。我喜欢画rosenbrock函数 rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2 作为曲面,它需要一个2d元组{Float64,Float64}作为输入 我能想到的是: using Plots gr() rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2 ts = linspace(-1.0, 1.0, 100) x

使用
Plots.jl
打印时出现以下问题。我喜欢画rosenbrock函数

rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
作为曲面,它需要一个2d
元组{Float64,Float64}
作为输入

我能想到的是:

using Plots
gr()

rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2

ts = linspace(-1.0, 1.0, 100)
x = ts
y = map(rosenbrock, [(x, z) for (x,z) in zip(ts,ts)])
z = map(rosenbrock, [(x, y) for (x,y) in zip(ts,ts)])
# plot(x, x, z)
plot(x, y, z, st = [:surface, :contourf])
由此得出这幅图:

我想我弄乱了一些维度,但我不知道我弄错了什么


我是否必须为
y
x
嵌套映射的计算才能得到结果?

在对我发现的Rosenbrock函数进行快速调查之后,如果我错了,请纠正我,但您需要指定
y
-向量,您不应该将其嵌套在
z
或类似的范围内 其他人尝试了与图中所示相同的方法,但使用了绘图

解决方案如下Patrick Kofod Mogensen所做

using Plots

function rosenbrock(x::Vector)
  return (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
end

default(size=(600,600), fc=:heat)
x, y = -1.5:0.1:1.5, -1.5:0.1:1.5
z = Surface((x,y)->rosenbrock([x,y]), x, y)
surface(x,y,z, linealpha = 0.3)
这导致

旁注


我很高兴我搜索了这个,因为我一直在为Julia搜索一个3D绘图仪,而不是PyPlot(因为为我的程序的用户设置它可能有点麻烦),它甚至看起来更好,而且图像可以旋转。

我建议您尽量把问题框得更清楚一些,我不知道你想做什么,也不知道问题是什么is@isebarn我已经更新了这个问题。我喜欢把函数画成曲面,但我不知道怎么做。非常感谢!
Surface(),Surface()
语法使事情变得更简单。您使用了哪些backand和color道具?这看起来(从字体上)像PyPlot后端。