matlab报错矩阵维度不一致如何解决? 5
新人不太会,请教一下为什么这里matlab一直报错“矩阵维度不一致”,希望有大神帮忙改正程序clear;r=1;x=[102030406090];y=[204030905...
新人不太会,请教一下为什么这里matlab一直报错“矩阵维度不一致”,希望有大神帮忙改正程序
clear;
r=1;
x=[10 20 30 40 60 90 ];
y=[20 40 30 90 50 70 ];
p=polyfit(x,y,3);
plot(x,y,'r');
dp=polyder(p);
X=polyval(p,y);
Y=polyval(p,x);
X0=X-r*sin(atan(dp));
Y0=Y-r*cos(atan(dp));
X1=X-r*sin(atan(dp));
Y1=Y-r*cos(atan(dp));
hold on
p0=polyfit(X0,Y0,3);
p1=polyfit(X1,Y1,3);
plot(X0,Y0,'b');
plot(X1,Y1,'b'); 展开
clear;
r=1;
x=[10 20 30 40 60 90 ];
y=[20 40 30 90 50 70 ];
p=polyfit(x,y,3);
plot(x,y,'r');
dp=polyder(p);
X=polyval(p,y);
Y=polyval(p,x);
X0=X-r*sin(atan(dp));
Y0=Y-r*cos(atan(dp));
X1=X-r*sin(atan(dp));
Y1=Y-r*cos(atan(dp));
hold on
p0=polyfit(X0,Y0,3);
p1=polyfit(X1,Y1,3);
plot(X0,Y0,'b');
plot(X1,Y1,'b'); 展开
3个回答
展开全部
matlab中矩阵维数不一致,可能是之前定义了一个矩阵,后来又定义了一个同名矩阵,2个矩阵维数不同,混用在一起了。
还可能矩阵未定义。
MATLAB错误记录:错误使用 cat 串联的矩阵的维度不一致
今天想用matlab读取一个数据文件。用importdata读入后照例储存成了cell类型。但当我想用cell2mat将其转化为矩阵时却出现了这个问题:
错误使用 cat 串联的矩阵的维度不一致
经检查后发现,cell数组中每个元胞中存储的格式并非double,而是char数组。而且每一行char的长度不一致,从而引发了这个错误。于是我首先想到的解决思路是:
用char()函数把每个元胞的长度统一。
也确实统一了。但随后当我想用str2num()将char数组转换为数字时,却又出现了另一个问题:
y = str2num(x)返回值为空值[]
这很奇怪,于是我检查了一下我的每行字符串数组。发现它存在着古怪的格式问题。举例来说,在原始文件中数据本来是这样的:0.00
但是导入到matlab里以后就变成了了这样:0 . 0 0
数字之间存在的看似空格的空白字符导致str2num()函数无法正常使用。
在这种情况下,不得不对这些空格进行删除。但我的数据量很大,手动删除是不现实的。因此不得已使用了这个函数命令:
y = strrep(x,’ ‘,’’);
结果发现,很奇怪的是,这些空格依然存在。我自己随便编了一个字符串调用这个函数,结果证明函数是可以使用的。可见,数据中这些看似空格的空白字符实际上并非空格。经过试验,他们也不是制表符。由于时间有限,我最终并没有去确认这些空白字符到底是什么。只是简单地将字符串中其中一个空白字符赋给了一个变量作为样例。操作过程大致如下:
d = x(5);
y = strrep(x,x(5),‘’)
结果证明这样做是有效的
还可能矩阵未定义。
MATLAB错误记录:错误使用 cat 串联的矩阵的维度不一致
今天想用matlab读取一个数据文件。用importdata读入后照例储存成了cell类型。但当我想用cell2mat将其转化为矩阵时却出现了这个问题:
错误使用 cat 串联的矩阵的维度不一致
经检查后发现,cell数组中每个元胞中存储的格式并非double,而是char数组。而且每一行char的长度不一致,从而引发了这个错误。于是我首先想到的解决思路是:
用char()函数把每个元胞的长度统一。
也确实统一了。但随后当我想用str2num()将char数组转换为数字时,却又出现了另一个问题:
y = str2num(x)返回值为空值[]
这很奇怪,于是我检查了一下我的每行字符串数组。发现它存在着古怪的格式问题。举例来说,在原始文件中数据本来是这样的:0.00
但是导入到matlab里以后就变成了了这样:0 . 0 0
数字之间存在的看似空格的空白字符导致str2num()函数无法正常使用。
在这种情况下,不得不对这些空格进行删除。但我的数据量很大,手动删除是不现实的。因此不得已使用了这个函数命令:
y = strrep(x,’ ‘,’’);
结果发现,很奇怪的是,这些空格依然存在。我自己随便编了一个字符串调用这个函数,结果证明函数是可以使用的。可见,数据中这些看似空格的空白字符实际上并非空格。经过试验,他们也不是制表符。由于时间有限,我最终并没有去确认这些空白字符到底是什么。只是简单地将字符串中其中一个空白字符赋给了一个变量作为样例。操作过程大致如下:
d = x(5);
y = strrep(x,x(5),‘’)
结果证明这样做是有效的
展开全部
matlab报错矩阵维度不一致如何解决?matlab中分为矩阵的乘法和普通的乘法。
举一个例子,比如,
A=[1 2 3
4 5 6]
是一个2*3的矩阵,
B=[1
3
9]
是一个3*1的矩阵,
C=10;是一个数
当希望算矩阵的乘法时,X=A*B,得到的X是一个2*1的矩阵
当希望矩阵B中每一个数都乘以系数C时,语句为X=A.*B,乘号前有一个点,
对于数组,可以当做矩阵处理,一般情况下都应点乘。
在你的例子中,应该改为
Za=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*sin(IS)-2.*R.*x.*cos(IS))./((R.^2+x.^2).^2);
Ha=-(u0./(2.*pi)).*ms.*((R.*R-x.*x).*cos(IS)+2.*R.*sin(IS))./((R.^2+x.^2).^2);
DeltaT=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*(sin(IS).*sin(I0)-cos(IS).*cos(I0).*cos(A)))-2.*R.*x.*cos(IS).*sin(Is).*cos(I0).*cos(A)./((R.^2+x.^2).^2)。y2的表达式里有n,y=y1.*y2; 可以正确计算的前提是x与n的长度要一致,如果二者不一致,就会出现你看到的错误提示。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
举一个例子,比如,
A=[1 2 3
4 5 6]
是一个2*3的矩阵,
B=[1
3
9]
是一个3*1的矩阵,
C=10;是一个数
当希望算矩阵的乘法时,X=A*B,得到的X是一个2*1的矩阵
当希望矩阵B中每一个数都乘以系数C时,语句为X=A.*B,乘号前有一个点,
对于数组,可以当做矩阵处理,一般情况下都应点乘。
在你的例子中,应该改为
Za=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*sin(IS)-2.*R.*x.*cos(IS))./((R.^2+x.^2).^2);
Ha=-(u0./(2.*pi)).*ms.*((R.*R-x.*x).*cos(IS)+2.*R.*sin(IS))./((R.^2+x.^2).^2);
DeltaT=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*(sin(IS).*sin(I0)-cos(IS).*cos(I0).*cos(A)))-2.*R.*x.*cos(IS).*sin(Is).*cos(I0).*cos(A)./((R.^2+x.^2).^2)。y2的表达式里有n,y=y1.*y2; 可以正确计算的前提是x与n的长度要一致,如果二者不一致,就会出现你看到的错误提示。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
matlab中分为矩阵的乘法和普通的乘法。
举一个例子,比如,
A=[1 2 3
4 5 6]
是一个2*3的矩阵,
B=[1
3
9]
是一个3*1的矩阵,
C=10;是一个数
当希望算矩阵的乘法时,X=A*B,得到的X是一个2*1的矩阵
当希望矩阵B中每一个数都乘以系数C时,语句为X=A.*B,乘号前有一个点,
对于数组,可以当做矩阵处理,一般情况下都应点乘。
在你的例子中,应该改为
Za=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*sin(IS)-2.*R.*x.*cos(IS))./((R.^2+x.^2).^2);
Ha=-(u0./(2.*pi)).*ms.*((R.*R-x.*x).*cos(IS)+2.*R.*sin(IS))./((R.^2+x.^2).^2);
DeltaT=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*(sin(IS).*sin(I0)-cos(IS).*cos(I0).*cos(A)))-2.*R.*x.*cos(IS).*sin(Is).*cos(I0).*cos(A)./((R.^2+x.^2).^2);
应该就没问题了
举一个例子,比如,
A=[1 2 3
4 5 6]
是一个2*3的矩阵,
B=[1
3
9]
是一个3*1的矩阵,
C=10;是一个数
当希望算矩阵的乘法时,X=A*B,得到的X是一个2*1的矩阵
当希望矩阵B中每一个数都乘以系数C时,语句为X=A.*B,乘号前有一个点,
对于数组,可以当做矩阵处理,一般情况下都应点乘。
在你的例子中,应该改为
Za=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*sin(IS)-2.*R.*x.*cos(IS))./((R.^2+x.^2).^2);
Ha=-(u0./(2.*pi)).*ms.*((R.*R-x.*x).*cos(IS)+2.*R.*sin(IS))./((R.^2+x.^2).^2);
DeltaT=(u0./(2.*pi)).*ms.*((R.*R-x.*x).*(sin(IS).*sin(I0)-cos(IS).*cos(I0).*cos(A)))-2.*R.*x.*cos(IS).*sin(Is).*cos(I0).*cos(A)./((R.^2+x.^2).^2);
应该就没问题了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询