0

24:60 と 20:50 の b の間の範囲の a で、式 25a+20b=1600 の特定の値を取得するスクリプトを作成しようとしています。

式を満たす a と b のペアを取得する必要があります。

私の最初の問題は、 a と b を小数点以下 1 桁 (a=24.0,24.1,24.2... など) で定義する方法でしたが、その定義を克服したa<-c(240:600)/10ので、最初の質問は次のとおりです。それを行う直接的な方法はありますか? ?

今、私はいくつかのネストされたループを実行し、式がベクトルで満たされるたびに取得できます。 rbind() を使用してこのベクトルをマトリックスまたはデータフレームにアタッチしたいのですが、エラーなしでは機能しませんまたは警告。最初のベクトルの値を取得するだけです。

これが私のコードです。誰かが問題の場所を定義するのを手伝ってくれますか?

solve_ms <- function() {  
  index<-1  
  sol<-data.frame()  
  temp<-vector("numeric")  
  a<-c(240:600)/10  
  b<-c(200:500)/10  

 for (i in 1:length(a)){   
    for (j in 1:length(b)) {   
      c <- 25*a[i]+20*b[j]  
      if(c == 1600) {  
        temp<-c(a[i], b[j]) 
        if(index == 1) {  
          sol<-temp 
          index<-0  
        }  
        else   rbind(sol,temp)  
      }  
     }  
   }  

 return(sol)  
}

コードの問題がどこにあるのかを見つけました。戻り値をデータフレームに割り当てずに rbind を使用しています。{sol<-rbind(sol,temp)} を実行する必要がありましたが、うまくいきます。他の提案もチェックします..ありがとう。

4

2 に答える 2

2

代わりにこれを試してください:

#define a function
fun <- function(a,b) (25*a+20*b) == 1600

浮動小数点の精度が問題になる可能性があるため:

#alternative function
fun <- function(a,b,tol=.Machine$double.eps ^ 0.5) abs(25*a+20*b-1600) < tol

#create all possible combinations
paras <- expand.grid(a=c(240:600)/10, b=20:50)
paras[fun(paras$a,paras$b),]

         a  b
241   48.0 20
594   47.2 21
947   46.4 22
1300  45.6 23
1653  44.8 24
2006  44.0 25
2359  43.2 26
2712  42.4 27
3065  41.6 28
3418  40.8 29
3771  40.0 30
4124  39.2 31
4477  38.4 32
4830  37.6 33
5183  36.8 34
5536  36.0 35
5889  35.2 36
6242  34.4 37
6595  33.6 38
6948  32.8 39
7301  32.0 40
7654  31.2 41
8007  30.4 42
8360  29.6 43
8713  28.8 44
9066  28.0 45
9419  27.2 46
9772  26.4 47
10125 25.6 48
10478 24.8 49
10831 24.0 50
于 2013-10-28T11:03:19.467 に答える
1

問題が本当にこのように単純な場合、つまり 2 変数の線形方程式の根を解く場合は、方程式をいつでも並べ替えて、a で b を書き、対応する値b = (1600-25*a)/20のすべての値を取得し、b で組み合わせをフィルター処理することができます。ba

例えば

a = c(240:600)/10
b = 20:50

RESULTS <- data.frame(a, b = (1600 - 25 * a)/20)[((1600 - 25 * a)/20) %in% b, ]
RESULTS
##        a  b
## 1   24.0 50
## 9   24.8 49
## 17  25.6 48
## 25  26.4 47
## 33  27.2 46
## 41  28.0 45
## 49  28.8 44
## 57  29.6 43
## 65  30.4 42
## 73  31.2 41
## 81  32.0 40
## 97  33.6 38
## 105 34.4 37
## 121 36.0 35
## 137 37.6 33
## 145 38.4 32
## 161 40.0 30
## 177 41.6 28
## 185 42.4 27
## 193 43.2 26
## 201 44.0 25
## 209 44.8 24
## 217 45.6 23
## 225 46.4 22
## 233 47.2 21
## 241 48.0 20
于 2013-10-28T11:32:20.850 に答える