📄 ms2mtx1.m
字号:
function [mtx,unid]=ms2mtx1(ms)
% Convert a matrix-string to a matrix
%-------------------------------------------------------------
if strcmp(ms,'Numerator')
ms='';
end
% remove unwanted characters
%-------------------------------------------------------------
unc=0;
k=length(ms);
msabs=abs(ms);
for i=1:k
if msabs(i)>=60 | msabs(i)<=44 | msabs(i)==47 | msabs(i)==58;
if msabs(i)==117
unc=unc+1;
else
ms(i)=' ';
end
end
end
% remove trailing and leading blanks
%-------------------------------------------------------------
ms = deblank(fliplr(deblank(fliplr(ms))));
if isempty(ms),
mtx = [];
strg='';
unid=0;
return
end
% add a space if length=1 (need a string of 2 characters)
%-------------------------------------------------------------
if length(ms)==1
ms=[ms ' '];
end
temp='';
msabs=abs(ms);
k=length(ms);
if unc>=1
for i=1:k
if msabs(i)==117
if (i~=k)
if (msabs(i+1)>=48 & msabs(i+1)<=57)
if (i==1)
temp=[temp ' ' 'u' msabs(i+1) ' '];
else
if (msabs(i-1)==45)
temp=[temp 'u' msabs(i+1) ' '];
else
temp=[temp ' ' 'u' msabs(i+1) ' '];
end
end
else
if (i==1)
temp=[temp ' u ' ];
else
if (msabs(i-1)==45)
temp=[temp 'u '];
else
temp=[temp ' u ' ];
end
end
end
else
if (i==1)
temp=[temp ' u ' ];
else
if (msabs(i-1)==45)
temp=[temp 'u '];
else
temp=[temp ' u ' ];
end
end
end
else
if (i~=1)
if (msabs(i-1)==117 & msabs(i)>=48 & msabs(i)<=57)
temp=[temp ''];
else
temp=[temp ms(i)];
end
else
temp=[temp ms(i)];
end
end
end
ms=temp;
end
% identify coefficients
%-------------------------------------------------------------
k=length(ms);
msabs=abs(ms);
row=1;
col=1;
count(1)=0;
mtx=[];
mtx(1,1)=0;
unid(1,1)=0;
sms=[];
for i=2:k
if (msabs(i) <= 57 & msabs(i) >= 45 ) & msabs(i-1) == 32
sms=ms(i);
if i==k
mtx(row,col)=str2num(sms);
count(row)=count(row)+1;
end
elseif (msabs(i) <= 57 & msabs(i) >= 45 ) & (msabs(i-1) <= 57 & msabs(i-1) >= 45 )
if size(sms,1)==0
sms=[ms(i-1) ms(i)];
else
sms=[sms ms(i)];
end
if i==k
mtx(row,col)=str2num(sms);
count(row)=count(row)+1;
end
elseif (msabs(i-1) <= 57 & msabs(i-1) >= 45 ) & msabs(i) == 32
if (i>2)
if msabs(i-2)==117
unid(row,col-1)=str2num(ms(i-1));
else
if size(sms,1)==0
sms=ms(i-1);
end
mtx(row,col)=str2num(sms);
sms=[];
count(row)=count(row)+1;
col=col+1;
end
else
if size(sms,1)==0
sms=ms(i-1);
end
mtx(row,col)=str2num(sms);
sms=[];
count(row)=count(row)+1;
col=col+1;
end
elseif (msabs(i) <= 57 & msabs(i) >= 45 ) & msabs(i-1) == 59
sms=ms(i);
if i==k
mtx(row,col)=str2num(sms);
count(row)=count(row)+1;
end
elseif (msabs(i-1) <= 57 & msabs(i-1) >= 45 ) & msabs(i) == 59
if size(sms,1)==0
sms=ms(i-1);
end
mtx(row,col)=str2num(sms);
sms=[];
count(row)=count(row)+1;
row=row+1;
col=1;
count(row)=0;
elseif msabs(i-1) == 32 & msabs(i) == 59
row=row+1;
col=1;
count(row)=0;
elseif msabs(i-1) == 32 & msabs(i) == 117
mtx(row,col)=sqrt(-1);
count(row)=count(row)+1;
col=col+1;
elseif msabs(i-1) == 45 & msabs(i) == 117
mtx(row,col)=-sqrt(-1);
count(row)=count(row)+1;
col=col+1;
end %if
end %for
% move rows to the right
%-------------------------------------------------------------
[m,n]=size(mtx);
[j,k]=size(unid);
if (m~=j|n~=k)
unid(m,n)=0;
end
if n>1
for i=1:m
mov=n-count(i);
if mov>0
for j1=1:mov
for j2=(n-1):-1:1
mtx(i,j2+1)=mtx(i,j2);
unid(i,j2+1)=unid(i,j2);
end % for j2
mtx(i,j2)=0;
unid(i,j2)=0;
end % for j1
end %if
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -