Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为符号数组中特定索引中的符号赋值_Matlab_Symbolic Math - Fatal编程技术网

Matlab 为符号数组中特定索引中的符号赋值

Matlab 为符号数组中特定索引中的符号赋值,matlab,symbolic-math,Matlab,Symbolic Math,我正在创建一个符号变量矩阵(a),然后使用该矩阵中的变量(X)创建一个表达式。我打算在a中的特定索引中设置符号的值(例如,在我的代码中,我确实a(1,1)=11),然后我希望该值反映在表达式中。但是,当我执行subs(X)时,我发现符号没有被替换。我有什么办法可以做到这一点吗 以下是我正在尝试的: >> A = sym('X', [2 2]) A = [ X1_1, X1_2] [ X2_1, X2_2] >> X = A(1,1)*10 + A(2,2)*11

我正在创建一个符号变量矩阵(
a
),然后使用该矩阵中的变量(
X
)创建一个表达式。我打算在
a
中的特定索引中设置符号的值(例如,在我的代码中,我确实
a(1,1)=11
),然后我希望该值反映在表达式中。但是,当我执行subs(X)时,我发现符号没有被替换。我有什么办法可以做到这一点吗

以下是我正在尝试的:

>> A = sym('X', [2 2])

A =

[ X1_1, X1_2]
[ X2_1, X2_2]

>> X = A(1,1)*10 + A(2,2)*11

X =

10*X1_1 + 11*X2_2

>> A(1,1)=11

A =

[   11, X1_2]
[ X2_1, X2_2]

>> subs(X)

ans =

10*X1_1 + 11*X2_2
我当然可以做
X1_1=2
。我的问题是,这不适合循环。我想在循环中设置值。显然
A(*,*)=*
易于循环。有没有办法间接设置
X1_1
的值


编辑:为了实现这一点,我可以在设置
A(*,*)
的值后重新定义
X
。然而,这不是我的选择。定义
X
是一项非常昂贵的操作。根据我的需要,多次这样做是不可能的。

每当你在a中的某个特定索引中设置值时,只需再做一次
X=a(1,1)*10+a(2,2)*11,这是易于循环的

例如:

A = sym('X', [2 2]);
X = A(1,1)*10 + A(2,2)*11;
A(1,1) = 11;
X = A(1,1)*10 + A(2,2)*11
它将更新
X

X =

11*X2_2 + 110
>> A = sym('X', [2 2]);
>> X = A(1,1)*10 + A(2,2)*11;
>> X = subs(X, A(1,1), 11)

X =

11*X2_2 + 110
循环示例:

A = sym('X', [2 2]);
X = A(1,1)*10 + A(2,2)*11;

for i = 1:2
    for j = 1:2
        A(i,j) = 11;
        X = A(1,1)*10 + A(2,2)*11
    end
end
输出:

X =

11*X2_2 + 110


X =

11*X2_2 + 110


X =

11*X2_2 + 110


X =

231

您可以使用
A
索引中的符号变量替换
X
中的值,而不是使用值更新
A
中的索引:

X =

11*X2_2 + 110
>> A = sym('X', [2 2]);
>> X = A(1,1)*10 + A(2,2)*11;
>> X = subs(X, A(1,1), 11)

X =

11*X2_2 + 110
如果要对
A
中的所有符号变量执行此操作,甚至不必使用循环。只要打一个电话就行了:

>> Avalues = [11 0; 1 10];  % The values corresponding to symbolic variables in A
>> X = subs(X, A, Avalues)

X =

220

谢谢,但这不是我的选择。再次定义X非常昂贵。我需要将许多不同的值设置为
A(*,*)
,而X是一个非常昂贵的操作。X实际上是在计算一个大矩阵的特征值,所以我不应该执行太多次。