doubleの行列を各セルに内包しているcell型変数の分解方法
Show older comments
お世話になります。
下記のコードにおいて、t_req1~3の各セルに内包されている1✕45の全行列をy軸、altitudeをx軸としたグラフを作ることを最終的な目標としているのですが、
t_req1~3の各セルをそれぞれ個別に取得する事ができずエラーが出て困っています。
どなたか良い解決方法をご存じないでしょうか?
needed_velocity_tというエクセルファイルを送付します。
計算の過程で、このエクセルファイルからの読み込みが必要です。
検証の際はご利用ください。
clear
close all
A=1;
vini=1530;
syms r
assume(r > 0);
row=3000;
m=(4/3)*pi*(r^3)*row;
ips=8.854*10^-12;
e=1.602*10^-19;
k=1.38*10^-23;
fai=[-100,-10,5,10,18];
Vg=5000;
d=0.08;
E=Vg/d ;
R=sqrt(A/pi);
D=2*R;
%i=1:1000:50000;
%0~50kmまでの必要高度
filename = 'needed_velocity_t.xlsx';%軌道の維持に必要な速度即ち第一宇宙速度
sheet = 1;
xlRange = 'C2:C52';
subsetA = xlsread(filename,sheet,xlRange);
nv1=subsetA;%必要速度[m/s]
%50~100kmまでの必要高度
filename = 'needed_velocity_t.xlsx';
sheet = 1;
xlRange = 'C52:C102';
subsetB = xlsread(filename,sheet,xlRange);
nv2=subsetB;%必要速度[m/s]
%200~250kmまでの必要高度
filename = 'needed_velocity_t.xlsx';
sheet = 1;
xlRange = 'C202:C252';
subsetC = xlsread(filename,sheet,xlRange);
nv3=subsetC;%必要速度[m/s]
%0-50kmまでの高度取得
filename = 'needed_velocity_t.xlsx';
sheet = 1;
xlRange = 'B2:B52';
subsetD = xlsread(filename,sheet,xlRange);
H1=subsetD;%高度[m]
%50-100kmまでの高度取得
filename = 'needed_velocity_t.xlsx';
sheet = 1;
xlRange = 'B52:B102';
subsetE = xlsread(filename,sheet,xlRange);
H2=subsetE;%高度[m]
%200-250kmまでの高度取得
filename = 'needed_velocity_t.xlsx';
sheet = 1;
xlRange = 'B202:B252';
subsetF = xlsread(filename,sheet,xlRange);
H3=subsetF;%高度[m]
nd1=0.0039;
for i=1:51; %計算中では単位はm/s
around1(i)=(((i-1)*1000)+(10921*10^3))*pi; %任意高度における一周の距離
end
t_around1= around1/vini;%初速のままの時一周にかかる時間
tin1=t_around1;
Vin=A*vini*tin1; %取り込み口が通る体積
nin1=Vin.'*nd1; %取り込み時間中に取り込む粒子数
C=4*pi*ips*r; %キャパシタンス\
q=fai*C; %粒子の電荷量
%ここから排気速度の話
FE=E*q; %電場から受ける力
%必要な周回数の算出
int_q=int(q,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
d_q=double(int_q);
dq=d_q;
dltv=sqrt((2*abs(dq)*E*d)/m)-vini;
% bunbo=nv1.^2
% m_n=(bunshi.')/bunbo
% m_n_trans=m_n(:,1)
mdot1_n=nv1*A*nd1;
%int_mdot1=int(mdot1,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
%d_mdot1=double(int_mdot1)
nin_n=mdot1_n/m;
%nin_n=nin_n(:,1)
Vin_n=nin_n/nd1; %取り込み時間中に取り込む粒子数
tin1_n=Vin_n/(A*vini); %取り込み口が通る体積
t_around1_n=tin1_n;
around1_n=t_around1_n*vini;%
int_around1_n=int(around1_n,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
d_around1_n=double(int_around1_n);
% gom=pinv(around1_n)
nc1=(d_around1_n.')./around1;
%nd2の部
nd2=0.0036;
for i=1:51;
around2(i)=(((i+49)*1000)+(10921*10^3))*pi; %任意高度における一周の距離
end
t_around2= around2/vini;
tin2=t_around2;
Vin=A*vini*tin2; %取り込み口が通る体積
nin2=Vin.'*nd2; %取り込み時間中に取り込む粒子数
% C=4*pi*ips*r %キャパシタンス\
% q=fai*C %粒子の電荷量
% %ここから排気速度の話
% FE=E*q %電場から受ける力
%必要な周回数の算出nd2
dltv=sqrt((2*abs(dq)*E*d)/m)-vini;
% bunbo=nv2.^2
% m_n=(bunshi.')/bunbo
% m_n_trans=m_n(:,1)
mdot2_n=nv2*A*nd2;
%int_mdot1=int(mdot1,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
%d_mdot1=double(int_mdot1)
nin2_n=mdot2_n/m;
%nin_n=nin_n(:,1)
Vin2_n=nin2_n/nd2; %取り込み時間中に取り込む粒子数
tin2_n=Vin2_n/(A*vini); %取り込み口が通る体積
t_around2_n=tin2_n;
around2_n=t_around2_n*vini;%
int_around2_n=int(around2_n,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
d_around2_n=double(int_around2_n);
% gom=pinv(around1_n)
nc2=(d_around2_n.')./around2;
%nd3の部
nd3=0.0018;
for i=1:51;
around3(i)=(((i+199)*1000)+(10921*10^3))*pi; %任意高度における一周の距離
end
t_around3= around3/vini;
tin3=t_around3;
Vin3_n=A*vini*tin3; %取り込み口が通る体積
nin3_n=Vin.'*nd3; %取り込み時間中に取り込む粒子数
% C=4*pi*ips*r %キャパシタンス\
% q=fai*C %粒子の電荷量
% %ここから排気速度の話
% FE=E*q %電場から受ける力
%必要な周回数の算出nd3
dltv=sqrt((2*abs(dq)*E*d)/m)-vini;
% bunbo=nv2.^2
% m_n=(bunshi.')/bunbo
% m_n_trans=m_n(:,1)
mdot3_n=nv3*A*nd3;
%int_mdot1=int(mdot1,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
%d_mdot1=double(int_mdot1)
nin3_n=mdot3_n/m;
%nin_n=nin_n(:,1)
Vin3_n=nin3_n/nd3; %取り込み時間中に取り込む粒子数
tin3_n=Vin3_n/(A*vini); %取り込み口が通る体積
t_around3_n=tin3_n;
around3_n=t_around3_n*vini;%
int_around3_n=int(around3_n,[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true)
d_around3_n=double(int_around3_n);
% gom=pinv(around1_n)
nc3=(d_around3_n.')./around3;
%必要周回数を得るのに必要な周回時間
Md=[1,2,3,10,12];%乾燥重量
Md1=Md(1,1);
Md2=Md(1,2);
Md3=Md(1,3);
Md4=Md(1,4);
Md5=Md(1,5);
%ΔVを満足するのに必要な粒子重量
DV=[20,40,80,120];%ΔV
DV1=DV(1,1);
DV2=DV(1,2);
DV3=DV(1,3);
DV4=DV(1,4);
ar=[0.3:0.6:1:5:10:45]*(10^-6);%新たに仮定した粒子半径
Vex=[125.04 74.882 51.356 15.736 9.4846 3.1883];
Vex1=Vex(1,1);
Vex2=Vex(1,2);
Vex3=Vex(1,3);
Vex4=Vex(1,4);
Vex5=Vex(1,5);
Vex6=Vex(1,6);
count=1;
for i=1:1:4;
for j=1:6;
for k=1:5;
W=Md(k)*(exp(DV(i)/Vex(j))-1);%ΔVを満足するのに必要な粒子重量
n=W./((4/3)*(ar.^3)*row);%ΔVを満足するのに必要な粒子の個数
%%
%各Mdと各粒子数密度の組み合わせにおける必要周回数
n_req1=n./nin1;%各Mdと各粒子数密度の組み合わせにおける必要周回数
n_req2=n./nin2;
n_req3=n./nin3_n;
%%
%必要周回数を満たすのに必要な航行時間
t_req1=t_around1*n_req1;%0~50km
t_req2=t_around2*n_req2;%50~100km
t_req3=t_around3*n_req3;%200~250km
NUM(count,1:11)={i,j,Vex(j),W,n,n_req1,n_req2,n_req3,t_req1,t_req2,t_req3};
count=count+1;
end
end
end
count2=count-1;
%ΔVを満足するのに必要な粒子の個数
n=NUM(1:count2,5);
%各Mdと各粒子数密度の組み合わせにおける必要周回数
n_req1=NUM(1:count2,6);
n_req2=NUM(1:count2,7);
n_req3=NUM(1:count2,8);
%必要周回数を満たすのに必要な航行時間
t_req1=NUM(1:count2,9);%0~50km
t_req2=NUM(1:count2,10);%50~100km
t_req3=NUM(1:count2,11);%200~250km
%%
%高度を行列にしたもの
count3=1;
for i=0:1:49;
altitude1=1+i;%0~50,50~100km
alt1(count3,1)={altitude1};
count3=count3+1;
end
count3.5=1;
for i=49:1:99;
altitude1=1+i;50~100km
alt1(count3,1)={altitude1};
count3.5=count3.5+1;
end
count4=count3+1;
for i=199:1:249;%200~250km
altitude2=1+i;
alt2(count4,1)={altitude2};
count4=count4+1;
end
altitude=cat(1,alt1,alt2);
count5=1;
for i=1:1:45;
a(i)=t_req1(1,i);
b(1,i)=cell2mat(a(i));%%%%%%%エラー発生個所%%%%%%%%%
%B(count5,45)=(b);
count5=count5+1;
end
現状で発生しているエラーは下記のとおりです
左辺のインデックスが右辺とサイズが適合しないため、代入は実行できません。
エラー: needed_cicle_vs_needed_velocity_ver6 (line 248)
b(1,i)=cell2mat(a(i));
Accepted Answer
More Answers (0)
Categories
Find more on Automotive 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!