使用倍频程/matlab查找绘图可能交叉的位置

使用倍频程/matlab查找绘图可能交叉的位置,matlab,octave,discrete-mathematics,nonlinear-functions,Matlab,Octave,Discrete Mathematics,Nonlinear Functions,我有几个数据点绘制在下面,我想找到振幅值与4交叉时的频率值。我在下面的示例中包括了一个示例以及数据点。我用图表圈出了答案,但我不知道如何用数学方法计算它,并得到我想要的所有频率值。如何使用octave/matlab实现这一点?还有一个数学术语来描述我要做的事情吗 在这个例子中,我试图获得5个频率(但这只是一个例子),我知道有两个答案是30和80,但不确定如何获得其余的频率。完整的名单可能有数千人我使用的是倍频程3.8.1 clear all,clf, clc,tic %graphics_tool

我有几个数据点绘制在下面,我想找到振幅值4交叉时的频率值。我在下面的示例中包括了一个示例以及数据点。我用图表圈出了答案,但我不知道如何用数学方法计算它,并得到我想要的所有频率值。如何使用octave/matlab实现这一点?还有一个数学术语来描述我要做的事情吗

在这个例子中,我试图获得5个频率(但这只是一个例子),我知道有两个答案是3080,但不确定如何获得其余的频率。完整的名单可能有数千人我使用的是倍频程3.8.1

clear all,clf, clc,tic
%graphics_toolkit gnuplot %use this for now it's older but allows zoom
freq=[20,30,40,50,60,70,80];
amp_orig=[2,4,3,7,1,8,4];
amp_inv=[6,4,5,1,7,0,4];


plot(freq,amp_orig,'-bo')
hold on
plot(freq,amp_inv,'-r*')
xlabel ("Frequency");
ylabel ("Amplitude");


谢谢

如果您有权访问Matlabs Mapping Toolbox,则可以使用函数
polyxpoly()
轻松解决您的问题。它将找到两个图形的交点。它们甚至不必是直线,也可以是多边形。以下是您案例的一个示例:

%graphics_toolkit gnuplot %use this for now it's older but allows zoom
freq=[20,30,40,50,60,70,80];
amp_orig=[2,4,3,7,1,8,4];
amp_inv=[6,4,5,1,7,0,4];

plot(freq,amp_orig,'-bo')
hold on
plot(freq,amp_inv,'-r*')
xlabel ('Frequency');
ylabel ('Amplitude');

%// find and add intersections
[xi,yi] = polyxpoly(freq,amp_orig,freq,amp_inv)
plot(xi, yi,'ro','markersize',20) %// draw the red circles automatically :-)
结果看起来像这样

试着从文件交换开始,它在八度音阶下似乎工作得很好
x0
是感兴趣的频率:

>> [x0,y0,iout,jout] = intersections(freq,amp_orig,freq,amp_inv)
x0 =

   30.000
   30.000
   42.500
   55.000
   64.286
   80.000

y0 =

   4.0000
   4.0000
   4.0000
   4.0000
   4.0000
   4.0000

iout =

   2.0000
   2.0000
   3.2500
   4.5000
   5.4286
   7.0000

jout =

   2.0000
   2.0000
   3.2500
   4.5000
   5.4286
   7.0000

这有用吗?要回答你的另一个问题,你要做的是找到线的交点。问题很好地概述了各种技术。@amo谢谢,但此函数不能与octave 3.8.1 Hanks一起使用,但我使用的是octave,而且映射工具箱似乎没有polyxpoly函数yet@RickT好的,
polyxpoly()
是映射工具箱的一部分,我应该在回答中提到这一点。太糟糕了,这会让你的问题变得很容易。