牛顿法求解非线性方程组的解C程序

牛顿法求解非线性方程组的解C程序(经调试)

/*############################################################################*/
/*#### 本函数用用牛顿法求解非线性方程组的解 #########*/
/*#### 用户在子函数function中输入方程组的信息,即依次输入fi(x) #########*/
/*#### 用户在子函数Jacobi中输入Jacobi矩阵的信息,依次输入行与列 #########*/
/*#### 用户按提示在程序执行的过程中输入方程的维数n,以及初始向量X0#########*/
/*#### 本程序中迭代精度设为10^(-7),用户可在主程序中改动此值 #########*/
/*#### 程序输出为满足精度要求的方程组的解 #########*/
/*#### 本程序已经调试,作者:沈欢,邮箱:holyshen@pku.edu.cn #########*/
/*############################################################################*/

#include <stdio.h>
#include <math.h>
void function(double *x,double *f);//本子函数用于计算向量f(x)的值
//入口参数为方程x指针向量,f(x)向量指针

void Jacobi(double *x,double **J);//本子函数用于计算Jacobi矩阵的值
//入口参数为向量x的指针和J矩阵的指针

void LU(int n,double *b,double ** A,double *detax);//本子函数用于计算线性方程组Ax=b的解,用LU分解法实现
//入口参数为方程维数n,右端项b,系数矩阵A
//detax用于存储方程组的解
void main()
{
int n,i,j,breakindex;
double num;
double error=0.0000001;//定义精度为10^(-7)


//***********信息输入***************//
printf("本函数用用牛顿法求解非线性方程组的解\n");
printf("用户在子函数function中输入方程组的信息,即依次输入fi(x)\n");
printf("用户在子函数Jacobi中输入Jacobi矩阵的信息,依次输入行与列\n");
printf("本程序中迭代精度设为10^(-7),用户可在主程序中改动此值\n");
printf("现在请输入非线性方程的维数n(方程个数):(按Enter键继续)\n");
scanf("%d",&n);

double *x=new double [n+1];//开辟解的存储空间,用于存储xk向量

printf("\n");
printf("请依次输入初始迭代向量X0的各元素值,并按Enter键继续\n");
for(i=1;i<=n;i++)//输入A矩阵
{
scanf("%lf",&num);
x[i]=num;
}

//**************************************//

//**************迭代求解****************//
double *f=new double [n+1];//开辟空间用于存储f(xk)向量
double *detax=new double [n+1];//开辟空间用于存储△xk向量

double **J = new double * [n+1];//为Jacobi矩阵开辟空间
for(i=0;i<n+1;i++)J[i]=new double [n+1];


for(i=1;;i++)//进行迭

你可能喜欢

  • 非线性方程组求解
  • 牛顿法解非线性方程组
  • matlab求解非线性方程组
  • 求解线性方程组
  • 线性算子
  • Newton迭代法

牛顿法求解非线性方程组的解C程序相关文档

最新文档

返回顶部