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

2 views (last 30 days)
匠 安田
匠 安田 on 2 Sep 2024
Commented: 匠 安田 on 4 Sep 2024
以下のプログラムにて,たくさんある解のうち,一つを取り出したいです。
以下のプログラムを実行したところ,エラーがでました。
どのように修正すればよいでしょうか?
%% 以下,プログラム
****************************************************************
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)

Accepted Answer

Kojiro Saito
Kojiro Saito on 4 Sep 2024
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 Comment
匠 安田
匠 安田 on 4 Sep 2024
ありがとうございます。
まさに,やりたいことができました。

Sign in to comment.

More Answers (0)

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!