2016-07-08 13 views
-1

現在、私は補間を使ってPythonで作業しています。あなたは温度とrpmのファンテーブルを持っています。入力は温度で、新しい処理済みrpm値を出力します。私は正しい価値を得ていない。手伝って頂けますか?Python Fanspeed Interpolation - 間違った値を返します

TABLE = [ 
(0, 0), 
(20, 10), 
(50, 30), 
(80, 90), 
(100, 100)] 

def interPolation(table, input): 
    if input < table[0][0]: 
     return table[0][1] 
    elif input > table[-1][0]: 
     return table[-1][1] 
    else: 
     for n, _ in enumerate(table): 
      if table[n][0] <= input <= table[n + 1][0]: 
       return (table[n + 1][0] - table[n][0])/(table[n + 1][1] - table[n][1]) * input + table[n][1] 

print interPolation(TABLE, 66) 
+1

小文字(TABLEtableに変更)を使用し、(user_valueに変更input())Pythonの関数にバインドされた名前を使用しないようにして、あなたの代わりに何を得ていますか? – Taegost

答えて

0

私はは、念のためにテーブルをソートすることをお勧めまず第一に、ANS与えるあなたに与え確認し、その部分を修正しようとしています。ソートは関数内で行われます。

あなたはそれをソートしていない、それはあなたが範囲内にあることを確認するためにチェックし、あなたのifelif文が間違っだろう(何らかの理由で)または任意順序を逆言わせて設けられている場合。あるいは、min()およびmax()関数を使用することもできます。

最後に、補間が起こる場所であるelse部分は、私が最も近い記録した値を検索するためのwhile文を使用します(再ソートテーブルはここに非常に重要である)ので、のような計算を実行します。

def interPolation(table, user_value): 
    table = sorted(table, key=lambda x: x[0]) 
    if user_value < table[0][0]: 
     return table[0][1] 
    elif user_value > table[-1][0]: 
     return table[-1][1] 
    else: 
     i = 0 
     while user_value >= table[i][0]: 
      i += 1 
     return table[i-1][1] + (user_value - table[i-1][0]) * (table[i][1] - table[i-1][1])/(table[i][0] - table[i-1][0]) 

table_inp = [(0, 0), (20, 10), (50, 30), (80, 90), (100, 100)] 

print(interPolation(table_inp, 66)) # returns 62.0 

気付いたことがあるように、変数名を変更しました。一般的なルールは、あなたはどのような価値を期待している

0

私はあなたがやっている補間の種類を知りませんが、あなたが線形補間をやろうとしているようだ、あなたはここで間違った計算式を適用しているような場合には、すべての式の第一は次元が賢明正しくありません。 。私はそれが正しいANS

data = [ 
(0, 0), 
(20, 10), 
(50, 30), 
(80, 90), 
(100, 100)] 

def interPolation(table, temp): 
    if temp < table[0][0]: 
     return table[0][1] 
    elif temp > table[-1][0]: 
     return table[-1][1] 
    else: 
     for n, _ in enumerate(table): 
      if table[n][0] <= temp <= table[n + 1][0]: 
       return (table[n + 1][1] - table[n][1])/(table[n + 1][0] - table[n][0]) * (temp-table[n][0]) + table[n][1] 

print interPolation(data, 66) 

は62

+0

はい、線形補間です。あなたのコードは良く見えますが、私は正しい価値を得ていません。例えば入力= 10、出力= 0 – schui

+0

入力10の場合は出力5、Python 2を使用している場合は '__future__'から除算を入力してください。 – Eular

関連する問題