MATLAB,如何求解索引超过数组元素数(1)的问题?
为什么我不能绘制以下代码?错误是: 索引超过数组元素数(1) 我试图实现的是,用户输入标量值MATLAB,如何求解索引超过数组元素数(1)的问题?,matlab,for-loop,plot,Matlab,For Loop,Plot,为什么我不能绘制以下代码?错误是: 索引超过数组元素数(1) 我试图实现的是,用户输入标量值f(例如1500)和Ht和Hr。因此,我想找到ahr和L的值,然后绘制L与f的对比图。所以在f轴上,I应该有100150200250300,…,1500和L轴上相应的值 for i = 100:50:f cm = 0; ahr(i) = (1.1*log10(f(i))-0.7)*Hr-1.56*log10(f(i))-0.8; L(i) = 46.3+33
f
(例如1500)和Ht
和Hr
。因此,我想找到ahr
和L
的值,然后绘制L
与f
的对比图。所以在f
轴上,I应该有100150200250300,…,1500和L
轴上相应的值
for i = 100:50:f
cm = 0;
ahr(i) = (1.1*log10(f(i))-0.7)*Hr-1.56*log10(f(i))-0.8;
L(i) = 46.3+33.9*log10(f(i))-13.82*log10(Ht)-ahr+(44.9-6.55*log10(Hr))*log10(d)+cm;
plot(f,L)
end
使用矢量化方法评估地块
假设d
,Ht
和Hr
是标量,那么下面的代码应该可以工作。此脚本使用矢量化方法,其中f
是用于计算公式ahr
和L
的矢量。现在将为f
中的每个元素计算方程ahr
和L
,从而使ahr
和L
的长度与f
相同。这种方法消除了for循环的需要,并与MATLAB的优势/功能相结合
使用MATLAB 2019b运行
%Asking user for input values%
fmax = input("Please type in the maximum f: ");
Ht = input("Please type in the value of Ht: ");
Hr = input("Please type in the value of Hr: ");
cm = 0;
d = 1;
%Creating the vector of points to plot on%
f = (100:50:fmax);
ahr = (1.1*log10(f)-0.7)*Hr-1.56*log10(f) - 0.8;
L = 46.3 + 33.9*log10(f)-13.82*log10(Ht)-ahr+(44.9-6.55*log10(Hr))*log10(d);
clf;
plot(f,L,'Marker','.');
title("Plot L vs f");
xlabel("f"); ylabel("L");
xticks(f);
grid;