行列を計算して,代入​をしたいのですが,サ​イズが異なるためでき​ないといわれてしまい​ます.教えてください​.

22 Ansichten (letzte 30 Tage)
春希
春希 am 14 Nov. 2024 um 10:00
Beantwortet: 春希 am 20 Nov. 2024 um 4:27
deltax = 10*(1000 /3600);
eya = Ya; eva = abs(va-V); eyTH = YTH;
eTHw = abs(THw-TH); eTHg = abs(THg-TH);
A = [1,deltaT,0,0,0;0,1,0,0,0;0,0,1,deltax,0;0,0,0,1,0;0,0,0,0,0];
B = [0,0,0,0,0;deltaT,0,0,0,0;0,0,0,0,0;0,deltaT,0,0,0;0,0,1,0,0];
C = [1,0,-1,0,0;0,0,0,1,-1];
X = [eya,eva,eyTH,eTHw,eTHg];
Q = 1.5*10^-6; R = 1.0*10^-7; U = 5.0*10^-3;
q = randn(N,1)*sqrtm(Q);
r = randn(N,1)*sqrtm(R);
u = randn(N,1)*sqrtm(U);
Z = [q;r;u;0;0];
x =[0,0,0,0,0];
for k=2:N
X (k,:) =A*X(k-1,:).'+B*Z(k-1,:).'; %個々の部分でエラーが出てしまします.
end

Antworten (2)

Image Analyst
Image Analyst am 14 Nov. 2024 um 15:30
If you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:
For example, you aren't telling us what Ya, va, V, etc. are Plus you are not giving us the full error message (ALL the red text) so we don't know what line the error occurs on.
Before the loop, have this
whos A
whos X
whos B
whos Z
But X(k-1,:).' is a row vector transposed so that it's now a column vector. But A is a 2-D matrix, so you're doing a matrix multiply, not an element-by-element multiply, So if A is rows x columns, then X(k-1,:).' better be columns x 1 or else it won't work as a matrix multiply. Did you intens an element-by-element multiply? If so use .* rather than *

春希
春希 am 20 Nov. 2024 um 4:27
すいませんでした.プログラムの全文を改めて提示します.下記の内容がエラー文として表示されました.
dataは実験でのデータファイルで,Excelファイルを添付しました.
「左辺のサイズが 1x5 で右辺のサイズが 5x5 であるため、代入を実行できません。
エラー: kalmanf (行 92)
X(k,:) =A*X(k-1,:)'+B*Z(k-1,:)';
^^^^^^                                   」
%重力加速度
g = 9.81;
%自転車前後輪位置間隔
L = 1.2;
%ホルダと前輪位置の間隔
d = 0.13;
%自転車ホルダ位置の角度θ
TH = 50;
%走行速度(km/h)
v = 4;
%走行速度(m/s)
V = v* (1000 / 3600 );
%Excelからのデータを数値行列にしてインポートする
DATA = test1;
time = DATA(:,1);
Ax = DATA(:,2);
Ay = DATA(:,3);
Az = DATA(:,4);
Ao = DATA(:,5);
Axp= DATA(:,6);
Ayp= DATA(:,7);
Azp= DATA(:,8);
Aop= DATA(:,9);
%データ数
N = numel(time);
%時間間隔
deltaT = abs(sum(diff(time)))/N;
%各時間に進んだ距離
x = V *deltaT;
%路面プロファイルya用の各時間に進んだ距離の行列
matx1 = V*time;
%路面プロファイルyθ用の各時間に進んだ距離の行列
matx2 = V*time;
%角速度と時間間隔の積
THw = Aop * deltaT;
%推定姿勢角
THwsum = sum(THw);
%Axの最初5個と最後5個の要素を0にする
for K =1:5
Ay(K,:) = 0;
end
for kse =N-5:N
Ay(kse,:) = 0;
end
%重力加速度に由来する比較的長周期の成分を抽出
Aysum = sum(Ay);
%傾斜角
THg =atan(Ay/g);
THgsum = sum(THg);
%鉛直加速度からgを取り除いた動的成分
ay = ((L - d) * Az + d * (Az*(x-L))/L);
%鉛直成分の速度
va = (1/2) * Azp * deltaT;
vasum = sum(va);
%路面プロファイルya
Ya =(1/4) * abs(Ayp) * deltaT^2;
Yasum = sum(Ya);
%推定自転車姿勢角と各時間に進んだ距離からの路面プロファイルyθ
YTH =x*sin(THw);
YTHsum = sum(YTH);
%路面プロファイルyθのグラフ
figure(1),clf
plot(matx2,YTH);
title('自転車姿勢角と各時間に進んだ距離による路面プロファイル')
xlabel('距離(m)');
ylabel('路面の凹凸(cm)');
%路面プロファイルyaのグラフ
figure(2),clf
plot(matx1,Ya);
title('鉛直加速度による路面プロファイル');
xlabel('距離(m)');
ylabel('路面の凹凸(cm)');
deltax = 10*(1000 /3600);
A = [1,deltaT,0,0,0;0,1,0,0,0;0,0,1,deltax,0;0,0,0,1,0;0,0,0,0,0];
B = [0,0,0,0,0;deltaT,0,0,0,0;0,0,0,0,0;0,deltaT,0,0,0;0,0,1,0,0];
C = [1,0,-1,0,0;0,0,0,1,-1];
Q = 1.5*10^-6; R = 1.0*10^-7; U = 5.0*10^-3;
q = randn(N,1)*sqrtm(Q);
r = randn(N,1)*sqrtm(R);
u = randn(N,1)*sqrtm(U);
Z = [q;r;u;0;0];
X = zeros(N,5);
X(1,:) = [0;0;0;0;0];
for k=2:N
X(k,:) =A*X(k-1,:)'+B*Z(k-1,:)';
end
e1 = X(:,1) + X(:,2);
e2 = X(:,3) + X(:,4);
y1 = z + e1;
y2 = z + e2;
fs = 1;
m = length(e1);
n = pow2(nextpow2(m));
f = (0:n-1)*(fs/n);
ye1 = fft(e1,n);
ye2 = fft(e2,n);
xhat_ukf = zeros(N,5);
xhat = zeros(N,5);
xhat(1,:) = X(1,:)' + [10;10;20];
p = 1000*eye(3);
for k =2:N
[xhat(k,:),p] = kf(A,B,0,C,Q,R,0,y(k),xhat(k-1,:),p);
end
Yhata = Y1 - Y2;
error = xhat-X;
function [xhat_new,p_new, G] = kf(A,B,Bu,C,Q,R,u,y,xhat,p)
xhat =xhat(:); u =u(:); y=y(:);
xhatm = A*xhat + Bu*u;
pm = A*p*A' + B*Q*B';
G = pm*C/(C'*pm*C+R);
xhat_new = xhatm + G*(y-C'*xhatm);
p_new = (eye(size(A))-G*C')*pm;
end
figure(3), clf

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by