📄 stamp.m
字号:
rem=upper(rem);
[n,m]=size(rem);
n=0;
for n=1:m
if rem(n)=='V'
data={rem(n+2:m-1)};
break;
elseif rem(n)=='I'
data={rem(n),rem(n+2:m-1)};
break;
end
end
data=cell2mat(data);
renum=findpt(data,matpt);
LT(pronum,sizeall)=0;
if renum~=0
LT(pronum,renum)=1;
Y(pronum).name=rem;
end
line=line+1;
elseif strcmp(words,'.END') %文件结束
line=line+1;
else
stra=words(1); %元件分类讨论 : R L C K V I
if stra=='R'
%% 'R':
%% G (1/r -1/r ; i X=(vi
%% -1/r 1/r ) j vj)
ori_size=sizeall; %储存原始矩阵大小
[num1,num2,datac,sizeall,matpt,rem] = duandian(rem,matpt,sizeall,1) %寻找元件节点,如果不存在,则添加节点到矩阵X
datac=str2num(datac);
if sizeall>ori_size % 判定新的大小,重新定义矩阵
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
matall.C(sizeall,sizeall)=0;
select(sizeall)=0;
end
[matall] = SEL(1,matall,num1,num2,datac) %根据元件类型,更改矩阵数值
line=line+1;
elseif stra=='L'
ori_size=sizeall;
[num1,num2,datac,sizeall,matpt,rem] = duandian(rem,matpt,sizeall,1)
datac=str2num(datac); %L元件特殊, 需要判断新增节点 电感电流:Il
words={'I',words};
words=cell2mat(words);
renum=findpt(words,matpt);
if renum==0
sizeall=sizeall+1;
num3=sizeall;
matpt(sizeall).X=words;
else
num3=0;
end
if sizeall>ori_size
matall.C(sizeall,sizeall)=0;
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
select(sizeall)=0;
end
[matall] = VL(2,matall,num1,num2,num3,datac);
%% 'L': c(0 0 0 I G=(0 0 1 X=(vi
%% 0 0 0 J 0 0 -1 vj
%% 0 0 L) K -1 1 0) Il)
line=line+1;
elseif stra=='K' %元件K 判断所属两个电感L的电流是否已经在矩阵中存在
%% 'M': C(0 -m i X(Il1
% -m 0) j Il2)
ori_size=sizeall;
[num1,num2,datac,sizeall,matpt,rem] = duandian(rem,matpt,sizeall,0)
datac=str2num(datac);
if sizeall>ori_size
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
matall.C(sizeall,sizeall)=0;
select(sizeall)=0;
end
[matall] = SEL(2,matall,num1,num2,datac)
line=line+1;
elseif stra=='V'
%% 'V': G(0 0 -1 B=(0 X(vi
%% 0 0 1 0 vj
%% 1 -1 0) Evs) Ivs)
[num1,num2,datac,sizeall,matpt,rem] = duandian(rem,matpt,sizeall,1) % 电源V元件,需要添加Iv 节点
datatest=str2num(datac);
if isempty(datatest)
datac=strtok(rem);
datac=str2num(datac);
else
datac=str2num(datac);
end
sizeall=sizeall+1;
num3=sizeall;
select(sizeall)=1;
matpt(sizeall).X={'I',words};
matpt(sizeall).X=cell2mat(matpt(sizeall).X);
matall.C(sizeall,sizeall)=0;
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
[matall] = VL(1,matall,num1,num2,num3,datac);
line=line+1;
elseif stra=='I'
%% 'I' B=(-Ics X=(Vi
%% Ics) Vj)
ori_size=sizeall;
[num1,num2,datac,sizeall,matpt,rem] = duandian(rem,matpt,sizeall,1); % I元件只需判断节点电压是否已存在,Vi Vj
datac=str2num(datac);
if sizeall>ori_size
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
matall.C(sizeall,sizeall)=0;
select(sizeall)=0;
end
[matall] = SEL(4,matall,num1,num2,datac)
line=line+1;
elseif stra=='C'
%% 'C': C(C -c i X(vi
%% -c c) j vj);
%% % C元件只需判断节点电压是否已存在,Vi Vj
ori_size=sizeall;
[num1,num2,datac,sizeall,matpt,rem] = duandian(rem,matpt,sizeall,1);
[n,m]=size(datac);
if datac(m)=='P'
datac=str2num(datac(1:m-1))*1e-12;
else
datac=str2num(datac);
end
if sizeall>ori_size
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
matall.C(sizeall,sizeall)=0;
end
[matall] = SEL(3,matall,num1,num2,datac)
line=line+1;
elseif stra=='X' %X元件-子电路,因此先储存到part.pt 以及part.name
ptnum=0;
ori_size=sizeall;
remtest='test';
sizepart=sizepart+1; %子电路的总数目
part(sizepart).ptname=words;
while (isempty(remtest)==0) %读入一个子电路的所有节点
ptnum=ptnum+1;
[data,rem]=strtok(rem);
data=upper(data);
renum=findpt(data,matpt);
if (renum==0) &(data~='0')
sizeall=sizeall+1;
part(sizepart).pt(ptnum)= sizeall;
matpt(sizeall).X=data;
else
part(sizepart).pt(ptnum)= renum;
end
remtest=rem;
[data,remtest]=strtok(remtest);
end %ptnum 子电路节点数
datac=upper(strtok(rem));
part(sizepart).name=datac;
part(sizepart).num=ptnum;
if sizeall>ori_size
matall.G(sizeall,sizeall)=0;
matall.B(sizeall,1)=0;
matall.C(sizeall,sizeall)=0;
end %将子电路节点先加入总矩阵
line=line+1;
else
disp('no data')
line=line+1;
end
end
end
for i=1:sizeall
if (select(i)>0)
if(isempty(U)==0)
U={U,matpt(i).X};
else
U=matpt(i).X;
end
end
end
save BCG.mat -struct matall;
save LT.mat LT;
save U.mat U;
save X.mat matpt;
save Y.mat Y;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -