Extract a row as a function of a variable

I have a numerical solution, which comes as a symbolic 6x51 matrix when I assign the values to T as T=[0:0.1:5].
I want to extract the first row (1x51) as a function of T, how to do it? The `rows2vars` prescription doesn't seem to work.
syms a T
v3=-2.375; g=1; b=0.00001; e2=0.5; k=pi/2;
w=-2*cos(k);
eqn = sin(3*k+a)/sin(2*k+a)==v3-w+(g.*T.^2)./(1+b.*T.^2)+(e2.*T.^2.*sin(k)^2)./(sin(2*k+a)^2+b*T.^2*sin(k)^2);
sol = solve(eqn,a,[0 pi]);
solutions = vpa(subs(sol),3);
xx=subs(solutions,T,[0:0.1:5])
% xx(1,:)
T2 = rows2vars(xx); %does not work

 Réponse acceptée

madhan ravi
madhan ravi le 6 Déc 2018
Modifié(e) : madhan ravi le 6 Déc 2018
T=linspace(0,5,numel(xx(1,:)));
y=T.^2+sin(P+xx(1,:));
plot(T,y)

17 commentaires

AtoZ
AtoZ le 6 Déc 2018
@madhan Thanks. Could you please specify your answer to the question? I am unable to understand your meaning, as I already used subs()..
madhan ravi
madhan ravi le 6 Déc 2018
Modifié(e) : madhan ravi le 6 Déc 2018
solve() doesn't solve your equation at all
AtoZ
AtoZ le 6 Déc 2018
Modifié(e) : AtoZ le 6 Déc 2018
This is running well on mine, could you try the following?
syms a T
v3=-2.375;
g=1;
b=0.00001;
e2=0.5;
k=pi/2;
w=-2*cos(k);
eqn = sin(3*k+a)/sin(2*k+a)==v3-w+(g.*T.^2)./(1+b.*T.^2)+(e2.*T.^2.*sin(k)^2)./(sin(2*k+a)^2+b*T.^2*sin(k)^2);
sol = solve(eqn,a,[0 pi]);
solutions = vpa(subs(sol),3);
xx=subs(solutions,T,[0:0.1:5])
xx(1,:)
madhan ravi
madhan ravi le 6 Déc 2018
Modifié(e) : madhan ravi le 6 Déc 2018
Are you sure? because I get
Error using sym.getEqnsVars>checkVariables (line 92)
Second argument must be a vector of symbolic variables.
Error in sym.getEqnsVars (line 54)
checkVariables(vars);
Error in solve>getEqns (line 429)
[eqns, vars] = sym.getEqnsVars(argv{:});
Error in solve (line 226)
[eqns,vars,options] = getEqns(varargin{:});
Error in COMMUNITY (line 9)
sol = solve(eqn,a,[0 pi]);
AtoZ
AtoZ le 6 Déc 2018
Modifié(e) : AtoZ le 6 Déc 2018
Sure, I get the result on R2014a as
xx = 0.0000000000058100074003806983143150013215135 + 0.0000000000022920983812460537064838532923356*i,..........
etc
madhan ravi
madhan ravi le 6 Déc 2018
ok do one thing just attach your result as a text file here
AtoZ
AtoZ le 6 Déc 2018
Attached
madhan ravi
madhan ravi le 6 Déc 2018
ok now we have xx what you want to do with it?
AtoZ
AtoZ le 6 Déc 2018
just extract the first row of it.. like xx(1,:), But as a function of T, because I want to use it to plot for T later.
AtoZ
AtoZ le 6 Déc 2018
If I can call it by something having T in it.. xx(1, something depending on T) if possible,,
plot(T,real(xx(1,:))) % because xx is complex so we plot T vs xx(1,:) or it's imaginary number
AtoZ
AtoZ le 6 Déc 2018
Modifié(e) : AtoZ le 6 Déc 2018
Ok here's the situation:
I want to plot this first row, in a function involving T, so I want that when I give a range to T, say [0,5], then the function T.^2+sin(p+xx(1,f(T))) automatically leads to [0.5].^2+sin(p+xx(1,f([0,5]))) where f(T) is the first row in xx.
madhan ravi
madhan ravi le 6 Déc 2018
Modifié(e) : madhan ravi le 6 Déc 2018
Wait a minute.... where did you bring f from? what's f?
T=linspace(0,5,numel(xx(1,:)));
plot(T,xx(1,:))
AtoZ
AtoZ le 6 Déc 2018
No just to explain that the second argument in xx(1,:) should be a function of T, f(T) so I wrote xx(1,:)=xx(1,f(T)).
madhan ravi
madhan ravi le 6 Déc 2018
Modifié(e) : madhan ravi le 6 Déc 2018
T=linspace(0,5,numel(xx(1,:)));
y=T.^2+sin(P+xx(1,:));
plot(T,y)
AtoZ
AtoZ le 6 Déc 2018
Modifié(e) : AtoZ le 6 Déc 2018
@madhan Thanks :) Could you please update your answer?, I'll accept it.
madhan ravi
madhan ravi le 6 Déc 2018
Anytime :) , updated my answer.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Mathematics dans Centre d'aide et File Exchange

Produits

Version

R2014a

Community Treasure Hunt

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

Start Hunting!

Translated by