###前提・実現したいこと
初めて利用するので、わからないことも多いのですがよろしくお願いします。
学校の課題なのですが、5次方程式を解くプログラミング(Java)という課題が出されました。ax^5+bx^4+cx^3+dx^2+ex+f=0という式に対してa,b,c,d,e,fの値をキーボードで入力させたのちに、任意の値m,nを用いて二分法で解を求めたいのですが、まずサブメソッドにa,b,c,d,e,fの値を代入させてから方程式を確定させたのち、二分法の処理をメインメソッドで表したと考えているのですが、どうした工夫が必要でしょうか?下に現在までのスクリプトを載せます。
###発生している問題・エラーメッセージ
lang
1 2import java.io.BufferedReader; 3import java.io.IOException; 4import java.io.InputStreamReader; 5import java.util.StringTokenizer; 6 7 8public class Houteisiki5 { 9 //関数Func 10 static double Func(double x){ 11 double a,b,c,d,e,f; 12 a=0.0; 13 b=0.0; 14 c=0.0; 15 d=0.0; 16 e=0.0; 17 f=0.0; 18 double y=a*x*x*x*x*x+b*x*x*x*x+c*x*x*x+d*x*x+e*x+f; 19 return y; 20 } 21 public static void main(String[] args) throws IOException { 22 double a,b,c,d,e,f; 23 double m=0.0,n=0.0; 24 double o=0.0; 25 double threshold=1E-10; 26 String s; 27 a=0.0; 28 b=0.0; 29 c=0.0; 30 d=0.0; 31 e=0.0; 32 f=0.0; 33 try 34 { 35 System.out.println("ax^5+bx^4+cx^3+dx^2+ex+fの5次方程式を解きます。"); 36 System.out.println("a,b,c,d,e,fの順番に数字を入力してください。"); 37 System.out.println("a,b,c,d,e,fの入力後は任意の2つのxの値を入力してください。"); 38 InputStreamReader isr=new InputStreamReader(System.in); 39 BufferedReader br=new BufferedReader(isr); 40 s=br.readLine(); 41 StringTokenizer st=new StringTokenizer(s," "); 42 a=Double.parseDouble(st.nextToken()); 43 b=Double.parseDouble(st.nextToken()); 44 c=Double.parseDouble(st.nextToken()); 45 d=Double.parseDouble(st.nextToken()); 46 e=Double.parseDouble(st.nextToken()); 47 f=Double.parseDouble(st.nextToken()); 48 m=Double.parseDouble(st.nextToken()); 49 n=Double.parseDouble(st.nextToken()); 50 51 } 52 catch(NumberFormatException Ellor) 53 { 54 System.out.println("正しい数字を入力してください。"); 55 return; 56 } 57 System.out.println(a); 58 System.out.println(b); 59 System.out.println(c); 60 System.out.println(d); 61 System.out.println(e); 62 System.out.println(f); 63 System.out.println(m); 64 System.out.println(n); 65 System.out.println(Func(m)); 66 if(m>n){ 67 System.out.println("m<nとなるように値を選択してください。"); 68 return; 69 } 70 if(Func(m)*Func(n)>0){ 71 System.out.println("f(a)とf(b)の符号が同じです。"); 72 return; 73 } 74 if(Func(m)==0){ 75 System.out.println(m+"は解です。"); 76 return; 77 } 78 if(Func(n)==0){ 79 System.out.println(n+"は解です。"); 80 return; 81 } 82 //二分法で解を求める。 83 int i=0; 84 while(true){ 85 if(n-m<threshold){ 86 break; 87 } 88 o=(m+n)/2; 89 double fo=Func(o); 90 if(-threshold<=fo&&fo<=threshold){ 91 break; 92 } 93 94 double fm=Func(m); 95 double fn=Func(n); 96 if(fm*fn<0){ 97 n=o; 98 }else if (fm*fn<0){ 99 m=o; 100 } 101 i++; 102 103 String ti=new java.text.DecimalFormat("00").format(i); 104 String tm=new java.text.DecimalFormat("0.00000").format(m); 105 String tn=new java.text.DecimalFormat("0.00000").format(n); 106 String to=new java.text.DecimalFormat("0.00000").format(o); 107 String tf=new java.text.DecimalFormat("0.00000").format(f); 108 System.out.println(ti+" m="+tm+" n=" +"tn"+"o="+to+" f(c)="+tf); 109 } 110 String t=new java.text.DecimalFormat("0.00000").format(o); 111 System.out.println(i+"回目 解:"+t); 112 } 113 } 114
###試したこと
実行するとa,b,c,d,e,fが0.0として計算されてしまいます。
各係数を代入するクラスを作ったのですが、
以下のようにするとerrorが生じます。
lang
1public class Array1 { 2 public static double a,b,c,d,e,f{ 3 String s; 4 a=0.0; 5 b=0.0; 6 c=0.0; 7 d=0.0; 8 e=0.0; 9 f=0.0; 10 try 11 { 12 System.out.println("ax^5+bx^4+cx^3+dx^2+ex+f=0について各係数a,b,c,d,e,fの順に入力してください。"); 13 InputStreamReader isr=new InputStreamReader(System.in); 14 BufferedReader br=new BufferedReader(isr); 15 s=br.readLine(); 16 StringTokenizer st=new StringTokenizer(s," "); 17 a=Double.parseDouble(st.nextToken()); 18 b=Double.parseDouble(st.nextToken()); 19 c=Double.parseDouble(st.nextToken()); 20 d=Double.parseDouble(st.nextToken()); 21 e=Double.parseDouble(st.nextToken()); 22 f=Double.parseDouble(st.nextToken()); 23 } 24 catch(Exception error) 25 { 26 System.out.println(error);
あくまで途中です。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー