piecewise symbolic function within a symbolic matrix
1 次查看(过去 30 天)
显示 更早的评论
Hallo, I would like to construct a matrix P whose elements depend on x (a vector that varies with time). Some elements of P are piecewise functions of x. The code is just to test whether P can be updated. Any help will be much appreciated.
sym x
P = sym(zeros(3,3)) %create empty symbolic matrix
P(1,1) = sym('1/(1+exp(-4.3*x(1)))')
P(2,1) = sym('0.2*x(2)')
P(3,1) = sym('0.4*sin(0.0192+x(3))')
P(1,2) = sym('1/(1+exp(11.8*x(2)))')
P(2,2) = .3435
P(3,2) = sym('.02 + (x(3)>=.04)*(.66*x(3))') %piecewise
x = [.5, .5, .1]
eval(P)
But I get an error due to the piecewise function (without it, P easily updates):
Error using sym/eval (line 11)
Error: Unbalanced or unexpected parenthesis or bracket.
Outside of the sym function, .02 + (x(3)>=.04)*(.66*x(3)) works all right.
I have also tried:
sym('piecewise([x(3)<.04,.02],[x(3)>=.04,0.02+0.66*x(3)])')
but still no go...I wonder what I am doing wrong? Thanks for your time
0 个评论
采纳的回答
Star Strider
2014-7-8
You may not be doing anything actually ‘wrong’, but eval may not be your best choice.
Replace it with:
vpa(P)
to get it to work without errors.
5 个评论
Star Strider
2014-11-13
My pleasure!
The sincerest expression of appreciation here on MATLAB answers is to Accept the answer that most closely solves your problem.
Walter Roberson
2016-1-23
Inside the Symbolic Toolbox, the result of comparisons is true (a logical value) or false (a logical value) or FAIL (which is its own object type) . The results are not numeric 0 or numeric 1, so
sym('.02 + (x(3)>=.04)*(.66*x(3))')
will not do what is desired.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Assumptions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!