필터 지우기
필터 지우기

使い方によるエラー sym/subsindex

조회 수: 18 (최근 30일)
蓮 出越
蓮 出越 2022년 12월 22일
댓글: 蓮 出越 2022년 12월 23일
大学で自動運転に関する研究をしている者です。
サンプリングタイム0.1秒で0秒から2秒後までの次の物体の位置をすべてfigureにプロットをしたいと思っています。
ヨーレートの範囲は-10(rad/s)~10(rad/s)でサンプリングヨーレート0.1(rad/s)です。
次の時間のX座標、Y座標を求める式が下の式です。
x(t+1) = x(t) + Vcos(ω(t))dt
y(t+1) = y(t) + Vcos(ω(t))dt
ω(t) = (ヨーレート)*(サンプリングタイム)
下のコードを実行すると下のようなエラーがでるため、その原因をご教示していただければと思います。
よろしくお願いいたします。
コード
%% サンプリングタイム
sample_Ts = 10;
Ts = 1 / sample_Ts;
%% 予測ホライズン
N = 2;
%% 初期位置
% x = 0;
% y = 0;
theta0 = 0;
x = zeros(1, sample_Ts*N);
y = zeros(1, sample_Ts*N);
%% 速度
v = 10;%km/h
%% ヨーレート
% 最小ヨーレート
Yaw_min = -10;%(rad)
% 最大ヨーレート
Yaw_max = 10;%(rad)
% サンプルヨーレート
Yaw_sample = 0.1;%(rad)
% ヨーレート
%Yaw = [Yaw_min:Yaw_sample:Yaw_max];
for Yaw = Yaw_min:Yaw_sample:Yaw_max
%% 次の車両の位置
for t = 0:Ts:N
syms t;
f = v*cos(Yaw*t);
g = v*sin(Yaw*t);
x(t+Ts)=x(t)+int(f, t, t+Ts);
y(t+Ts)=y(t)+int(g, t, t+Ts);
plot(x(t),y(t))
end
end
エラー内容
使い方によるエラー sym/subsindex
インデックス付けまたは関数定義が無効です。インデックス付けは MATLAB インデックスに従わなければなりません。関数の引数はシンボリッ
ク変数でなければならず、関数本体は sym 式でなければなりません。
エラー: sample (35)
x(t+Ts)=x(t)+int(f, t, t+Ts);

채택된 답변

Atsushi Ueno
Atsushi Ueno 2022년 12월 22일
symsで定義したシンボリック変数 t をベクトルのインデックスに使用した事がエラーの原因です。
シンボリック式で表現するならfor文を回す必要は無いですし、
for文を回すならシンボリック式を使わない数値計算で事足りると思います。
%% サンプリングタイム
sample_Ts = 10;
Ts = 1 / sample_Ts;
%% 予測ホライズン
N = 2;
%% 初期位置
% x = 0;
% y = 0;
theta0 = 0;
x = zeros(1, sample_Ts*N);
y = zeros(1, sample_Ts*N);
%% 速度
v = 10;%km/h
%% ヨーレート
% 最小ヨーレート
Yaw_min = -10;%(rad)
% 最大ヨーレート
Yaw_max = 10;%(rad)
% サンプルヨーレート
Yaw_sample = 0.1;%(rad)
% ヨーレート
%Yaw = [Yaw_min:Yaw_sample:Yaw_max];
figure;
for Yaw = Yaw_min:Yaw_sample:Yaw_max
%% 次の車両の位置
index = 1;
for t = 0:Ts:N
%syms t; % シンボリック変数や式を使わず数値計算してみる
x(index) = x(max(1,index-1)) + v*(-sin(t*Yaw)+sin((t+Ts)*Yaw))/Yaw;
y(index) = y(max(1,index-1)) + v*( cos(t*Yaw)-cos((t+Ts)*Yaw))/Yaw;
plot(x(index),y(index),'*'); hold on
index = index + 1;
end
end
  댓글 수: 1
蓮 出越
蓮 出越 2022년 12월 23일
ご回答ありがとうございます。
for文が積分を表していることに気づきませんでした。解決できました。
ありがとうございます。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 数値と精度에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!