回答編集履歴

1

回答修正

2018/02/06 09:24

投稿

can110
can110

スコア38266

test CHANGED
@@ -1,4 +1,4 @@
1
- 求めたい結果が把握できているか分かりませんが、単純に[numpy.polyfit](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.polyfit.html)で関数の係数を求め、式より傾き0の値を求めればよいかと思います。
1
+ 求めたい結果が把握できているか分かりませんが、単純に[numpy.polyfit](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.polyfit.html)で価格から個数を求める1の係数を求め、利益を求める2次式より傾き0の値を求めればよいかと思います。
2
2
 
3
3
  参考:[NumPy で回帰分析をする](https://qiita.com/ynakayama/items/dae1f5bf5688b7ce8e77)
4
4
 
@@ -10,17 +10,15 @@
10
10
 
11
11
 
12
12
 
13
- # sales = -(price - 10)**2 + 40 = -x**2 + 20*x - 60
13
+ # 0円で100個,1000円で0個売れる
14
14
 
15
15
  s = """
16
16
 
17
17
  price,sales
18
18
 
19
- 0,-60
19
+ 0,100
20
20
 
21
- 10,40
21
+ 1000,0
22
-
23
- 20,-60
24
22
 
25
23
  """
26
24
 
@@ -36,28 +34,32 @@
36
34
 
37
35
 
38
36
 
37
+ # 価格から予想個数を線形回帰
38
+
39
39
  import scipy as sp
40
40
 
41
- ret = sp.polyfit(x, y, 2, full=True)
41
+ p = sp.polyfit(x, y, 1)
42
42
 
43
- print(ret[0]) # [ -1. 20. -60.]
43
+ print(p) # [ -0.1 100]
44
-
45
- (a,b,c) = tuple(ret[0]) # y = a * x**2 + b*x + c
46
44
 
47
45
 
48
46
 
49
- # 2次関数
50
-
51
- def f(x,p):
47
+ cost = 100# 原価
52
-
53
- return p[0] * x**2 + p[1] * x + p[2]
54
48
 
55
49
 
56
50
 
57
- dx0 = -b / (2*a)
51
+ # 利益が最大となる価格、個数、利益額
58
52
 
59
- dy0 = f( dx0, (a,b,c))
53
+ price = - ( p[1] - cost * p[0] ) / (2 * p[0])
60
54
 
55
+ sales = p[0] * price + p[1]
56
+
57
+ profits = p[0] * price ** 2 + ( p[1] - cost * p[0]) * price - cost * p[1]
58
+
59
+
60
+
61
- print( dx0, dy0) # 10.0 40.0
61
+ print(price, sales, profits) # 550.0 45.0 20250.0
62
62
 
63
63
  ```
64
+
65
+ 結果をどのように表示すべき(したい)かについては不明ですので回答は保留します。