matlab中的persistent类型变量

MATLAB中的persistent变量是局部于函数的,但其值在函数多次调用间保持。它们不同于全局变量,因为persistent变量只对其声明的函数可见。首次声明时若变量不存在,则初始化为空矩阵。清除或修改内存中的函数会清除所有persistent变量。示例中展示了如何使用persistent变量优化读写文件操作,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

persistent - Define persistent variable

Syntax

persistent X Y Z

Description

persistent X Y Z defines X, Y, and Z as variables that are local to the function in which they are declared; yet their values are retained in memory between calls to the function. Persistent variables are similar to global variables because the MATLAB software creates permanent storage for both. They differ from global variables in that persistent variables are known only to the function in which they are declared. This prevents persistent variables from being changed by other functions or from the MATLAB command line.

Whenever you clear or modify a function that is in memory, MATLAB also clears all persistent variables declared by that function. To keep a function in memory until MATLAB quits, use mlock.

If the persistent variable does not exist the first time you issue the persistent statement, it is initialized to the empty matrix.

It is an error to declare a variable persistent if a variable with the same name exists in the current workspace. MATLAB also errors if you declare any of a function's input or output arguments as persistent within that same function. For example, the following persistent declaration is invalid:

function myfun(argA, argB, argC)
persistent argB

Remarks

There is no function form of the persistent command (i.e., you cannot use parentheses and quote the variable names).

Example

This function writes a large array to a spreadsheet file and then reads several rows from the same file. Because you only need to write the array to the spreadsheet one time, the program tests whether an array can be read from the file and, if so, does not waste time in repeating that task. By defining the dblArray variable as persistent, you can easily check whether the array has been read from the spreadsheet file.

Here is the arrayToXLS function:

function arrayToXLS(A, xlsfile, x1, x2)
persistent dblArray;

if isempty(dblArray) 
    disp 'Writing spreadsheet file ...'
    xlswrite(xlsfile, A);
end

disp 'Reading array from spreadsheet ...'
dblArray = xlsread(xlsfile, 'Sheet1', [x1 ':' x2])
fprintf('\n');

Run the function three times and observe the time elapsed for each run. The second and third run take approximately one tenth the time of the first run in which the function must create the spreadsheet:

largeArray = rand(4000, 200);

tic,  arrayToXLS(largeArray, 'myTest.xls','E254', 'J256'),  toc
Writing spreadsheet file ...
Reading array from spreadsheet ...
dblArray =
    0.0982    0.3783    0.1264    0.7880    0.1902    0.5811
    0.2251    0.2704    0.5682    0.7271    0.8028    0.2834
    0.6453    0.5568    0.8254    0.4961    0.9096    0.5402

Elapsed time is 8.990525 seconds.


tic,  arrayToXLS(largeArray, 'myTest.xls','E257', 'J258'),  toc
Reading array from spreadsheet ...
dblArray =
    0.4620    0.3781    0.6386    0.5930    0.0946    0.4865
    0.1605    0.1251    0.8709    0.5188    0.6702    0.2138

Elapsed time is 0.912534 seconds.


tic,  arrayToXLS(largeArray, 'myTest.xls','E259', 'J262'),  toc
Reading array from spreadsheet ...
dblArray =
    0.7015    0.6588    0.4023    0.0359    0.4512    0.6097
    0.1308    0.6441    0.0431    0.6396    0.7481    0.8688
    0.8278    0.2686    0.5475    0.8550    0.5896    0.1080
    0.9437    0.1671    0.0505    0.1203    0.2461    0.7306

Elapsed time is 0.928843 seconds.

Now clear the arrayToXLS function from memory and observe that running it takes much longer again:

clear functions

tic,  arrayToXLS(largeArray, 'myTest.xls','E263', 'J264'),  toc
Writing spreadsheet file ...
Reading array from spreadsheet ...
dblArray =
    0.6292    0.7788    0.0732    0.6481    0.9299    0.8631
    0.7700    0.5181    0.9805    0.5092    0.8658    0.4070

Elapsed time is 7.603461 seconds.
这种类型的变量和c语言中的静态变量相类比,都具有全局的性质,但要使用这个变量仅限于申明该变量类型的m文件内,也就是其他的文件和函数无法调用该变量,该变量在m文件在内存中注销或者发生变化时被注销。
 
阅读(1165) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值