계산 방법의 비선형 방정식 그룹 구해

10531 단어 계산 방법
비선형 방정식 구근수치 해법 실험목적(1) 이분법과 뉴턴 교체법에 대한 프로그래밍 연습과 탑승 연산을 통해 이분법과 뉴턴법의 차이를 한층 더 체득한다.(2) 할선 교체법의 프로그램을 작성하여 비선형 방정식의 해를 구하고 뉴턴 교체법을 비교한다.
1. 실험 내용 1. 뉴턴 교체법으로 아래 방정식의 뿌리(1)x^2-e^x=0(2)xe^x-1=0(3)lgx+x-2=02, 이분법으로 상기 문제를 구한다. 3. 할선법 프로그램을 작성하여 첫 번째 질문을 구하는 방정식 실험 절차, 프로그램 설계, 실험 결과 및 분석
1. 뉴턴 교체법으로 다음 방정식의 뿌리를 구한다. 1.1 실험 절차: 첫 번째 문제를 예로 들면 실험 절차를 f(x)=x^2-e^x로 f'(x)=2를 구한다.×x-e^xxk+1=xk-f(x)/f'(x) 교체 계산 가능 1.2 프로그램 설계: (1)x^2-e^x=0
#include 
using namespace std;
int main()
{
    double x0,x;
    x=1;
    do
    {
        x0=x;
        double fx=x*x-exp(x);
        double fx2=x*2-exp(x);
        x=x0-(fx/fx2);
    }while(fabs(x-x0)>=1e-5);
    cout<return 0;
}

(2) xe^x-1=0
#include 
using namespace std;
int main()
{
    double x0,x;
    x=1;
    do
    {
        x0=x;
        double fx=x*exp(x)-1;
        double fx2=x*exp(x)+exp(x);
        x=x0-(fx/fx2);
    }while(fabs(x-x0)>=1e-5);
    cout<return 0;
}

분석: 뉴턴 교체법을 통해 f(x)의 도수를 구하고 xk+1=xk-f(x)/f'(x)에 따라 교체한다. 실험을 통해 우리는 5번의 교체를 통해 답을 구할 수 있음을 발견했다.
(3) lgx+x-2=0
#include 
using namespace std;
int main()
{
    double x0,x;
    x=1;
    do
    {
        x0=x;
        double fx=log10(x)+x-2;
        double fx2=1/x+1;
        x=x0-(fx/fx2);
    }while(fabs(x-x0)>=1e-5);
    cout<return 0;
}

분석: 뉴턴 교체법을 통해 f(x)의 도수를 구하고 xk+1=xk-f(x)/f'(x)에 따라 교체한다. 실험을 통해 우리는 9번의 교체를 통해 답을 구할 수 있음을 발견했다. 2, 2분법으로 방정식을 구하는 뿌리 2.1 실험 절차 1)에 따라 우리는 최초의 범위를 정했다. 이 범위는 구간 내 함수가 단조롭고 한 개의 뿌리 2)가mid=(r+l)/2가 f(mid)=0의 조건을 충족시키는지 판단한다.만족하지 않으면 범위를 축소(l,mid)하거나 (mid,r)3)l, r의 구간 길이가 아주 작은 수 eps보다 작을 때 우리는 방정식의 루트 2.2 프로그램 설계 (1)x^2-e^x=0
#include
#define eps 1e-5
using namespace std;

bool check(double k)
{
    if(k*k-exp(k)>1e-4)return true;
    else return false;
}
int main()
{
    double l=-1,r=0;
    int cnt=0;
    while(r-l>eps)
    {
        double mid=l+(r-l)/2;
        //cout<
        cnt++;
        if(check(mid))
        {
            l=mid;
        }
        else r=mid;
    }
printf("cnt=%d
"
,cnt); printf("answer=%.5lf
"
,r); return 0; }

분석: 이분법의 교체 횟수는 요구의 정밀도와 사실 두 수의 범위와 관련이 있음 2)xe^x-1=0
#include
#define eps 1e-4
using namespace std;

bool check(double k)
{
    if(k*exp(k)-1>1e-4)return true;
    else return false;
}
int main()
{
    double l=-1,r=1;
    int cnt=0;
    while(r-l>eps)
    {
        double mid=l+(r-l)/2;
        //cout<
        cnt++;
        if(check(mid))
        {
            r=mid;
        }
        else l=mid;
    }
printf("cnt=%d
"
,cnt); printf("answer=%.7lf
"
,r); return 0; }

3)lgx+x-2=0
#include
#define eps 1e-4
using namespace std;

bool check(double k)
{
    if(log10(k)+k-2>1e-4)return true;
    else return false;
}
int main()
{
    double l=-2,r=2;
    int cnt=0;
    while(r-l>eps)
    {
        double mid=l+(r-l)/2;
        //cout<
        cnt++;
        if(check(mid))
        {
            r=mid;
        }
        else l=mid;
    }
printf("cnt=%d
"
,cnt); printf("answer=%.7lf
"
,r); return 0; }

3. 할선법 제1문 3.1 실험절차 1)령 f(x)=x^2-e^x2)x(k+1)=x_k-f(x k)/((f(x k)) - f(x(k-1))))*(x k-x(k-1))3) 교체 계산 3.2 프로그램 설계 가능
#include 
using namespace std;
int main()
{
    double xk,x1,xk2;
    xk2=1;
    xk=-1;
    do
    {
        x1=xk2;
        double fx=xk*xk-exp(xk);
        double fx2=xk2*xk2-exp(xk2);
        xk2=xk2-(fx2/(fx2-fx))*(xk2-xk);
        xk=x1;
    }while(fabs(xk2-xk)>=1e-5);
    cout<return 0;
}

할선법으로 풀이, 공식x 에 따라(k+1)=x_k-f(x k)/((f(x k)-〗f(x(1)))*(x k-x(k-1))는 교체 횟수는 초기의 설정값과 관련이 있다. 당초의 시작값이 1과 -1로 설정되었을 때 우리는 7번 교체해야 한다. 당초의 시작값이 -0.5와 -1로 설정되었을 때 6번 교체해야 하기 때문에 우리는 두 초기값이 가능한 한 방정식의 옆에 있을 때 교체 횟수를 효과적으로 줄일 수 있음을 알 수 있다.
총결산
뉴턴 교체법은 수렴 속도가 빠르고 중근을 구할 수 있는 장점이 있지만 매번 교체할 때마다 함수의 도수치를 계산해야 하기 때문에 계산량이 매우 크다. 특히 함수의 구조가 비교적 복잡하거나 함수가 전도할 수 없을 때 뉴턴 교체법을 사용하기 어렵다. 이런 단점을 극복하기 위해 이산 뉴턴법을 자주 사용한다. 뉴턴법에 비해 함수 f(x)의 도수를 구하는 것은 피하지만 두 개의 초기 값이 필요하다.그리고 이 두 초기값은 방정식의 뿌리 부근에서 최대한 취하는데 수렴 속도는 일반적으로 뉴턴법보다 느리다.하지만 현행보다 수렴이 빠르다.한편, 이분법은 끊임없이 이분을 통해 구간을 축소하는데 이분의 교체 횟수는 요구하는 정밀도와 설정의 시작 데이터와 관련이 있다.

좋은 웹페이지 즐겨찾기