質問編集履歴

6

2021/12/09 12:49

投稿

famikun
famikun

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### プログラムを書いています。ニュートン法のプログラムです。
1
+ ### プログラムを書いています
2
2
 
3
3
  ここに質問の内容を詳しく書いてください。
4
4
 
@@ -16,10 +16,6 @@
16
16
 
17
17
 
18
18
 
19
- m=10^(-6)
20
-
21
- l=10^(-3)
22
-
23
19
  y<-1000
24
20
 
25
21
  p<-c(y)
@@ -28,41 +24,21 @@
28
24
 
29
25
  x<-c(y)
30
26
 
31
- p[1]<-p
32
-
33
- q[1]<-q
34
-
35
27
  x[2]<-(p[1]+q[1])/2
36
28
 
37
- kduf<-function(x)x^2+x-6
29
+ kduf<-function(x)x^2+x
38
30
 
39
31
  while(y<1000){
40
32
 
41
- x[y+1]<-(p[y]+q[y])/2
33
+ x[y+1]<-(p[y]+q[y])/5
42
-
43
- if(abs(kduf(x[y+1]))<m)|(abs(p[y]-q[y])<l) {
44
-
45
- print(x[y+1])
46
-
47
- }else if(kduf(a[y])*kduf(x[y+1])<0){
48
34
 
49
35
  p[y+1]<-p[y]
50
36
 
51
- q[y+1]<-x[y+1]
52
-
53
- }else{
54
-
55
- p[y+1]<-x[y+1]
56
-
57
- q[y+1]<-q[y]
58
-
59
-
60
-
61
- }
37
+ }
62
38
 
63
39
  y<-y+1
64
40
 
65
- }
41
+ }
66
42
 
67
43
 
68
44
 
@@ -71,8 +47,6 @@
71
47
 
72
48
 
73
49
  ### 試したこと
74
-
75
- スクリプトの問題を探してみた
76
50
 
77
51
  yの値を小さくして実行を試みた
78
52
 

5

2021/12/09 12:49

投稿

famikun
famikun

スコア2

test CHANGED
File without changes
test CHANGED
@@ -20,47 +20,49 @@
20
20
 
21
21
  l=10^(-3)
22
22
 
23
- i<-1000
23
+ y<-1000
24
24
 
25
- a<-c(i)
25
+ p<-c(y)
26
26
 
27
- b<-c(i)
27
+ q<-c(y)
28
28
 
29
- x<-c(i)
29
+ x<-c(y)
30
30
 
31
- a[1]<-a
31
+ p[1]<-p
32
32
 
33
- b[1]<-b
33
+ q[1]<-q
34
34
 
35
- x[2]<-(a[1]+b[1])/2
35
+ x[2]<-(p[1]+q[1])/2
36
36
 
37
- f<-function(x)x^2+x-6
37
+ kduf<-function(x)x^2+x-6
38
38
 
39
- while(i<1000){
39
+ while(y<1000){
40
40
 
41
- x[i+1]<-(a[i]+b[i])/2
41
+ x[y+1]<-(p[y]+q[y])/2
42
42
 
43
- if(abs(f(x[i+1]))<m)||(abs(a[i]-b[i])<l) {
43
+ if(abs(kduf(x[y+1]))<m)|(abs(p[y]-q[y])<l) {
44
44
 
45
- print(x[i+1])
45
+ print(x[y+1])
46
46
 
47
- }else if(f(a[i])*f(x[i+1])<0){
47
+ }else if(kduf(a[y])*kduf(x[y+1])<0){
48
48
 
49
- a[i+1]<-a[i]
49
+ p[y+1]<-p[y]
50
50
 
51
- b[i+1]<-x[i+1]
51
+ q[y+1]<-x[y+1]
52
52
 
53
53
  }else{
54
54
 
55
- a[i+1]<-x[i+1]
55
+ p[y+1]<-x[y+1]
56
56
 
57
- b[i+1]<-b[i]
57
+ q[y+1]<-q[y]
58
58
 
59
- }
59
+
60
60
 
61
- i<-i+1
61
+ }
62
62
 
63
+ y<-y+1
64
+
63
- }
65
+ }
64
66
 
65
67
 
66
68
 
@@ -72,7 +74,7 @@
72
74
 
73
75
  スクリプトの問題を探してみた
74
76
 
75
- iの値を小さくして実行を試みた
77
+ yの値を小さくして実行を試みた
76
78
 
