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

 채택된 답변

madhan ravi
madhan ravi 2018년 12월 6일
편집: madhan ravi 2018년 12월 6일

1 개 추천

T=linspace(0,5,numel(xx(1,:)));
y=T.^2+sin(P+xx(1,:));
plot(T,y)

댓글 수: 17

AtoZ
AtoZ 2018년 12월 6일
@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 2018년 12월 6일
편집: madhan ravi 2018년 12월 6일
solve() doesn't solve your equation at all
AtoZ
AtoZ 2018년 12월 6일
편집: AtoZ 2018년 12월 6일
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 2018년 12월 6일
편집: madhan ravi 2018년 12월 6일
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 2018년 12월 6일
편집: AtoZ 2018년 12월 6일
Sure, I get the result on R2014a as
xx = 0.0000000000058100074003806983143150013215135 + 0.0000000000022920983812460537064838532923356*i,..........
etc
madhan ravi
madhan ravi 2018년 12월 6일
ok do one thing just attach your result as a text file here
AtoZ
AtoZ 2018년 12월 6일
Attached
madhan ravi
madhan ravi 2018년 12월 6일
ok now we have xx what you want to do with it?
AtoZ
AtoZ 2018년 12월 6일
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 2018년 12월 6일
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 2018년 12월 6일
편집: AtoZ 2018년 12월 6일
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 2018년 12월 6일
편집: madhan ravi 2018년 12월 6일
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 2018년 12월 6일
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 2018년 12월 6일
편집: madhan ravi 2018년 12월 6일
T=linspace(0,5,numel(xx(1,:)));
y=T.^2+sin(P+xx(1,:));
plot(T,y)
AtoZ
AtoZ 2018년 12월 6일
편집: AtoZ 2018년 12월 6일
@madhan Thanks :) Could you please update your answer?, I'll accept it.
madhan ravi
madhan ravi 2018년 12월 6일
Anytime :) , updated my answer.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

릴리스

R2014a

질문:

2018년 12월 6일

댓글:

2018년 12월 6일

Community Treasure Hunt

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

Start Hunting!

Translated by