c++编程求解二元二次方程组_c++ 牛顿迭代法求解多元多次方程组

//经典牛顿迭代法C++实现

#include

#include

#define N 3 // 非线性方程组中方程个数、未知量个数

#define Epsilon 0.000000001 // 差向量1范数的上限

#define Max 1000000000000 //最大迭代次数

using namespace std;

const int N2=2*N;

int main()

{

void ff(double xx[N],double yy[N]); //计算向量函数的因变量向量yy[N]

void ffjacobian(double xx[N],double yy[N][N]); //计算雅克比矩阵yy[N][N]

void inv_jacobian(double yy[N][N],double inv[N][N]); //计算雅克比矩阵的逆矩阵inv

void newdundiedai(double x0[N], double inv[N][N],double y0[N],double x1[N]); //由近似解向量 x0 计算近似解向量 x1

// double x0[N]={82.7995,-5.92913,361.667};

double x0[N]={-5,-6,-7};

double y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm;

int i,j,iter=0;

cout<

for (i=0;i

cout<

cout<

do

{

iter=iter+1;

cout<

//计算向量函数的因变量向量 y0

ff(x0,y0);//double aaa = exp(-5);

//计算雅克比矩阵 jacobian

ffjacobian(x0,jacobian);

//计算雅克比矩阵的逆矩阵 invjacobian

inv_jacobian(jacobian,invjacobian);

//由近似解向量 x0 计算近似解向量 x1

newdundiedai(x0, invjacobian,y0,x1);

//计算差向量的1范数errornorm

errornorm=0;

for (i=0;i

errornorm=errornorm+fabs(x1[i]-x0[i]);

if (errornorm

for (i=0;i

x0[i]=x1[i];

} while (iter

return 0;

}

void ff(double xx[N],double yy[N])

{

double x,y,z;

int i;

x=xx[0];

y=xx[1];

z=xx[2];

// yy[0]=3*x-2*y+4*z-11;

// yy[1]=2*x*x+2*x+y*y+3*y+4*z*z-27;

// yy[2]=x+2*y+3*z-14;

yy[0]=3*x-cos(y*z)-0.5;

yy[1]=x*x-81*(y+0.1)*(y+0.1)+sin(z)+1.06;

yy[2]=exp(-x*y)+20*z+10.0/3.0*3.14159-1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值