77
79
 
78
80
 

4

2021/12/09 07:08

投稿

famikun
famikun

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### Rでプログラムを書いています。ニュートン法のプログラムです。
1
+ ### プログラムを書いています。ニュートン法のプログラムです。
2
2
 
3
3
  ここに質問の内容を詳しく書いてください。
4
4
 

3

2021/12/09 04:37

投稿

famikun
famikun

スコア2

test CHANGED
@@ -1 +1 @@
1
- Rのプログラムが動かないです
1
+ プログラムが動かない
test CHANGED
File without changes

2

2021/12/09 04:34

投稿

famikun
famikun

スコア2

test CHANGED
File without changes
test CHANGED
File without changes

1

2021/12/09 04:32

投稿

famikun
famikun

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### Rでプログラムを書いています。方程式f(x)=x^3+6*x^2+21*x+32(=0)の解を二分探索によって近似して求めるというプログラムです。(ニュートン法の関数は使用しない書きたいです。このコードの問題点と改善方法を知りたいです。)
1
+ ### Rでプログラムを書いています。ニュートン法のプログラムです。
2
2
 
3
3
  ここに質問の内容を詳しく書いてください。
4
4
 
@@ -8,9 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- ### 発生している問題・エラーメッセージ
11
+ ### 発生している問題・
12
-
13
- Rstudio上で実行したのですがエラーが出ないのに求めたい解が出てきません。スクリプトの問題が分からず困っています。
14
12
 
15
13
 
16
14
 
@@ -18,47 +16,35 @@
18
16
 
19
17
 
20
18
 
21
- a=-3
19
+ m=10^(-6)
22
20
 
23
- b=0
21
+ l=10^(-3)
24
22
 
25
- δ=10^(-10)
26
-
27
- ε=10^(-6) # ここまで初期条件
28
-
29
- i<-10000
23
+ i<-1000
30
24
 
31
25
  a<-c(i)
32
26
 
33
27
  b<-c(i)
34
28
 
35
- x<-c(i) # 数列a[i],b[i],x[i]をベクトルとして扱う
29
+ x<-c(i)
36
30
 
37
31
  a[1]<-a
38
32
 
39
33
  b[1]<-b
40
34
 
41
- x[2]<-(a[1]+b[1])/2 # xの初期値
35
+ x[2]<-(a[1]+b[1])/2
42
36
 
43
- f<-function(x)x^3+6*x^2+21*x+32 # 関数を定義
37
+ f<-function(x)x^2+x-6
44
38
 
45
- while(i<10000){
39
+ while(i<1000){
46
40
 
47
- x[i+1]<-(a[i]+b[i])/2 # xの定義
41
+ x[i+1]<-(a[i]+b[i])/2
48
42
 
49
- p=(abs(f(x[i+1]))<δ)||(abs(a[i]-b[i])<ε) # 条件分岐の最初の条件をpでおいた
43
+ if(abs(f(x[i+1]))<m)||(abs(a[i]-b[i])<l) {
50
44
 
45
+ print(x[i+1])
51
46
 
52
-
53
-   if(is.na(p)) {p=FALSE # TRUE FALSEが必要だというエラーになるのを防ぐ
54
-
55
- }else if(p){
56
-
57
- break # pが成立したら終了
58
-
59
- return (x[i+1]) # 求めたい解を出す
60
-
61
- }else if(f(a[i])*f(x[i+1])<0){ # もしこうだったら以下のようにa[i+1]とb[i+1]を新しい値に上書き
47
+ }else if(f(a[i])*f(x[i+1])<0){
62
48
 
63
49
  a[i+1]<-a[i]
64
50
 
@@ -66,15 +52,15 @@
66
52
 
67
53
  }else{
68
54
 
69
- a[i+1]<-x[i+1] # その他の場合は以下のように上書き
55
+ a[i+1]<-x[i+1]
70
56
 
71
57
  b[i+1]<-b[i]
72
58
 
73
59
  }
74
60
 
75
- i<-i+1 # iを一つ増やす
61
+ i<-i+1
76
62
 
77
- } # 以上の動作を求めたい解が出るまで繰り返す
63
+ }
78
64
 
79
65
 
80
66
 
@@ -95,7 +81,3 @@
95
81
 
96
82
 
97
83
  ### 補足情報(FW/ツールのバージョンなど)
98
-
99
- a<x<bの範囲内の解を求める
100
-
101
- (a=-3 b=0)