是否有办法将函数变量更改为另一个变量?例如,如果我有函数:
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是如何存储匿名函数的。在调试时,这允许您查看与函数句柄相关的包袱(存储的工作区和内容)。
但是,对该结构的更改不会改变实际的函数句柄。我不知道如何从这个结构中生成一个新的函数句柄。
结束
[note #1已删除]
请不要这样做。