Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 执行函数';s工作区是否复制变量输入?_Matlab_Function_Workspace - Fatal编程技术网

Matlab 执行函数';s工作区是否复制变量输入?

Matlab 执行函数';s工作区是否复制变量输入?,matlab,function,workspace,Matlab,Function,Workspace,我在基本工作区中定义了一个变量 a=一(10) 我想创建一个函数,输入向量vec1,并返回vec2: function vec2 = myfun(vec1) Operations with vec1 end 让我们做 b = myfun(a); 在myfun的工作区中,我们将有一个名为vec1的变量,该变量的值与a相同,但它不在基本工作区中 处于调试模式并使用 dbup; 我可以在base和myfun工作区中分别看到两个不同的变量a和vec1 myfun是否在两个不同的工作空间中复制变

我在基本工作区中定义了一个变量

a=一(10)

我想创建一个函数,输入向量
vec1
,并返回
vec2

function vec2 = myfun(vec1)

Operations with vec1

end
让我们做

b = myfun(a);
myfun
的工作区中,我们将有一个名为
vec1
的变量,该变量的值与
a
相同,但它不在基本工作区中

处于调试模式并使用

dbup;
我可以在base和myfun工作区中分别看到两个不同的变量
a
vec1

myfun
是否在两个不同的工作空间中复制变量a(从而使用更多内存)

如果不是这样,它是如何工作的?是指针为同一信息指定了两个不同的名称吗


提前感谢。

MATLAB使用一种通常称为“写入时复制”的系统,以避免在函数工作区内复制输入参数,直到或除非您修改输入参数。如果不修改输入参数,MATLAB将避免复制。例如,在此代码中:

function y = functionOfLargeMatrix(x) 
     y = x(1);
MATLAB不会在大矩阵的
functionOfLargeMatrix
的工作区中复制输入,因为该函数中没有更改
x
。另一方面,如果调用此函数:

function y = functionOfLargeMatrix2(x) 
      x(2) = 2;  
      y = x(1);

然后在大矩阵x2的
函数的工作区内修改
x
,因此必须制作一份副本。

不用担心。这是一个伟大、简单、准确的答案。干得好