solveのRetu​rnConditio​nによって得られた解​からの抽出

2 次查看(过去 30 天)
以下のプログラムにて,たくさんある解のうち,一つを取り出したいです。
以下のプログラムを実行したところ,エラーがでました。
どのように修正すればよいでしょうか?
%% 以下,プログラム
****************************************************************
syms omega zeta zeta_0 A real positive
syms s t
G = omega^2 / (s^2 + 2*zeta*omega*s + omega^2);
y = ilaplace(G/s, s, t);
y = simplify(subs(y, (zeta^2 - 1)^(1/2), 1j*(1 -zeta^2)^(1/2)));
dydt = diff(y, t);
t0 = solve(dydt == 0, t, 'ReturnConditions', true)
t1 = subs(t0.t, k, 1);
****************************************************************
%% 以下,出力
****************************************************************
t0 =
フィールドをもつ struct:
t: (pi*k)/(omega*(1 - zeta^2)^(1/2))
parameters: k
conditions: in(k, 'integer') & zeta ~= -1 & zeta ~= 1
関数または変数 'k' が認識されません。
t1 = subs(t0.t, k, 1)

采纳的回答

Kojiro Saito
Kojiro Saito 2024-9-4
solveのドキュメントparametersの下記の説明があります。kが認識されないのはパラメーターがワークスペース変数にないためで、下線部分の記述に該当します。
生成されたパラメーターのベクトルとして返される解のパラメーター。この出力引数は、ReturnConditionstrue の場合にのみ返されます与えられた出力引数が 1 つの場合、parameters は構造体のフィールドとして返されます。複数の出力引数が与えられた場合、parameters は最後から 2 番目の出力引数として返されます。生成されたパラメーターは MATLAB® ワークスペースに表示されません。parameters を使用してアクセスする必要があります。
1つの出力を指定した場合は、構造体t0parametersフィールドにkに該当する変数が格納されているため、subsの入力をkではなくt0.parametersにします。
syms omega zeta zeta_0 A real positive
syms s t
G = omega^2 / (s^2 + 2*zeta*omega*s + omega^2);
y = ilaplace(G/s, s, t);
y = simplify(subs(y, (zeta^2 - 1)^(1/2), 1j*(1 -zeta^2)^(1/2)));
dydt = diff(y, t);
t0 = solve(dydt == 0, t, 'ReturnConditions', true);
t1 = subs(t0.t, t0.parameters, 1)
t1 = 
または、出力を3つにしてkにパラメーターが格納されるようにしてからsubsを実行してもできます。
[t0, k, conditions] = solve(dydt == 0, t, 'ReturnConditions', true);
t1 = subs(t0, k, 1)
t1 = 
  1 个评论
匠 安田
匠 安田 2024-9-4
ありがとうございます。
まさに,やりたいことができました。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 ビッグ データの処理 的更多信息

产品


版本

R2023b

Community Treasure Hunt

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

Start Hunting!