Matlab 3d绘图自定义功能

时间:2017-10-04 13:17:51

标签: matlab function plot 3d

我是Matlab的新手,我遇到了这个问题: 我有一个函数,它接受3个双精度作为参数并输出一个双精度,例如:

function l = myFunct(a,b,c)
    l = a^2*b^2 + (2*(c^2 - b) / (a - sqrt(c)))
end

现在,我需要为间隔绘制此函数的结果: a = b = [0.1,3],同时保持c = 2。

我设法为单个变量的2d绘图执行此操作,但不是为3d ...

R = 0:0.01:2;
fun = @(x) myFunct(0.2, x, 3);
B = arrayfun(fun,R);
plot(R, B);

你能帮忙解释一下吗?

2 个答案:

答案 0 :(得分:0)

您确实可以使用meshgridndgrid来创建两个网格数组。 AB。然后,如果您的函数没有矢量化,则需要循环遍历AB的条目。要同时循环两个,您可以使用arrayfun。最后,您可以使用surfimagesc进行投标。

[A,B] = ndgrid(1.4:0.0001:1.44, -1:.01:3);
Z = arrayfun(@(a,b) myFunct(a,b,2), A, B);
surf(A,B,Z,'edgecolor','none')

enter image description here

答案 1 :(得分:0)

我终于解决了它:

V = 2;

[X,Y] = meshgrid(0.1:0.1:3);
Z = myFunct(X,Y,X*0+V);

figure
surf(X,Y,Z);

感谢大家的回复。