我的“新爱”有问题,matlab:我写了一个函数来使用trapz方法计算积分:`
function [L]=bogenlaenge_innen(schwingungen)
R = 1500; %Ablegeradius
OA = 1; %Amplitude
S = schwingungen; %Schwingungszahl
B = 3.175; %Tapebreite
phi = 0:2.*pi./10000:2.*pi;
BL = sqrt((R-B).^2+2.*(R-B).*OA.*sin(S.*phi)+OA.^2.*(sin(S.*phi)).^2+OA.^2.*S.^2.*(cos(S.*phi)).^2);
L = trapz(phi,BL)`
当我使用命令窗口中的一个特定数字启动它时,这工作正常。现在我想绘制几个S的“L”值。
我在新的* .m文件中执行了以下操作:
W = (0:1:1500);
T = bogenlaenge_innen(W);
plot(W,T)
它就是:
使用时出错。* 矩阵维度必须一致。
有什么问题?它只是一个点?我现在第二天使用matlab,所以请耐心等待;;)提前谢谢你!
PS:只是忽略代码的德语部分,它并不重要:)
答案 0 :(得分:0)
错误的可能性很大,因为您已将其设置为schwingungen
中的元素数量,即代码中的W
,必须等于phi
中的元素数量。由于size(W)
会为您提供与size(0:2.*pi./10000:2.*pi)
不同的结果,因此您会收到错误。
.*
的工作方式是将两个矩阵的每个对应元素相乘,只要它们具有相同的维度或者其中一个是标量。因此,当schwingungen
是标量时,您的代码将会起作用,但是当它是一个向量时,它的代码可能与您硬编码phi
的方式具有不同数量的元素。
对你来说,最简单的行动方式(不一定是最Matlabesque)是循环S
的不同值:
W = (0:1:1500);
T = zeros(size(W); %Preallocate for speed)
for ii = 1:length(W)
T(ii) = bogenlaenge_innen(W(ii));
end
plot(W,T)
答案 1 :(得分:0)
在您的代码中,表达式S
中的数组phi
和sin(S.*phi)
应该具有相同的大小,或者其中一个应该是常量,以便代码正常工作
答案 2 :(得分:0)
在您的函数中,您将phi定义为10001个元素的向量。 在同一个函数中你做S. * phi,所以如果S与phi的长度不同,你将得到“尺寸必须同意”的错误。 在您使用长度为1501的向量调用函数时,您的错误就会出现。
此致