2013-03-07 65 views
0

我需要在函數中使用for-loop來查找串聯和並聯彈簧的所有可能組合的彈簧常量。我有5個彈簧與數據,因此我通過使用polyfit找到斜率(使用F = Kx),在新矩陣中找到每個彈簧常數(K)。尋找彈簧組合的For-Loop?

我已經創建了一個函數,但它返回的數據不是矩陣,而是單個輸出。因此,不是KP(Parallel)= [1 2 3 4 5],它表示KP = 1,KP = 2,KP = 3等。因此,只有最終輸出存儲在我的工作區中。這裏是我對這個函數的代碼。請記住,我需要在for循環中使用+2的原因是因爲我的原始矩陣K和所有彈簧常量都是十列,每個奇數都是0. Ex:K = [1 0 2 0 3 0 4 0 5] ---這是因爲我找到K(斜率)的原始數據集是十列寬。

function[KP,KS]=function_name1(K) 
L=length(K); 
c=1; 
for a=1:2:L 
    for b=a+2:2:L 
     KP=K(a)+K(b) 
     KS=1/((1/K(a))+(1/K(b))) 
    end 
end 
c=c+1; 

然後程序調用該函數

[KP,KS] = function_name1(K);

我試了一下: - 抑制和取消抑制的代碼行(不成功)

任何幫助將不勝感激。

+0

嘗試K = K(K〜= 0)來移除零。主要的問題是,在每一個循環中,你都覆蓋了KP和KS的值。 – nkjt 2013-03-07 10:03:08

回答

1

嗯...

您的代碼似乎可行,但你沒有的東西最實用的方式處理

我會開始進行redimensioningķ,這樣很有道理,那就是它的寬度是5個空間而不是你現在的10個 - 你會在一分鐘內看到爲什麼。

然後,我會調整KP和KS到你想要的大小(我要做一個5X5,因爲這將給所有的排列 - 現在看起來你正在做一些三角形的東西,我不會'別擔心太多的空間,除非你是做這個的說50000個彈簧常數左右)

所以我的代碼看起來像這樣

function[KP,KS]=function_name1(K) 
L=length(K); 
KP = zeros(L); 
KS = zeros(l); 
c=1; 
for a=1:L 
    for b=1:L 
     KP(a,b)=K(a)+K(b) 
     KS(a,b)=1/((1/K(a))+(1/K(b))) 
    end 
end 
c=c+1; 

那麼當你想彈簧1和4的並聯組合KP(1,4)或KP(4,1)將訣竅

+0

我該如何消除K中的零點?乍一看似乎很簡單,但我很困惑。 但是使用KP(a,b)給了我正是我想要的,謝謝! – user2142909 2013-03-07 22:49:33

+0

沒關係,看到上面的評論,它的工作,給了我一個完美的5x5矩陣!謝謝。有沒有辦法刪除重複的數據?例如:矩陣點3,1和1,3是相同的,因爲它們是相同的兩個並行(或串聯)彈簧。 – user2142909 2013-03-07 22:59:01

+0

對不起,回覆遲了 – JaredS 2013-03-22 06:19:18