2017-10-09 1 views
-6

, 델리게이트 함수의를 간격 및 단부를 시작하고 사용자 는 용액 추측 .이분법 방법 - I 4 개 매개 변수를 사용할 <strong><em>이분법 방법</em></strong> 불리는 기능이 C#

1 우리가 간격 음수의 시작을 입력 할 수 있습니다

public static double Bisection_method (MyFun fun , double start , double 
    end, double? guess) 
    { 
     if (fun(start) * fun(end) > 0) 
     { 
      Console.WriteLine("wrong Entry"); 
      return -1; 
     } 

     double avg,tolerance,sign; 

     avg = (guess.HasValue) ? guess.Value : ((start + end)/2); 
     do 
     { 
      tolerance = Math.Abs (fun(end) - fun(start)); 

      sign = fun(start) * fun(avg); 
      if (sign < 0) 
       end = avg; 
      else if (sign > 0) 
       start = avg; 
      else 
      { 
       if (fun(start) == 0) 
        return start; 
       else return end; 
      } 

      avg = (start + end)/2; 
     } 
     while (tolerance > 0.0001); 

     return end; 
    } 

지금은 처리하는 경우가있다 : 여기 는 기능입니다? 그렇다면 sqrt를 어떻게 처리 할 수 ​​있습니까?

사용자가 0부터 간격 시작을 입력하고 대리인에게 전달하는 함수에 Ln() 또는 Log()가있는 경우 어떻게 처리 할 수 ​​있습니까?

+0

왜이 태그가'java'입니까? – shmosel

+0

물론 다음 두 가지 경우 모두 처리 할 수 ​​있습니다. 이미 텍스트 설명으로 가지고있는 것을 구현하십시오. 내 말은, 기존 코드를 작성했는지 아닌지 말입니다. – AKSW

+0

그리고 nullable double에 대해서는 btw가 유효하고 프로그램이 실행 중입니다 –

답변

2

문제는 : funfun(start)NaN이고 그래서 fun(start) * fun(end)이지만, NaN > 0false로 평가 한 후, Math.Sqrt(double)start가 음수 인 경우.

명시 적 NaN를 확인하기 위해 필요

:

double fstart = fun(start); 
double fend = fun(end); 
if (double.IsNaN(fstart) || double.IsNaN(fend) || fstart * fend > 0) 
{ 
    Console.WriteLine("wrong Entry"); 
    return -1; // this may not be the best way to report an error 
} 

또한, 당신은 예를 처리 할 수있는 루프 내에서 double.IsNaN(fun(avg))을 확인 할 수 있습니다 fun = x => x * Math.Sqrt(x*x-1)start < -1end > 1입니다.

관련 문제