下面推薦的十字路口功能對於數組達到8000個值非常適用,但如果我有一個100000個或更多數值的數組,我會耗盡內存(和I有16g內存),這很可能是由於具有交集函數的repmat命令引起的。如何找到從陣列創建線條時的交點
我試圖找到從數組創建的線的交點。但不斷收到錯誤「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個值偉大的工作,但如果我有10萬個值的數組或更多我會耗盡內存,(我有RAM的16gig)這個最有可能是由於具有交叉函數的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
我不熟悉你使用的語言;不過,在聲明x1,x2和y1的行末尾有單引號。也許這與你的問題有關? – Bobort 2014-09-26 14:47:06
@Ander Biguri不,它不是重複的,請閱讀更新的問題原始答案不適用於大型數組。 – 2014-09-26 15:29:46
我認爲這將有助於如果你能更好地描述你的輸入數據。 X2總是等於x1,並且它們是等間隔和單調的嗎?僅在您的示例中,y2 = abs(y1-max(y1))。如果我們能夠做出這些假設,這將大大簡化計算。在這種情況下不需要fzero或polyval。 – Andy 2014-09-28 14:51:22