Need help substituting vector variables into symbolic expression

1 次查看(过去 30 天)
Hello!
I have a symbolic expression into which I would like to substitute two vector variables:
syms x w1 b1
l1 = tanh(x * w1 + b1);
w1_actual = rand(1,10);
temp = subs(l1,w1,w1_actual);
This correctly generates a 1x10 symbolic array, but when performing the second substitution:
b1_actual = zeros(1,10);
l1_sym = subs(temp,b1,b1_actual);
This generates a 1x100 symbolic array because the 1x10 vector is expanded in each element.
I want the result of both substitutions to yield a 1x10 array, as is the case for the expression:
l1 = x * w1_actual + b1_actual;
I tried making both substitutions simultaneously:
l1 = subs(l1,[w1,b1],[w1_actual,b1_actual]);
but this resulted in the error:
Inconsistency between sizes of second and third arguments.
I also tried declaring the symbols as symmatrices:
syms x [1 1] matrix
syms w1 [1 10] matrix
syms b1 [1 10] matrix
But this prevents subs() from performing any substitutions for either the w1 and b1 variables.
Thank you in advance!
  1 个评论
Aquatris
Aquatris 2024-2-3
Seems to work fine however when substituting matrices, you need to clarify where a matrix starts and ends, which is done via cell arrays
syms x w1 b1
l1 = tanh(x * w1 + b1);
w1_actual = rand(1,10);
b1_actual = zeros(1,10);
temp = subs(l1,[w1 b1],{w1_actual, b1_actual});
size(temp)
ans = 1×2
1 10

请先登录,再进行评论。

回答(3 个)

Paul
Paul 2024-2-3
编辑:Paul 2024-2-3
syms x y
Option 1. Use a symbolic function
z(x,y) = x + y
z(x, y) = 
z([1 2],[100 200])
ans = 
Option 2. Symbolic expression, subs with a cell array
z = x + y;
subs(z,{x y},{[1 2],[100 200]})
ans = 

Torsten
Torsten 2024-2-3
syms x w1 b1
l1 = tanh(x * w1 + b1);
b1_actual = zeros(1,10);
w1_actual = rand(1,10);
l1_actual = arrayfun(@(i)subs(l1,[w1,b1],[w1_actual(i),b1_actual(i)]),1:10)
l1_actual = 

Star Strider
Star Strider 2024-2-3
编辑:Star Strider 2024-2-3
I may be missing something in your problem statement.
Is this what you want to do —
syms x w1 b1
l1 = tanh(x * w1 + b1);
w1_actual = randi(9,1,10)
w1_actual = 1×10
4 7 9 3 9 1 9 9 2 1
b1_actual = randi(9,1,10)
b1_actual = 1×10
1 4 4 9 6 2 5 8 3 8
temp = subs(l1,{w1,b1},{w1_actual,b1_actual})
temp = 
.

类别

Help CenterFile Exchange 中查找有关 Symbolic Math Toolbox 的更多信息

产品


版本

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by