在for循环中在MATLAB中定义符号函数

时间:2016-11-20 00:26:03

标签: matlab for-loop

假设我有以下向量

a = [1 2 3 4 5 6];
b = [6 8 7 4 2 5];

现在我需要创建一个符号函数f(x) = b.*x +a的向量,其中每个ab分别来自向量ab

for c = 1:length(a)
syms x
f(x) = b(1,c).*x + a(1,c);
fvector(1,c) = f;
end

但是,这不起作用,因为它似乎不能在for循环中创建符号函数。

我需要创建一个符号函数,如上例所示(不是完全相同的等式,但相似),需要得到fvector向量的每个条目的反函数。

还有另一种可行的方法吗?

1 个答案:

答案 0 :(得分:1)

我不确定你的目标究竟是什么,但是如果你提供了更多的上下文以及你期望的输入和输出示例可能会有所帮助。

此代码定义符号函数,并以相当一般(且效率低)的方式计算反函数。

a = [1 2 3 4 5 6];
b = [6 8 7 4 2 5];

syms x y
for c = 1:length(a)
    f = b(c).*x + a(c);
    fvector(c) = f;
    finv(1,c) = subs(solve(f==y, x),y,x);
end

输出

fvector =

[ 6*x + 1, 8*x + 2, 7*x + 3, 4*x + 4, 2*x + 5, 5*x + 6]


finv =

[ x/6 - 1/6, x/8 - 1/4, x/7 - 3/7, x/4 - 1, x/2 - 5/2, x/5 - 6/5]