matlab报错矩阵维度不一致如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab报错矩阵维度不一致如何解决?相关的知识,希望对你有一定的参考价值。

新人不太会,请教一下为什么这里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');

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),‘’)

结果证明这样做是有效的
参考技术A 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可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
参考技术B 回答

你好,很高兴为你解答,这边为你查询到资料显示:错误使用 / 矩阵维度必须一致。当出现这个错误,说明除数符号写错了,需要从/变成./就可以了

提问

出现这个呢

回答

调整一致就可以

参考技术C 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);
应该就没问题了

以上是关于matlab报错矩阵维度不一致如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

matlab中维度不一样的两段音频怎么合成一段

MATLAB中出现报错:错误使用 horzcat串联的矩阵的维度不一致。各位大佬求解啊

如何解决分割过程中“索引超出矩阵维度”的问题(Matlab)

matlab 如何把三维矩阵拼接

matlab中如何对一个矩阵扩展下啊?

Matlab总提示:串联的矩阵的维度不一致。麻烦看看还有其他问题吗。。