(完整 word 版)c++求解非线性方程组的牛顿顿迭代法
牛顿迭代法 c++程序设计
求解 0=x*x-2*x-y+0.5; 0=x*x+4
*y*y—4;的方程
#include<iostream>
#include<cmath>
#define N 2 // 非线性方程组中方程个数、未知量个数
#define Epsilon 0.0001 // 差向量 1 范数的上限
#define Max 100 //最大迭代次数
using namespace std;
const int N2=2*N;
int main()
{
void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量 yy[N]
void ffjacobian(float xx[N],float yy[N][N]);/ /计算雅克比矩阵 yy[N][N]
void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵 inv
void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向
量 x0 计算近似解向量 x1
float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm;
int i,j,iter=0;
//如果取消对 x0 的初始化,撤销下面两行的注释符, 就可以由键
盘向 x0 读入初始近似解向量
for( i=0;i<N;i++)
cin〉>x0[i];
cout<〈”初始近似解向量:"<〈endl;
for (i=0;i<N;i++)
cout<<x0[i]<〈" ";
cout<<endl;cout<〈endl;
do
{
iter=iter+1;
cout〈<"第 "<〈iter〈〈" 次迭代开始”〈<endl; //计算向量函数的因变量向量 y0
ff(x0,y0); //计算雅克比矩阵 jacobian
ffjacobian(x0,jacobian); //计算雅克比矩阵的逆矩阵 invjacobian