?? nlequation.h
字號:
//////////////////////////////////////////////////////////////////////
// NLequation.h
//
// 求解線性方程組的類 CNLequation 的聲明接口
//
// 周長發(fā)編制, 2002/8
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_NLEQUATION_H__72143033_E39F_404E_9A3B_F870E603EEE2__INCLUDED_)
#define AFX_NLEQUATION_H__72143033_E39F_404E_9A3B_F870E603EEE2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <math.h>
// 需要調(diào)用復數(shù)和矩陣運算
#include "Matrix.h"
#include "Complex.h"
// 類聲明
class AFX_EXT_CLASS CNLequation
{
//
// 公有接口函數(shù)
//
public:
//
// 構(gòu)造與析構(gòu)
//
CNLequation();
virtual ~CNLequation();
//
// 虛函數(shù):計算方程左端函數(shù)值,必須在引申類中覆蓋該類函數(shù)
//
virtual double Func(double x)
{
return 0.0;
}
virtual double Func(int n, double x[])
{
return 0.0;
}
virtual void Func(double x, double y[])
{
}
virtual double Func(double x, double y)
{
return 0.0;
}
virtual double Func(double x[], double y[])
{
return 0.0;
}
virtual void FuncMJ(int n, double x[], double p[])
{
}
//
// 非線性方程求解算法
//
// 求非線性方程實根的對分法
int GetRootBisect(int nNumRoots, double x[], double xStart, double xEnd, double dblStep, double eps = 0.000001);
// 求非線性方程一個實根的牛頓法
BOOL GetRootNewton(double* x, int nMaxIt = 60, double eps = 0.000001);
// 求非線性方程一個實根的埃特金迭代法
BOOL GetRootAitken(double* x, int nMaxIt = 60, double eps = 0.000001);
// 求非線性方程一個實根的連分式解法
BOOL GetRootPq(double* x, double eps = 0.000001);
// 求實系數(shù)代數(shù)方程全部根的QR方法
BOOL GetRootQr(int n, double dblCoef[], double xr[], double xi[], int nMaxIt = 60, double eps = 0.000001);
// 求實系數(shù)代數(shù)方程全部根的牛頓下山法
BOOL GetRootNewtonDownHill(int n, double dblCoef[], double xr[], double xi[]);
// 求復系數(shù)代數(shù)方程全部根的牛頓下山法
BOOL GetRootNewtonDownHill(int n, double ar[], double ai[], double xr[], double xi[]);
// 求非線性方程一個實根的蒙特卡洛法
void GetRootMonteCarlo(double* x, double xStart, int nControlB, double eps = 0.000001);
// 求實函數(shù)或復函數(shù)方程一個復根的蒙特卡洛法
void GetRootMonteCarlo(double* x, double* y, double xStart, int nControlB, double eps = 0.000001);
//
// 非線性方程組求解算法
//
// 求非線性方程組一組實根的梯度法
BOOL GetRootsetGrad(int n, double x[], int nMaxIt = 500, double eps = 0.000001);
// 求非線性方程組一組實根的擬牛頓法
BOOL GetRootsetNewton(int n, double x[], double t, double h, int nMaxIt = 500, double eps = 0.000001);
// 求非線性方程組最小二乘解的廣義逆法
BOOL GetRootsetGinv(int m, int n, double x[], double eps1 = 0.000001, double eps2 = 0.000001);
// 求非線性方程組一組實根的蒙特卡洛法
void GetRootsetMonteCarlo(int n, double x[], double xStart, int nControlB, double eps = 0.000001);
//
// 內(nèi)部函數(shù)
//
private:
void g60(double* t,double* x,double* y,double* x1,double* y1,double* dx,double* dy,double* p,double* q,int* k,int* it);
void g90(double xr[],double xi[],double dblCoef[],double* x,double* y,double* p,double* q,double* w,int* k);
void g65(double* x,double* y,double* x1,double* y1,double* dx,double* dy,double* dd,double* dc,double* c,int* k,int* is,int* it);
void g60c(double* t,double* x,double* y,double* x1,double* y1,double* dx,double* dy,double* p,double* q,int* k,int* it);
void g90c(double xr[],double xi[],double ar[],double ai[],double* x,double* y,double* p,double* w,int* k);
void g65c(double* x,double* y,double* x1,double* y1,double* dx,double* dy,double* dd,double* dc,double* c,int* k,int* is,int* it);
double rnd(double* r);
};
#endif // !defined(AFX_NLEQUATION_H__72143033_E39F_404E_9A3B_F870E603EEE2__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -