matlab - MATLAB,如何解决Index超过数组元素个数(1)?
问题描述
为什么我不能绘制以下代码?错误是:
索引超过数组元素的数量 (1)。
我想要实现的是用户输入一个标量值f
(例如 1500)anfHt
和Hr
. 所以,我想找到 的值ahr
和L
accondingliy 然后绘制L
vs f
。所以在f
轴上我应该在轴上有 100,150,200,250,300,....,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
。方程ahr
和L
现在将对每个元素进行评估,f
结果 ahr
和L
的长度与 相同f
。这种方法消除了对 for 循环的需要,并与 MATLAB 的优势/功能一起使用。
%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;
使用 MATLAB 2019b 运行
推荐阅读
- r - 提取 3D 阵列数据
- node.js - 条纹结帐无法从 Firebase 云功能加载(已修复)
- compiler-construction - 使用访问链接的“显示”的简单安排
- node.js - Node.js 应用结构
- c# - 使用字典按月和年填充 DataGridView
- c# - AngleSharp 组件必须完全可信
- c++ - 在 C++ 中,为什么我发现堆内存访问比堆栈访问快
- mysql - 在 SQL 中插入外键值
- flutter - 如何将返回小部件列表的方法放在另一个小部件列表中?(内联样式)
- r - 在 eval(substitute(list(...)), `_data`, parent.frame()) 中:强制引入的 NA