亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nlequation.cpp

?? 用牛頓法求解積分
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//////////////////////////////////////////////////////////////////////
// NLequation.cpp
//
// 求解線性方程組的類 CNLequation 的實現代碼
//
// 周長發編制, 2002/8
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NLequation.h"
#include "LEquations.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// 基本構造函數
//////////////////////////////////////////////////////////////////////
CNLequation::CNLequation()
{
}

//////////////////////////////////////////////////////////////////////
// 析構函數
//////////////////////////////////////////////////////////////////////
CNLequation::~CNLequation()
{
}

//////////////////////////////////////////////////////////////////////
// 求非線性方程實根的對分法
//
// 調用時,須覆蓋計算方程左端函數f(x)值的虛函數double Func(double x)
//
// 參數:
// 1. int nNumRoots - 在[xStart, xEnd]內實根個數的預估值
// 2. double x[] - 一維數組,長度為m。返回在區間[xStart, xEnd]內搜索到
//                 的實根,實根個數由函數值返回
// 3. double xStart - 求根區間的左端點
// 4. double xEnd - 求根區間的右端點
// 5. double dblStep - 搜索求根時采用的步長
// 6. double eps - 精度控制參數,默認值為0.000001
//
// 返回值:int 型,求得的實根的數目
//////////////////////////////////////////////////////////////////////
int CNLequation::GetRootBisect(int nNumRoots, double x[], double xStart, double xEnd, double dblStep, double eps /*= 0.000001*/)
{
	int n,js;
    double z,y,z1,y1,z0,y0;

	// 根的個數清0
    n = 0; 

	// 從左端點開始搜索
	z = xStart; 
	y = Func(z);

	// 循環求解
    while ((z<=xEnd+dblStep/2.0)&&(n!=nNumRoots))
    { 
		if (fabs(y)<eps)
        { 
			n=n+1; 
			x[n-1]=z;
            z=z+dblStep/2.0; 
			y=Func(z);
        }
        else
        { 
			z1=z+dblStep; 
			y1=Func(z1);
            
			if (fabs(y1)<eps)
            { 
				n=n+1; 
				x[n-1]=z1;
                z=z1+dblStep/2.0; 
				y=Func(z);
            }
            else if (y*y1>0.0)
            { 
				y=y1; 
				z=z1;
			}
            else
            { 
				js=0;
                while (js==0)
                { 
					if (fabs(z1-z)<eps)
                    { 
						n=n+1; 
						x[n-1]=(z1+z)/2.0;
                        z=z1+dblStep/2.0; y=Func(z);
                        js=1;
                    }
                    else
                    { 
						z0=(z1+z)/2.0; 
						y0=Func(z0);
                        if (fabs(y0)<eps)
                        { 
							x[n]=z0; 
							n=n+1; 
							js=1;
                            z=z0+dblStep/2.0; 
							y=Func(z);
                        }
                        else if ((y*y0)<0.0)
                        { 
							z1=z0; 
							y1=y0;
						}
                        else 
						{ 
							z=z0; 
							y=y0;
						}
                    }
                }
            }
        }
    }
    
	// 返回實根的數目
	return(n);
}

//////////////////////////////////////////////////////////////////////
// 求非線性方程一個實根的牛頓法
//
// 調用時,須覆蓋計算方程左端函數f(x)及其一階導數f'(x)值的虛函數
//                  void Func(double x, double y[])
//         y(0) 返回f(x)的值
//         y(1) 返回f'(x)的值
//
// 參數:
// 1. double *x - 傳入迭代初值(猜測解),返回在區間求得的一個實根
// 2. int nMaxIt - 遞歸次數,默認值為60
// 3. double eps - 精度控制參數,默認值為0.000001
//
// 返回值:BOOL 型,求解是否成功
//////////////////////////////////////////////////////////////////////
BOOL CNLequation::GetRootNewton(double* x, int nMaxIt /*= 60*/, double eps /*= 0.000001*/)
{ 
    int l;
    double y[2],d,p,x0,x1;

	// 條件值
    l=nMaxIt; 
	x0=*x;
    Func(x0,y);
    
	// 求解,控制精度
	d=eps+1.0;
    while ((d>=eps)&&(l!=0))
    { 
		if (y[1] == 0.0)
			return FALSE;

        x1=x0-y[0]/y[1];
        Func(x1,y);
        
		d=fabs(x1-x0); 
		p=fabs(y[0]);
        if (p>d) 
			d=p;
        x0=x1; 
		l=l-1;
    }
    
	*x=x1;

	return TRUE;
}

