⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 收集的C语言算法程序
💻
字号:
非线性方程的Newton下山法2007-07-16 18:48#include<iostream>
using namespace std;
#include<math.h>
#define n 3                       //假定方程最高次数是3
#define N 50                         //最多迭代50次
#define err 0.00001       //最大允许误差

double f(double *a,double x)                            //指定f的系数,求出其值
{
int i;
double r=0;
for(i=0;i<=n;i++)
r+=a[i]*pow(x,n-i);
return r;
}

double ff(double *a,double x)                      //求f的导函数的值
{
int i;
double r=0;
for(i=0;i<=n;i++)
r+=(n-i)*a[i]*pow(x,n-i-1);
return r;
}

void main()
{
int i;
double x[N],a[n+1],t[N]={0},lamda=1;
cout<<"Please input the initialized x0:\n";
cin>>x[0];
cout<<"Please input the matrix of coefficients:\n";
for(i=0;i<=n;i++)
cin>>a[i];

for(i=0;i<N;i++)
{
t[i+1]=x[i]-f(a,x[i])/ff(a,x[i]);  

x[i+1]=lamda*t[i+1]+(1-lamda)*x[i];
if(fabs(f(a,x[i+1])>fabs(f(a,x[i])))) lamda=lamda/2;          //注意判断条件,是大于

if(fabs(x[i+1]-x[i])<err) {cout<<"The root is:\n"<<x[i+1]<<"\n";break;}
}
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -