Scilab:在3D中绘制2个变量的函数

时间:2017-11-20 04:53:58

标签: scilab

拜托,我尝试了很多方法在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.

任何帮助都将受到高度赞赏。

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

您不应像xy f()内那样重新定义x=-10:10y=-10:10内的f()plot3d()。你实际上可以做到,但我想这不是你想要的。

您必须将实际值提供给f()

当您将z的输出命名为z时,并不意味着您已经拥有z个值。它也并不意味着已经存在一个名为plot3d()的变量。他们的代码方式是,您使用未存在的变量作为参数调用var_A

运行代码后,输出的名称并不重要。记住我在上面给出的z示例:您需要编写一个运行该函数的代码,并创建一个名为x的变量来存储您想要的值。

也许您认为如果您在y的实施中分配f()z的值,f()值会自动计算,但是'而不是编程语言通常如何工作。

现在,在纠正了x后,您可以制作一张真实的曲面图:

  1. 定义yf()的值。应该是矢量(列或行矩阵)。
  2. 使用循环为每个可能的对(x,y)运行m。此循环的结果将是n - by - m矩阵,其中xny的长度,{{{}}的长度1}};
  3. 致电plot3d(x,y,z)。请注意,您已经通过了xy,而不仅仅是z
  4. 这个完整的代码应该可以工作:

    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);
    

    图形输出为:

    1