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,,
madhan ravi
madhan ravi 2018 年 12 月 6 日
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 ExchangeMatrix 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