将函数变量改为另一个变量MATLAB



是否有办法将函数变量更改为另一个变量?例如,如果我有函数:

f = @(s) exp(2-s)

我需要把它改成

f = @(t) exp(2-t)

不需要手动修改

与通常的警告,这是一个糟糕的想法:)让我们来点疯狂的

首先,我们可以使匿名函数f

f = @(s) exp(2-s)

对于一些示例使用,为了完整

f(1)     % 2.71828182845905
f(10)    % 0.000335462627902512

现在,将其保存到一个文件中,使用-v7.3标志强制使用H5文件类型

save('tempfile','f','-v7.3')

Matlab可以将此文件读取为数据。经过一番探索,我们可以看到该函数被存储为可求值的字符串,如下所示:

char(h5read('tempfile.mat','/f/function_handle/function'))
%  Returns 'sf%0@(s)exp(2-s)'

所以,它很容易改变,使用Matlab的H5写函数

h5write('tempfile.mat','/f/function_handle/function',uint16('sf%0@(x)exp(2-x)'))

让我们看看,它成功了吗?

clear f
load('tempfile.mat')

现在我们有下面的

f = 
function_handle with value:
@(x)exp(2-x)
f(1)   % 2.71828182845905
f(10)  % 0.000335462627902512

现在,我们可以使用functions函数,在没有文件保存业务的情况下看到大量这些数据。(元)

>> f = @(s) exp(2-s);
>> functions(f)
ans = 
struct with fields:
function: '@(s)exp(2-s)'
type: 'anonymous'
file: ''
workspace: {[1×1 struct]}
within_file_path: '__base_function'

这可以让您看到Matlab是如何存储匿名函数的。在调试时,这允许您查看与函数句柄相关的包袱(存储的工作区和内容)。

但是,对该结构的更改不会改变实际的函数句柄。我不知道如何从这个结构中生成一个新的函数句柄。


结束

  1. [note #1已删除]

  2. 请不要这样做。

最新更新