数学建模社区-数学中国

标题: 在MATLAB中传递变量:按值传递机制 [打印本页]

作者: 森之张卫东    时间: 2015-9-16 22:28
标题: 在MATLAB中传递变量:按值传递机制
在MATLAB中传递变量:按值传递机制
maltab程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,MATLAB将会复制实参生成一个副本,然后把它们传递给函数。这次复制是非常重要的,因为它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。这个特性防止了因函数修改变量而导致的意想不到的严重错误。
这一特性将在下面的函数中得到说明。这个函数中有两个输入参数:a和b。在它的计算中,它修改了变量的值:
function out = sample(a, b)
fprintf('In Sample: a = %f, b = %f %f\n',a,b);
a = b(1) + 2*a;
b = a .* b;
out = a + b(1);
fprintf('In Sample: a = %f, b = %f %f \n',a,b);

下面是调用这个函数的检测程序:
a = 2; b = [6 4];
fprintf('Before sample: a = %f, b = %f %f\n', a,b);
out = sample(a, b);
fprintf('After sample: a = %f, b = %f %f\n',a,b);
fprintf('After sample: out = %f \n', out);

当这个程序被执行将产生如下的结果:
>> test_sample
Before sample: a = 2.000000, b = 6.000000 4.000000
In Sample: a = 2.000000, b = 6.000000 4.000000
In Sample: a = 10.000000, b = 60.000000 40.000000
After sample: a = 2.000000, b = 6.000000 4.000000
After sample: out = 70.000000

注意,a和b在函数sample内都改变了,但这些改变对调用函数中的值并没有任何的影响。
C语言的使用者对按值传递机制比较熟悉,因为C应用它把标量值传递给函数。尽管C语言不能用按值传递机制传递数组,所以对在C语言函数中的形参数组进行意想不到的修改将会导致在调用程序时产生错误。
MATLAB改进了按值传递机制,既适于标量,又适应于数组(在MATLAB中参数传递过程中的执行要远比上面讨论中指出的要复杂的多。正如上面指出的,与按值传递相联系的复制将花去大量的时间,但是保护程序以至于不产生错误。实际上,MATLAB用了两种方法,它先对函数的每一个参数进行分析,确定函数的那些参数进行了修改。如果函数没有修改这个参数,它将不会对此参数进行复制,而是简单地指向程序外面的外面的变量,如果函数修改了这个参数,那么这个复制就会被执行)。









欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5