Simlinkモデルをsim関数とwhile loopを用いて実行した結果をメッシュあるいはサーフグラフにしたときに、数値誤差が発生する。
12 views (last 30 days)
Show older comments
Kotaro Ushijima
on 23 Jan 2022
Edited: Kotaro Ushijima
on 7 Feb 2022
質問です。
あるシステムにおけるパラメータの影響を調べるため、各パラメータの値ごとにsim関数をループさせてメッシュデータにまとめようとしています。
例えば以下のようなシステムのパラメータa0_hat, a1_hatを変化させて41*41回程度のsimlinkモデルを用いたシミュレーションをシミュレーション時間1-100[s]で行い、その最終値を用いてメッシュデータを作成した場合、得られたメッシュデータがそのパラメータ地点でのみシミュレーションを行った場合の値と明らかに異なります。
これを解決してsim関数をwhile文中でも操作することは可能でしょうか?
対象としているシステムは実際はより複雑なものであり、また条件を組み換えによって変更しながら特性を観察しているため、コードによる表現でなくsimulink上での実行でないと難しい状態です。
しばらく、試行錯誤してみたのですが解決できませんでした。
よろしくおねがいします。
clear;
close;
set(groot,'defaultAxesTickLabelInterpreter','latex');
set(groot,'defaulttextinterpreter','latex');
set(groot,'defaultLegendInterpreter','latex');
%%% Range %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Axis_a0 = [-0.2:0.01:0.2];
Axis_a1 = [-0.2:0.01:0.2];
%%% Mesh Size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xx = Axis_a0;
yy = Axis_a1;
n = length(xx);
m = length(yy);
[XX, YY] = meshgrid(xx, yy);
Count1 = 1;
Count2 = 1;
MeshCounter = zeros(n, m);
size(MeshCounter);
%%% Simulation Carrying %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while Count1 < n + 1
Count2 = 1;
while Count2 < m + 1
a0_hat = xx(Count1);
a1_hat = yy(Count2);
GetSim = sim('Text.slx');
a = GetSim.Testing(end);
MeshCounter(Count1, Count2) = a;
Count2 = Count2 + 1;
end
Count1 = Count1 + 1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Mesh Graph Generate %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
surf(XX, YY, MeshCounter); grid on; axis square;
xlabel('$\hat{a}_{0}(0)$',FontSize=20);
ylabel('$\hat{a}_{1}(0)$',FontSize=20);
zlabel('Last value of a system',FontSize=13);
strtitle = ['How last value affected by ' ...
'Parameter $\hat{a}_{0}(0)$ and $\hat{a}_{1}(0)$.'];
title(strtitle);
上記のスクリプ卜を実行した後にコマンドラインからグラフに示されているポイントの条件を用いてシミュレーションを個別に実行すると
%%% From Command line %%%%
%%%%%%%%%%%%%
>> a0_hat = -0.19
a0_hat =
-0.1900
>> a1_hat = -0.02
a1_hat =
-0.0200
>> GetSim = sim('Text.slx');
>> a = GetSim.Testing(end)
a =
-3.9833
となり、結果が変わってしまう現象です。グラフのZ軸の値が異なってしまう現象です。
0 Comments
Accepted Answer
Toshinobu Shintai
on 5 Feb 2022
私の環境では a = -3.8212 となっており、Kotaro Ushijima様の実行結果と異なっていますが、それはさておき、while文の中で実行した結果とコマンドウィンドウで実行した結果は一致していました。
a0_hat = -0.19、a1_hat = -0.02 の計算結果は MeshCounter の2行19列に格納されており、
グラフの以下の位置の値になります。
X軸、Y軸の取り方が違っているのではないかと思います。
More Answers (0)
See Also
Categories
Find more on String in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!