Matlab 从阵列创建直线时如何查找交点

Matlab 从阵列创建直线时如何查找交点,matlab,math,octave,linear-algebra,Matlab,Math,Octave,Linear Algebra,下面推荐的交叉点函数对于多达8000个值的数组非常有效,但是如果我有一个100000个或更多值的数组,我的内存就会耗尽(并且我有16G的ram),这很可能是由于带有交叉点函数的repmat命令造成的。 So now I'm trying to: 1) cycle though each row in the array which represents a line linea1-6 xvalues = 20 to 30, 30 to 40, 40 to 50, 50 to 60, 60 t

下面推荐的交叉点函数对于多达8000个值的数组非常有效,但是如果我有一个100000个或更多值的数组,我的内存就会耗尽(并且我有16G的ram),这很可能是由于带有交叉点函数的repmat命令造成的。

So now I'm trying to:
1) cycle though each row in the array which represents a line 

linea1-6 xvalues = 20 to 30, 30 to 40, 40 to 50, 50 to 60, 60 to 70, 70 to 80
linea1-6 yvalues =2 to 4, 4 to 3, 3 to 7, 7 to 1, 1 to 8, 8 to 4
lineb1-6 xvalues = 20 to 30, 30 to 40, 40 to 50, 50 to 60, 60 to 70, 70 to 80
lineb1-6 yvalues =6 to 4, 4 to 5, 5 to 1, 1 to 7, 7 to 0, 0 to 4

**I'm having problems coding the for loop to work with polyfit and fzero**


2) store the intersection values found for each line into an array.
This should solve running out of memory issues when using large arrays 
我试图找到由数组创建的线的交点。但是不断得到一个错误“fzero:不是有效的初始括号”“我使用的是倍频程3.8.1(这是一个开放源码版本的matlab)。下面的图像是我试图通过交点处的黑圈得到的。 我是否需要在for循环中使用fzero来循环x和y值数组

clear all,clf, clc,tic

%freq array here
x1=[20,30,40,50,60,70,80]';
x2=[20,30,40,50,60,70,80]';
y1=[2,4,3,7,1,8,4]';
y2=abs(y1-max(y1)); %used to switch high and low amplitude of freq

%fit linear polynomial
p1 = polyfit(x1,y1,1);
p2 = polyfit(x2,y2,1);  

%calculate intersection
x_intersect = fzero(@(x) polyval(p1-p2,x),3);
y_intersect = polyval(p1,x_intersect);

line(x1,y1);
hold on;
line(x2,y2);
plot(x_intersect,y_intersect,'r*')

下面推荐的交叉点函数对于多达8000个值的数组非常有效,但是如果我有一个100000个或更多值的数组,我的内存就会耗尽(并且我有16G的ram),这很可能是由于带有交叉点函数的repmat命令造成的。

So now I'm trying to:
1) cycle though each row in the array which represents a line 

linea1-6 xvalues = 20 to 30, 30 to 40, 40 to 50, 50 to 60, 60 to 70, 70 to 80
linea1-6 yvalues =2 to 4, 4 to 3, 3 to 7, 7 to 1, 1 to 8, 8 to 4
lineb1-6 xvalues = 20 to 30, 30 to 40, 40 to 50, 50 to 60, 60 to 70, 70 to 80
lineb1-6 yvalues =6 to 4, 4 to 5, 5 to 1, 1 to 7, 7 to 0, 0 to 4

**I'm having problems coding the for loop to work with polyfit and fzero**


2) store the intersection values found for each line into an array.
This should solve running out of memory issues when using large arrays 

我不知道您为什么不使用上一个问题的解决方案

但是这里发生的事情(来自医生):

如果
X0
是单个标量,则会生成几个邻近和远处的值 为了获得有效的括号而被探测。如果不是这样的话 如果成功,则函数失败

因此,您最初对
3
的猜测与解决方案相差太远。试试这个:

>> x_intersect = fzero(@(x) polyval(p1-p2,x),30)
x_intersect =  46.667

但是,我不确定您试图通过将一次多项式拟合到数据来做什么,这对我来说没有意义…

我不熟悉您使用的语言;但是,在行的末尾有一个单引号,声明x1、x2和y1。也许这与你的问题有关?@Ander Biguri不,这不是一个重复的问题,请阅读更新后的问题原始答案不适用于大型数组。我认为如果你能更好地描述你的输入数据会有所帮助。X2总是等于x1吗?它们是等距单调的吗?仅在您的示例中,y2=abs(y1 max(y1))。如果我们能够做出这些假设,这将大大简化计算。在这种情况下,不需要fzero或polyval。下面推荐的交叉点函数对于多达8000个值的数组非常有效,但是如果我有一个100000个或更多值的数组,我的内存就会耗尽(并且我有16gig的ram),这很可能是由于带有交叉点函数的repmat命令造成的。所以现在我尝试:1)循环遍历数组中表示一行的每一行2)将交点值存储在数组中。这将解决使用大型阵列时内存不足的问题