How to make a symbolic matrix?

5 visualizaciones (últimos 30 días)
Evgheny
Evgheny el 11 de Abr. de 2011
I need to make a symbolic matrix:
1 t1 t1^2 sin(t1) cos(t1)
1 t2 t2^2 sin(t2) cos(t2)
....
1 tm tm^2 sin(tm) cos(tm)
I could make an array of array but not a whole matrix:
# phi.m file
function[result] = phi(t)
% declaring omega
omega = 4;
result = [1 t t*t sin(omega*t) cos(omega*t)];
# main.m file
n=8;
m=5;
t = sym('t',[n,1]);
F = diag(sym('t',[1 m]));
for i=1:n
F(i,:) = phi(t(i));
end
F
and this returns:
[ 1, t1, t1^2, sin(4*t1), cos(4*t1)]
[ 1, t2, t2^2, sin(4*t2), cos(4*t2)]
[ 1, t3, t3^2, sin(4*t3), cos(4*t3)]
[ 1, t4, t4^2, sin(4*t4), cos(4*t4)]
[ 1, t5, t5^2, sin(4*t5), cos(4*t5)]
[ 1, t6, t6^2, sin(4*t6), cos(4*t6)]
[ 1, t7, t7^2, sin(4*t7), cos(4*t7)]
[ 1, t8, t8^2, sin(4*t8), cos(4*t8)]
But it is array of arrays (but I need matrix). How to do this?

Respuesta aceptada

Walter Roberson
Walter Roberson el 11 de Abr. de 2011
What data class does it think that F is?
cell2mat might work.

Más respuestas (2)

Andrei Bobrov
Andrei Bobrov el 11 de Abr. de 2011
variant:
>>n=8;t=[];for j=1:n, t = [t;sym(['t' num2str(j)])]; end
phi=@(k,omega)[ones(length(k(:)),1) k k.^2 sin(omega*k) cos(omega*k)];
phi(t,4)
ans*ones(size(ans,2),1)
ans =
[ 1, t1, t1^2, sin(4*t1), cos(4*t1)]
[ 1, t2, t2^2, sin(4*t2), cos(4*t2)]
[ 1, t3, t3^2, sin(4*t3), cos(4*t3)]
[ 1, t4, t4^2, sin(4*t4), cos(4*t4)]
[ 1, t5, t5^2, sin(4*t5), cos(4*t5)]
[ 1, t6, t6^2, sin(4*t6), cos(4*t6)]
[ 1, t7, t7^2, sin(4*t7), cos(4*t7)]
[ 1, t8, t8^2, sin(4*t8), cos(4*t8)]
ans =
t1 + cos(4*t1) + sin(4*t1) + t1^2 + 1
t2 + cos(4*t2) + sin(4*t2) + t2^2 + 1
t3 + cos(4*t3) + sin(4*t3) + t3^2 + 1
t4 + cos(4*t4) + sin(4*t4) + t4^2 + 1
t5 + cos(4*t5) + sin(4*t5) + t5^2 + 1
t6 + cos(4*t6) + sin(4*t6) + t6^2 + 1
t7 + cos(4*t7) + sin(4*t7) + t7^2 + 1
t8 + cos(4*t8) + sin(4*t8) + t8^2 + 1

Evgheny
Evgheny el 11 de Abr. de 2011
I'm sorry but in such a way - it calculates too (like a matrix).
  1 comentario
Walter Roberson
Walter Roberson el 11 de Abr. de 2011
The interface between MATLAB and MuPad often converts matrix operations in to element-wise operations. To have a MATLAB-level matrix treated as an algebraic matrix in MuPad, you need to be more careful about how you code the problem.
Unfortunately I do not have the symbolic toolbox myself, so I cannot experiment with how you can best do this coding.
What *might* work for matrix multiplication, A * B, with A and B already defined as matrices, is to code
subs('A * B')
instead of using A * B . But I'm not at all certain of this: without the toolbox to play with, it is more difficult to tell which parts of the documentation apply to which circumstances.

Iniciar sesión para comentar.

Community Treasure Hunt

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

Start Hunting!

Translated by