2014-02-18 7 views
1

Я хотел бы определить матрицу символических функций (не переменных) в Matlab. В рабочей области я хотел бы, чтобы это был элемент класса symfun размера N-by-M (где N и M - целые положительные числа).Матрица символических функций

+0

читайте http://www.mathworks.com/help/symbolic/symfun.html и http://www.mathworks.com/help/symbolic/creating-symbolic-variables-and-expressions.html#bs_tekf- 1 – mhmsa

+0

@mhmsa: Вы прочитали документацию? Используя эти страницы, мне не удалось добавить symfun в матрицу. Все, что мне удается создать, - это symfun, возвращающий матрицу. – Daniel

ответ

1

Я не знаю, как создать матрицу, но клетка возможно:

c={symfun(x+y, [x y]),symfun(x+2*y, [x y]);symfun(x+3*y, [x y]),symfun(x+4*y, [x y])} 

Может быть, это достаточно в вашем случае.

+0

Мне нужна матрица, но, как вы сказали, я не могу это сделать, просто прочитав документацию ... –

4

Вы не можете создать матрицу symfun элементов класса (возможно, по той же причине, что один can't create a matrix of function handles), но вы можете создать символическую функцию, которая возвращает матрицу символических выражений:

syms x y z; 
Afun = symfun([x+y y-z;y/x z-1],[x y z]) 
B = Afun(sym(pi),cos(y),z^2) 

Конечно вы не сможете получить прямой доступ к элементам Afun пока не оценить его, хотя вы можете использовать formula, чтобы извлечь их:

Amat = formula(Afun); 
Amat(1) 

можно сцепить symfun s в матрицу при условии, что все они имеют одинаковые входные аргументы (аргументы не должны использоваться). Однако конкатенация по-прежнему не образует матрицы symfun s - она ​​просто конкатенирует сами формулы, поэтому вы все равно получаете один symfun, как указано выше.

Другой вариант заключается в создании матрицы символических выражений, например:

syms x y z; 
A = [2*x 3*y^2 x+z; 
    -y^3+1 sin(x) sym('pi'); 
    3.5 exp(-z) 1/x]; 

, которые могут быть оценены с помощью subs:

B = subs(A,{x,y,z},{sym(pi),cos(y),z^2}) 

И нормальные матричные операции работать, например:

B = subs(A(2,:),{x,y,z},{sym(pi),cos(y),z^2}) 
+0

Спасибо большое, очень полезно! –

0

Если вы, например, хотите устроить анонимную символическую функцию ионов в векторе можно сделать следующим образом:

z = sym([]); %declare z as an empty symbolic array 

N = 6;   %array size 

for i = 1:N 
    syms(sprintf('z%d(t)', i)) %declare each element in the array as a single symbolic function 

    zz = symfun(sym(sprintf('z%d(t)', i)), t); %declare each element to a symbolic "handle" 

    z = [z;zz]; %paste the symbolic "handle" into an array 
end 

Имейте в виду, что MATLAB рассматривает г как 1x1 символической функции, даже если она содержит больше элементов. z будет по-прежнему вести себя как вектор, поэтому вы можете использовать его как обычный вектор в операциях матрицы-вектора.

Смежные вопросы