我有一个符号表达向量和一个点向量。然后,我想获得一个向量,其中第一个元素是在第一个点求值的第一个符号函数,第二个是第二个点在第二个点的第二个函数的值,依此类推。我可以使用“ for”循环执行此操作
>> syms x
>> f=formula([x, x^2, x^3]);
>> a=[1, 2, 3];
>> ans=zeros(1,3);
>> for i=1:3
z(x)=f(i);
ans(i)=z(a(i));
end
>> ans
ans =
1 4 27
但是有办法避免循环吗?某种基于元素的评估?
提前致谢!
假设我们必须使用符号数学工具箱,这是对您的问题的另一个答案。首先,按常规创建公式:
syms x
f = formula([x, x^2, x^3);
然后,您可以使用subs
替换所需的值x
。subs
具有如下语法:
out = subs(f, val);
val
可以是您希望用公式替换变量的单个值,向量或值矩阵。如果要使用向量,将其指定为列向量很重要。稍后您会看到原因。
其背后的症结在于,对于x
您要用于替换的每个值,它将用替换整个公式x
。换句话说,如果您这样做了out = subs(f, [1;2;3]);
,这将输出一个矩阵,其中第一行包含x=1
,下一行包含,x=2
最后一行包含x=3
。如果您这样做了out = subs(f,[1 2 3]);
,这将为您提供一个9 x 1
向量,其中三个三个的每个都是该特定x
值的输出。
这并不是您想要的,但是当您将输入指定为列向量作为输出时,您可以简单地选择对角线上的所有元素,因为这将使i'th
元素中的元素与i'th
公式完全对应。
换一种说法:
A = (1:3).';
out = subs(f, A)
out =
[ 1, 1, 1]
[ 2, 4, 8]
[ 3, 9, 27]
finalOut = diag(out)
finalOut =
1
4
27
实际上,这是我无需使用for
循环即可看到此内容的唯一方法。请记住,这仅适用于单个向量。如果您希望使用实际double
值而不是将其表示为sym
,则需要使用强制转换输出double()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句