拜托,我尝试了很多方法在Scilab中用3D绘制函数f(x,y)=(x*y)/(x^2 + y^2)
,但我做不到。
我目前的代码:
clearglobal
funcprot(0)
function z=f(x,y)
f(x,y)=(x*y)/(x^2 + y^2)
x=-10:10
y=-10:10
disp([(x,y),z])
endfunction
plot3d(z)
当前错误:
plot3d: Wrong size for input argument #1.
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
您的代码中存在两个重大错误。
定义函数的语法是:
function output = function_name(arguments)
//computations go here
output = ...(something)...
endfuncfion
然后您可以这样调用它:var_A = function_name(2)
,然后var_A
会在参数为2时存储function_name()
的输出。
您的功能将正确定义如下:
function z = f(x,y)
z = (x*y)/(x^2 + y^2)
endfunction
您不应像x
和y
f()
内那样重新定义x=-10:10
和y=-10:10
内的f()
和plot3d()
。你实际上可以做到,但我想这不是你想要的。
f()
当您将z
的输出命名为z
时,并不意味着您已经拥有z
个值。它也并不意味着已经存在一个名为plot3d()
的变量。他们的代码方式是,您使用未存在的变量作为参数调用var_A
。
运行代码后,输出的名称并不重要。记住我在上面给出的z
示例:您需要编写一个运行该函数的代码,并创建一个名为x
的变量来存储您想要的值。
也许您认为如果您在y
的实施中分配f()
和z
的值,f()
值会自动计算,但是'而不是编程语言通常如何工作。
现在,在纠正了x
后,您可以制作一张真实的曲面图:
y
和f()
的值。应该是矢量(列或行矩阵)。m
。此循环的结果将是n
- by - m
矩阵,其中x
是n
和y
的长度,{{{}}的长度1}}; plot3d(x,y,z)
。请注意,您已经通过了x
和y
,而不仅仅是z
。这个完整的代码应该可以工作:
function z=f(x,y)
z=(x*y)/(x^2 + y^2);
endfunction
x = -10:10;
y = -10:10;
for i = 1 : length(x)
for j = 1 : length(y)
z(i,j) = f(x(i), y(j));
end
end
plot3d(x,y,z);
图形输出为: