线性变换函数句柄
Linear transformation function handle
假设我将元胞数组 P 中的勒让德多项式作为函数句柄。现在我使用线性变换 x = 2/3*t-1。现在我想获得一个具有转换函数句柄的元胞数组 Q。
所以 P = [1, @(x) x, 1/2*(3*x^2-1),...] 到 Q = [1,@(t) 2/3*t-1,.. .]
谢谢!
假设你有 Symbolic Toolbox,你可以这样做:
- 将匿名函数元胞数组转换为字符串元胞数组
- 使用
subs
. This produces symbolic objects 作为输出来更改变量。
- 使用
matlabFunction
将符号对象转换为匿名函数:
代码:
P = {@(x) 1, @(x) x, @(x) 1/2*(3*x^2-1)}; %// data
f = cellfun(@func2str, P, 'uniformoutput', 0); %// step 1
Q = arrayfun(@(k) matlabFunction(subs(f{k}(5:end), 'x', '2/3*t-1')), 1:numel(P),...
'uniformoutput', 0); %// steps 2 and 3.
%// Note that the "(5:end)" part is used for removing the initial "@(x)"
%// from the string obtained from the function
本例中的结果:
Q{1} =
@()1.0
Q{2} =
@(t)t.*(2.0./3.0)-1.0
Q{3} =
@(t)(t.*(2.0./3.0)-1.0).^2.*(3.0./2.0)-1.0./2.0
也可以在基础 MATLAB 中完成:您只需将多项式的匿名函数与变换函数组合起来即可。在编写解决方案之前,我想指出您的帖子不一致:您谈论的是函数句柄的元胞数组,但您使用矩阵表示法进行定义。
代码:
%// The original polynomials
P = {@(x) 1, @(x) x, @(x) 1/2*(3*x^2-1)};
%// The transformation function
x = @(t)2/3*t-1;
%// The composition
Q = cellfun(@(f) @(t)f(x(t)), P, 'UniformOutput', false );
结果将是一个函数元胞数组,将执行以下操作:
x == 1 --> t == 3
P{2}(1) --> 1
Q{2}(3) --> 1
假设我将元胞数组 P 中的勒让德多项式作为函数句柄。现在我使用线性变换 x = 2/3*t-1。现在我想获得一个具有转换函数句柄的元胞数组 Q。 所以 P = [1, @(x) x, 1/2*(3*x^2-1),...] 到 Q = [1,@(t) 2/3*t-1,.. .]
谢谢!
假设你有 Symbolic Toolbox,你可以这样做:
- 将匿名函数元胞数组转换为字符串元胞数组
- 使用
subs
. This produces symbolic objects 作为输出来更改变量。 - 使用
matlabFunction
将符号对象转换为匿名函数:
代码:
P = {@(x) 1, @(x) x, @(x) 1/2*(3*x^2-1)}; %// data
f = cellfun(@func2str, P, 'uniformoutput', 0); %// step 1
Q = arrayfun(@(k) matlabFunction(subs(f{k}(5:end), 'x', '2/3*t-1')), 1:numel(P),...
'uniformoutput', 0); %// steps 2 and 3.
%// Note that the "(5:end)" part is used for removing the initial "@(x)"
%// from the string obtained from the function
本例中的结果:
Q{1} =
@()1.0
Q{2} =
@(t)t.*(2.0./3.0)-1.0
Q{3} =
@(t)(t.*(2.0./3.0)-1.0).^2.*(3.0./2.0)-1.0./2.0
也可以在基础 MATLAB 中完成:您只需将多项式的匿名函数与变换函数组合起来即可。在编写解决方案之前,我想指出您的帖子不一致:您谈论的是函数句柄的元胞数组,但您使用矩阵表示法进行定义。
代码:
%// The original polynomials
P = {@(x) 1, @(x) x, @(x) 1/2*(3*x^2-1)};
%// The transformation function
x = @(t)2/3*t-1;
%// The composition
Q = cellfun(@(f) @(t)f(x(t)), P, 'UniformOutput', false );
结果将是一个函数元胞数组,将执行以下操作:
x == 1 --> t == 3
P{2}(1) --> 1
Q{2}(3) --> 1