//////////////////////////////////////////////////////////////////////
// 求非線性方程一個實根的埃特金迭代法
//
// 調用時,須覆蓋計算方程左端函數f(x)值的虛函數double Func(double x)
//
// 參數:
// 1. double *x - 傳入迭代初值(猜測解),返回在區間求得的一個實根
// 2. int nMaxIt - 遞歸次數,默認值為60
// 3. double eps - 精度控制參數,默認值為0.000001
//
// 返回值:BOOL 型,求解是否成功
//////////////////////////////////////////////////////////////////////
BOOL CNLequation::GetRootAitken(double* x, int nMaxIt /*= 60*/, double eps /*= 0.000001*/)
{ 
	int flag,l;
    double u,v,x0;

	// 求解條件
    l=0; 
	x0=*x; 
	flag=0;

	// 迭代求解
    while ((flag==0)&&(l!=nMaxIt))
    { 
		l=l+1; 
        u=Func(x0); 
		v=Func(u);
        if (fabs(u-v)<eps) 
		{ 
			x0=v; 
			flag=1; 
		}
        else 
			x0=v-(v-u)*(v-u)/(v-2.0*u+x0);
    }
    
	*x=x0; 
    
	// 是否在指定的迭代次數內達到求解精度
	return (nMaxIt > l);
}

//////////////////////////////////////////////////////////////////////
// 求非線性方程一個實根的連分式解法
//
// 調用時,須覆蓋計算方程左端函數f(x)值的虛函數double Func(double x)
//
// 參數:
// 1. double *x - 傳入迭代初值(猜測解),返回在區間求得的一個實根
// 2. double eps - 精度控制參數,默認值為0.000001
//
// 返回值:BOOL 型,求解是否成功
//////////////////////////////////////////////////////////////////////
BOOL CNLequation::GetRootPq(double* x, double eps /*= 0.000001*/)
{ 
    int i,j,m,it,l;
    double a[10],y[10],z,h,x0,q;

	// 求解條件
    l=10; 
	q=1.0e+35; 
	x0=*x; 
	h=0.0;
    
	// 連分式求解
	while (l!=0)
    { 
		l=l-1; 
		j=0; 
		it=l;
        while (j<=7)
        { 
			if (j<=2) 
				z=x0+0.1*j;
            else 
				z=h;
			
			y[j]=Func(z);
            h=z;
            if (j==0) 
				a[0]=z;
            else
            { 
				m=0; 
				i=0;
                while ((m==0)&&(i<=j-1))
                { 
					if (fabs(h-a[i])+1.0==1.0) 
						m=1;
                    else 
						h=(y[j]-y[i])/(h-a[i]);
                     
					i=i+1;
                }
                a[j]=h;
                if (m!=0) 
					a[j]=q;
                h=0.0;
                for (i=j-1; i>=0; i--)
                { 
					if (fabs(a[i+1]+h)+1.0==1.0) 
						h=q;
                    else 
						h=-y[i]/(a[i+1]+h);
                }
                 
				h=h+a[0];
            }
             
			if (fabs(y[j])>=eps) 
				j=j+1;
            else 
			{ 
				j=10; 
				l=0;
			}
		}
        
		x0=h;
	}

    *x=h;
    
	// 是否在10階連分式內求的實根?
	return (10>it);
}

