t = sym('t',[1,10]);
A = {};
A {1,1} = sin(t);
A {1,2} = cos(t);
A {2,1} = tan(t);
A {2,2} = t;
result = {};
% For the below lines, it would be nice to have a one line implementation!
for i = 1:2
for j = 1:2
result{i,j} = eval(subs(exp(A{i,j}),t,{1:10}));
end
end

Réponses (2)

t = sym('t',[1,10]);
A = {};
A {1,1} = sin(t);
A {1,2} = cos(t);
A {2,1} = tan(t);
A {2,2} = t;
result = {};
% For the below lines, it would be nice to have a one line implementation!
for i = 1:2
for j = 1:2
result{i,j} = eval(subs(exp(A{i,j}),t,{1:10}));
end
end
result
result = 2×2 cell array
{[2.3198 2.4826 1.1516 0.4692 0.3833 0.7562 1.9290 2.6895 1.5100 0.5804]} {[ 1.7165 0.6596 0.3716 0.5201 1.3280 2.6121 2.1253 0.8646 0.4021 0.4321]} {[4.7465 0.1125 0.8671 3.1830 0.0340 0.7475 2.3904 0.0011 0.6362 1.9124]} {[2.7183 7.3891 20.0855 54.5982 148.4132 403.4288 1.0966e+03 2.9810e+03 8.1031e+03 2.2026e+04]}
one_line_result = reshape(mat2cell(double(subs(exp([A{:}]),t,{1:10})),1,10*ones(1,4)),2,[])
one_line_result = 2×2 cell array
{[2.3198 2.4826 1.1516 0.4692 0.3833 0.7562 1.9290 2.6895 1.5100 0.5804]} {[ 1.7165 0.6596 0.3716 0.5201 1.3280 2.6121 2.1253 0.8646 0.4021 0.4321]} {[4.7465 0.1125 0.8671 3.1830 0.0340 0.7475 2.3904 0.0011 0.6362 1.9124]} {[2.7183 7.3891 20.0855 54.5982 148.4132 403.4288 1.0966e+03 2.9810e+03 8.1031e+03 2.2026e+04]}
syms t; M = [sin(t), cos(t); tan(t), t]; result = arrayfun(@(I,J) double(subs(M(I,J), t, 1:10)), [1 1; 2 2], [1 2; 1 2], 'uniform', 0)
result = 2×2 cell array
{[ 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 0.4121 -0.5440]} {[0.5403 -0.4161 -0.9900 -0.6536 0.2837 0.9602 0.7539 -0.1455 -0.9111 -0.8391]} {[1.5574 -2.1850 -0.1425 1.1578 -3.3805 -0.2910 0.8714 -6.7997 -0.4523 0.6484]} {[ 1 2 3 4 5 6 7 8 9 10]}
Note: you should never eval() a symbolic expression or symbolic function. eval() has no documented meaning for symbolic expressions or symbolic functions, and the undocumented behaviour will give you errors or unexpected results.

2 commentaires

syms t;
M = [sin(t), cos(t); tan(t), t];
result = arrayfun(@(I,J) double(subs(exp(M(I,J)), t, 1:10)), [1 1; 2 2], [1 2; 1 2], 'uniform', 0)
result = 2×2 cell array
{[2.3198 2.4826 1.1516 0.4692 0.3833 0.7562 1.9290 2.6895 1.5100 0.5804]} {[ 1.7165 0.6596 0.3716 0.5201 1.3280 2.6121 2.1253 0.8646 0.4021 0.4321]} {[4.7465 0.1125 0.8671 3.1830 0.0340 0.7475 2.3904 0.0011 0.6362 1.9124]} {[2.7183 7.3891 20.0855 54.5982 148.4132 403.4288 1.0966e+03 2.9810e+03 8.1031e+03 2.2026e+04]}
Ah you are right, I mised the exp()

Connectez-vous pour commenter.

Catégories

En savoir plus sur Symbolic Math Toolbox dans Centre d'aide et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by