我是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);
你能帮忙解释一下吗?
答案 0 :(得分:0)
您确实可以使用meshgrid
或ndgrid
来创建两个网格数组。 A
和B
。然后,如果您的函数没有矢量化,则需要循环遍历A
和B
的条目。要同时循环两个,您可以使用arrayfun
。最后,您可以使用surf
或imagesc
进行投标。
[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')
答案 1 :(得分:0)
我终于解决了它:
V = 2;
[X,Y] = meshgrid(0.1:0.1:3);
Z = myFunct(X,Y,X*0+V);
figure
surf(X,Y,Z);
感谢大家的回复。