//////////////////////////////////////////////////////////////////////
// 求實系數代數方程全部根的QR方法
//
// 參數:
// 1. int n - 多項式方程的次數
// 2. double dblCoef[] - 一維數組,長度為n+1,按降冪次序依次存放n次多項式方程的n+1個系數
// 3. double xr[] - 一維數組,長度為n,返回n個根的實部
// 4. double xi[] - 一維數組,長度為n,返回n個根的虛部
// 5. int nMaxIt - 迭代次數,默認值為 60
// 6. double eps - 精度控制參數,默認值為 0.000001
//
// 返回值:BOOL 型,求解是否成功
//////////////////////////////////////////////////////////////////////
BOOL CNLequation::GetRootQr(int n, double dblCoef[], double xr[], double xi[], int nMaxIt /*= 60*/, double eps /*= 0.000001*/)
{ 
	// 初始化矩陣
	CMatrix mtxQ;
	mtxQ.Init(n, n);
    double *q = mtxQ.GetData();

	// 構造赫申伯格矩陣
    for (int j=0; j<=n-1; j++)
		q[j]=-dblCoef[n-j-1]/dblCoef[n];

    for (j=n; j<=n*n-1; j++)
		q[j]=0.0;

    for (int i=0; i<=n-2; i++)
		q[(i+1)*n+i]=1.0;

	// 求赫申伯格矩陣的特征值和特征向量,即為方程的解
    if (mtxQ.HBergEigenv(xr, xi, nMaxIt, eps))
		return TRUE;

	return FALSE;
}

