piecewise symbolic function within a symbolic matrix
조회 수: 3 (최근 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!