for文を使ったプロット

8 ビュー (過去 30 日間)
Daichi
Daichi 2022 年 11 月 21 日
コメント済み: Atsushi Ueno 2022 年 11 月 22 日
以下のようにfor文をまわしてXの値に対するF0xの値をプロットしたいのですがF0xは最後の値しか保存されません。どうしたら正しくプロットできるか教えていただきたいです。
g = 9.81 ;
l=1;
L=1;
m0=1;
m1=1;
m2=1;
m3=1;
K= 30;
X=1:1:10;
for i=1:length(X)
F0x = zeros(1,length(X));
B = zeros(12,length(X));
A = zeros(12,13,length(X))
A1 = zeros(13,12,length(X))
A(:,:,i) = [1,0,0,0,0,0,-1,0,0,0,0,0,0;
0,1,0,0,0,0,0,-1,0,0,0,0,0;
0,0,0,0,0,0,-l*sin(X(i)),l*cos(X(i)),0,0,0,0,1;
0,0,1,0,0,0,0,0,-1,0,0,0,0;
0,0,0,1,0,0,0,0,0,-1,0,0,0;
0,0,0,0,0,0,0,0,-l*sin(X(i)),l*cos(X(i)),0,0,0;
0,0,0,0,1,0,0,0,0,0,-1,0,0;
0,0,0,0,0,1,0,0,0,0,0,-1,0;
0,0,0,0,0,0,0,0,0,0,-(l)*sin(X(i)),(l)*cos(X(i)),0;
0,0,0,0,0,0,1,0,1,0,1,0,0;
0,0,0,0,0,0,0,1,0,1,0,1,0;
0,0,0,0,0,0,0,L,0,0,0,-L,0];
A1(:,:,i) = pinv(A(:,:,i));
B(:,i) = [m0*sin(X(i));m0*(cos(X(i))+g);0;sin(X(i));cos(X(i))+g;0;sin(X(i));cos(X(i))+g;0;sin(X(i));cos(X(i))+g;0];
A2(:,:,i) = A1(:,:,i) * B(:,i)
F0x(1,i) = A2(1,1,i);
end
plot(X(i),F0x(i),"LineWidth",1.0)

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 11 月 21 日
編集済み: Atsushi Ueno 2022 年 11 月 22 日
>どうしたら正しくプロットできるか教えていただきたいです
for ループを10回回って抜け出た後の i の値は10です。
なので下記の plot 関数を実行するとx(10)に対するF0x(10)の1点しか表示されません。しかも plot 関数はデフォルトでマーカー(〇や*等の印)を表示しない為、下記を実行しても何も表示されません。
plot(X(i),F0x(i),"LineWidth",1.0)
下記の様に添え字を取ればベクトル全体を扱う事になり、期待通りにプロットされます。
添え字を全体に渡り指定しても良いです。書き方も何種類かあります。
plot(X,F0x,"LineWidth",1.0);
plot(X(:),F0x(:),"LineWidth",1.0); % 上と同じ動作になる
plot(X(1:10),F0x(1:10),"LineWidth",1.0); % 上と同じ動作になる
  2 件のコメント
Daichi
Daichi 2022 年 11 月 22 日
このように修正してもF0x(1)やF0x(2)の値は0のままになってしまいます。コマンドプロンプトをみると0以外の値をとるようなのですがどのようにしたら正しくプロットできますでしょうか。
Atsushi Ueno
Atsushi Ueno 2022 年 11 月 22 日
何を計算しているのか把握していませんが、下記はforループの外で初期化する必要があると思います。
下記4行をfor文の外に移動してプロットした結果を更新して置きました。
F0x = zeros(1,length(X));
B = zeros(12,length(X));
A = zeros(12,13,length(X));
A1 = zeros(13,12,length(X));

サインインしてコメントする。

その他の回答 (0 件)

タグ

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!