//////////////////////////////////////////////////////////////////////
// 求實系數代數方程全部根的牛頓下山法
//
// 參數:
// 1. int n - 多項式方程的次數
// 2. double dblCoef[] - 一維數組,長度為n+1,按降冪次序依次存放n次多項式方程的n+1個系數
// 3. double xr[] - 一維數組,長度為n,返回n個根的實部
// 4. double xi[] - 一維數組,長度為n,返回n個根的虛部
//
// 返回值:BOOL 型,求解是否成功
//////////////////////////////////////////////////////////////////////
BOOL CNLequation::GetRootNewtonDownHill(int n, double dblCoef[], double xr[], double xi[])
{ 
	int m,i,jt,k,is,it;
    double t,x,y,x1,y1,dx,dy,p,q,w,dd,dc,c;
    double g,u,v,pq,g1,u1,v1;
    
	// 初始判斷
    m=n;
    while ((m>0)&&(fabs(dblCoef[m])+1.0==1.0)) 
		m=m-1;

	// 求解失敗
    if (m<=0)
		return FALSE;

    for (i=0; i<=m; i++)
		dblCoef[i]=dblCoef[i]/dblCoef[m];
    
	for (i=0; i<=m/2; i++)
    { 
		w=dblCoef[i]; 
		dblCoef[i]=dblCoef[m-i]; 
		dblCoef[m-i]=w;
	}
    
	// 迭代求解
	k=m; 
	is=0; 
	w=1.0;
    jt=1;
    while (jt==1)
    { 
		pq=fabs(dblCoef[k]);
		while (pq<1.0e-12)
        { 
			xr[k-1]=0.0; 
			xi[k-1]=0.0; 
			k=k-1;
            if (k==1)
            { 
				xr[0]=-dblCoef[1]*w/dblCoef[0]; 
				xi[0]=0.0;
                
				return TRUE;
            }
            
			pq=fabs(dblCoef[k]);
        }
	
		q=log(pq); 
		q=q/(1.0*k); 
		q=exp(q);
        p=q; 
		w=w*p;
        for (i=1; i<=k; i++)
        { 
			dblCoef[i]=dblCoef[i]/q; 
			q=q*p;
		}
        
		x=0.0001; 
		x1=x; 
		y=0.2; 
		y1=y; 
		dx=1.0;
        g=1.0e+37; 
l40:
        u=dblCoef[0]; v=0.0;
        for (i=1; i<=k; i++)
        { 
			p=u*x1; 
			q=v*y1;
            pq=(u+v)*(x1+y1);
            u=p-q+dblCoef[i]; 
			v=pq-p-q;
        }
        
		g1=u*u+v*v;
        if (g1>=g)
        { 
			if (is!=0)
            { 
				it=1;
                g65(&x,&y,&x1,&y1,&dx,&dy,&dd,&dc,&c,&k,&is,&it);
                if (it==0) 
					goto l40;
            }
            else
            { 
				g60(&t,&x,&y,&x1,&y1,&dx,&dy,&p,&q,&k,&it);
                if (t>=1.0e-03) 
					goto l40;
                
				if (g>1.0e-18)
                { 
					it=0;
                    g65(&x,&y,&x1,&y1,&dx,&dy,&dd,&dc,&c,&k,&is,&it);
                    if (it==0) 
						goto l40;
                }
            }
            
			g90(xr,xi,dblCoef,&x,&y,&p,&q,&w,&k);
        }
        else
        { 
			g=g1; 
			x=x1; 
			y=y1; 
			is=0;
            if (g<=1.0e-22)
				g90(xr,xi,dblCoef,&x,&y,&p,&q,&w,&k);
            else
            { 
				u1=k*dblCoef[0]; 
				v1=0.0;
                for (i=2; i<=k; i++)
                { 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品每日更新| 国产伦精品一区二区三区免费| 婷婷一区二区三区| 国产白丝精品91爽爽久久| 在线观看国产91| 国产丝袜欧美中文另类| 日本少妇一区二区| 色综合久久综合网| 久久久久久亚洲综合| 亚洲成人免费在线观看| 成人精品视频网站| 久久中文娱乐网| 奇米色一区二区| 欧美少妇bbb| 一区二区在线观看av| 国产精品一区二区三区乱码| 这里只有精品电影| 亚洲精品视频在线| 97se亚洲国产综合自在线| 精品国内二区三区| 日韩精品1区2区3区| 色就色 综合激情| 日韩伦理免费电影| 成人av综合一区| 欧美国产97人人爽人人喊| 国产中文字幕一区| 精品国产乱码久久久久久久久| 午夜视黄欧洲亚洲| 欧美男男青年gay1069videost| 亚洲美女精品一区| 色综合天天综合色综合av| 国产日韩欧美精品电影三级在线| 九九九精品视频| 欧美变态凌虐bdsm| 久久精品av麻豆的观看方式| 欧美蜜桃一区二区三区| 亚洲一级二级在线| 欧美日韩国产首页| 石原莉奈在线亚洲二区| 欧美日韩国产三级| 日韩国产在线观看一区| 欧美日韩高清影院| 日韩国产欧美视频| 久久综合色播五月| 波多野结衣一区二区三区| 国产精品国产自产拍高清av| 色综合天天综合狠狠| 亚洲免费三区一区二区| 在线视频观看一区| 性做久久久久久| 日韩视频在线永久播放| 国内精品伊人久久久久av一坑 | 99久久99久久综合| 亚洲日韩欧美一区二区在线| 一本久久a久久免费精品不卡| 亚洲国产综合人成综合网站| 在线成人av影院| 韩国精品主播一区二区在线观看 | 成人黄色av电影| 亚洲色图视频免费播放| 欧美三级日韩三级| 免费看日韩精品| 国产欧美精品一区| 欧美综合欧美视频| 极品美女销魂一区二区三区免费| 国产日韩欧美在线一区| 一本一本久久a久久精品综合麻豆| 亚洲伊人色欲综合网| 精品乱人伦小说| 97久久精品人人澡人人爽| 午夜精品在线看| 久久嫩草精品久久久久| 色美美综合视频| 久久不见久久见中文字幕免费| 国产精品午夜在线| 欧美精品日日鲁夜夜添| 国产露脸91国语对白| 一区二区三区在线观看欧美| 欧美大片拔萝卜| 日本韩国精品在线| 国产精品1区二区.| 亚洲国产精品一区二区www在线 | 国产亚洲精品7777| 欧美久久一区二区| 99久久免费精品| 国产一区不卡在线| 日一区二区三区| 一区视频在线播放| 2024国产精品| 欧美日韩mp4| 色欧美乱欧美15图片| 狠狠色综合日日| 天天综合色天天| 亚洲欧美日韩一区二区| 久久综合久久久久88| 欧美日韩久久久一区| 99精品视频中文字幕| 国产精品自拍在线| 美女网站色91| 亚洲国产精品久久人人爱| 国产精品女人毛片| 久久精品男人天堂av| 69堂国产成人免费视频| 色吊一区二区三区| 成人在线综合网| 国产精品888| 国产高清在线精品| 国产在线精品免费av| 日本午夜一区二区| 婷婷综合另类小说色区| 亚洲国产精品一区二区www| 亚洲乱码中文字幕综合| 国产精品成人免费精品自在线观看| 国产日韩欧美一区二区三区综合| 久久新电视剧免费观看| 欧美精品一区二区三区久久久| 日韩一二在线观看| 日韩一级免费一区| 精品久久久久久久久久久久久久久久久 | 色综合天天综合狠狠| 91在线观看成人| 色呦呦国产精品| 欧美性色综合网| 欧美日韩一区精品| 911国产精品| 日韩欧美成人激情| 久久久久国产精品厨房| 久久久99久久精品欧美| 日本一区二区在线不卡| 国产精品欧美一级免费| 亚洲欧美日韩国产一区二区三区| 亚洲美女视频一区| 午夜欧美一区二区三区在线播放| 亚洲电影一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 喷白浆一区二区| 麻豆一区二区三| 国产91精品精华液一区二区三区| 成人午夜电影久久影院| 91丝袜国产在线播放| 在线观看av一区| 欧美一区二区精品| 中文字幕av一区二区三区高| 一区二区视频免费在线观看| 亚洲国产精品久久久久秋霞影院 | 欧美一级久久久久久久大片| 中文字幕亚洲一区二区av在线 | 秋霞av亚洲一区二区三| 麻豆成人91精品二区三区| 韩日精品视频一区| 91在线国产观看| 91精品国产综合久久国产大片| wwwwxxxxx欧美| 一区二区成人在线视频| 美女一区二区三区| 99久久久无码国产精品| 欧美高清www午色夜在线视频| 精品国产91亚洲一区二区三区婷婷| 国产精品久久久久久久久快鸭| 亚洲影视在线播放| 国产精品1区2区3区| 欧洲一区二区三区免费视频| 久久久亚洲精品石原莉奈| 亚洲黄色性网站| 国产精品亚洲成人| 777久久久精品| 国产精品青草久久| 理论电影国产精品| 欧美无砖砖区免费| 国产片一区二区| 麻豆精品在线播放| 在线免费亚洲电影| 日本一区二区免费在线观看视频| 丝瓜av网站精品一区二区| av激情综合网| 国产亚洲欧美日韩俺去了| 日本亚洲三级在线| 欧美在线观看你懂的| 国产精品色哟哟网站| 美国十次综合导航| 欧美日韩国产综合草草| 狂野欧美性猛交blacked| 91小视频免费看| 国产精品天干天干在观线| 麻豆精品一区二区综合av| 欧美人与性动xxxx| 亚洲电影第三页| 欧美在线你懂的| 亚洲欧美日韩一区二区| 成人h动漫精品一区二区| 国产亚洲婷婷免费| 国产精品996| 久久久夜色精品亚洲| 麻豆精品国产91久久久久久| 欧美人与z0zoxxxx视频| 午夜精品福利一区二区三区av | 亚洲精品综合在线| 91色九色蝌蚪| 亚洲欧美另类久久久精品| fc2成人免费人成在线观看播放|