请问Julia的surface函数怎么用

今天我去CSDN查了查Julia线性回归的资料,发现还真的有大佬做出来了,
CSDN上的文章是: 梯度下降算法原理 线性回归拟合(附Python/Matlab/Julia代码)博主 zhanghaijun2013

在 julia二元函数的梯度下降程序那块的代码是这样的

using Plots
Plots.plotlyjs()
n = 50
x = range(-3, stop=3, length=n)
y= x
z = zeros(n,n)
for i in 1:n, k in 1:n
    z[i,k] = x[i]^2 + y[k]^2
end

surface(x, y, z)
dot = [[2 3]; [1.6 2.4]; [1.28 1.92]; [5.09e-10  7.64e-10]]
scatter!(dot[:,1], dot[:,2], dot[:,1].^2 .+ dot[:,2].^2)

这个surface我好想看不大懂,我好像只知道plot(x,y,z)是每个点(x,y,z)在三维空间上的显示,
但这个surface的z参数是一个二维数组,我就不能理解,请问这个应该怎么解释啊??
————————————————
版权声明:本文为CSDN博主「zhanghaijun2013」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhanghaijun2013/article/details/89530599

3维的图,打2维的网格,网格上一个(x,y)当然只对应一个z。

还是不怎么懂,能不能详细一点:yum:

这个有点难解释?
算是个习惯吧,打2维的网格,有两个坐标,相当于以x,y维坐标查取z的值,然后画图。所以z输入2维的。
当然这个貌似是从matlab带过来的,matlab就喜欢打网格。(matlab 喜欢 X,Y,Z 都是矩阵。。。)

surface(x,y,Z)surface(x,y,Z,C)
将前两个矩阵参数替换为向量,且必须具有 length(x) = nlength(y) = m ,其中 [m,n] = size(Z)
在这种情况下,曲面的各个面的顶点是三元素向量 (x(j),y(i),Z(i,j))
请注意, x 对应于 Z 的列, y 对应于 Z 的行。

—— 创建曲面对象 - MATLAB surface - MathWorks 中国

更符合正常人的是 (x,y,z) 按顺序打包输入画图,或者拆成三个向量画图。


你需要 plot(x, y, z, st = :surface)

大意差不多如下:

n = 10
x = y = rand(n)
z = rand(n, n)
for i in 1:n, j in 1:n
    println("draw x=$(x[i]), y=$(y[j]), z=$(z[i, j])")
end

# draw x=0.565478813193036, y=0.565478813193036, z=0.7428762101561557
# draw x=0.565478813193036, y=0.8192802000585657, z=0.4713840730035461
# draw x=0.565478813193036, y=0.3075661447702229, z=0.7767069165267733
# draw x=0.565478813193036, y=0.8683615731603089, z=0.4281866862414463
# draw x=0.565478813193036, y=0.49114260418206346, z=0.1869616493767352
# draw x=0.565478813193036, y=0.4461798434493758, z=0.9113807026783933
# draw x=0.565478813193036, y=0.336097791927805, z=0.7342003306098779
# draw x=0.565478813193036, y=0.4132317576019737, z=0.41036425062843795
# draw x=0.565478813193036, y=0.05038064646799789, z=0.8087604626249316
# draw x=0.565478813193036, y=0.8612303877823042, z=0.06905185461202223
# draw x=0.8192802000585657, y=0.565478813193036, z=0.601825669285899
# draw x=0.8192802000585657, y=0.8192802000585657, z=0.8124687859618567
# draw x=0.8192802000585657, y=0.3075661447702229, z=0.9442506035062506
# ...