Need help substituting vector variables into symbolic expression

1 view (last 30 days)
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 Comment
Aquatris
Aquatris on 3 Feb 2024
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

Sign in to comment.

Answers (3)

Paul
Paul on 3 Feb 2024
Edited: Paul on 3 Feb 2024
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 on 3 Feb 2024
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 on 3 Feb 2024
Edited: Star Strider on 3 Feb 2024
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 = 
.

Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!