Я пытаюсь реализовать метод деления пополам для нахождения решений уравнения.Как найти решение уравнений на основе метода деления пополам
Форма уравнения, как это:
ре^(- х) + д Sin (х) + г сов (х) + с тангенс (х) + т х^2 + и = 0, где 0 ≤ p, r ≤ 20, -20 ≤ Q, S, T ≤ 0 ≤ -20 е U ≤ 20
ввода, например:
1. 0 0 0 0 - 2 11 0 0 0 -1 2
1 -1 1 -1 -1 1
должен дать:
0,7071
невыполним
0,755
Я пытался осуществить это, но я не могу показать результат с 4 знаками после запятой, и я понял, что абы и с в виде xx с одним десятичным знаком. Я думаю, что проблема начинается здесь. Любая помощь будет очень оценена. Вот мой код
class p07{
public static void main(String [] args){
Scanner in = new Scanner(System.in);
int n= in.nextInt();
for (int i=0 ; i < n; i++)
bss(in.nextInt(), in.nextInt(),in.nextInt(), in.nextInt(),in.nextInt(), in.nextInt());
}
public static void bss(int p, int q, int r, int s, int t, int u){
double fa=0, fb=0, fc=0;
boolean flag=true;
double a=-20;
double b=a;
while(flag){
fa=p*Math.exp(a) + q*Math.sin(a) + r*Math.cos(a) + s*Math.tan(a) + t*Math.pow(a,2) + u;
fb=p*Math.exp(b+1) + q*Math.sin(b+1) + r*Math.cos(b+1) + s*Math.tan(b+1) + t*Math.pow(b+1,2) + u;
a++;b++;
if((fa < 0 && fb > 0) || (fa > 0 && fb < 0))
flag=false;
}
System.out.println("a= "+a+", b= "+b);
System.out.println("f(a)= "+fa+", f(b)= "+fb);
int k=4;
double c=0.000;
while(k!=0){
c = (a+b)/2;
fa = p*Math.exp(a) + q*Math.sin(a) + r*Math.cos(a) + s*Math.tan(a) + t*Math.pow(a,2) + u;
fc = p*Math.exp(c) + q*Math.sin(c) + r*Math.cos(c) + s*Math.tan(c) + t*Math.pow(c,2) + u;
if(fa < fc)
b=c;
else
a=c;
k--;
System.out.println("a= "+a+",b= "+b+", c= "+c);
}
double sol =p*Math.exp(c) + q*Math.sin(c) + r*Math.cos(c) + s*Math.tan(c) + t*Math.pow(c,2) + u;
System.out.println(sol);
}
}
Так просто быть ясно, что вы ищете корни уравнения? Потому что я думаю, что в математике существует более одного метода «биссектрисы». Каков первоначальный интервал для поиска? Я не понимаю, где это находится на вашем входе. – markspace
да @markspace корни –