📄 牛顿法.cpp
字号:
// 牛顿法.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include"math.h"
#include"iostream.h"
#include"iomanip.h"
#include"fstream.h"
class Niudun
{
protected:
double **a;
double **b;
double **c;
int xiangshu;
double x0;
public:
Niudun(char *file_name);
double f_x(double);
double f_x1(double);
double f_x2(double);
void diedai();
};
Niudun::Niudun(char *file_name)
{
ifstream input(file_name);
char m;
if(!input)
cout<<"con't open file"<<endl;
else
{
input>>xiangshu;
input>>x0;
a=new double* [xiangshu];
b=new double* [xiangshu];
c=new double* [xiangshu];
for(int i=0;i<xiangshu;i++)
{
a[i]=new double[2];
b[i]=new double[2];
c[i]=new double[2];
input>>a[i][0];
input.get(m);
input>>a[i][1];
b[i][0]=a[i][0];
b[i][1]=a[i][1];
c[i][0]=a[i][0];
c[i][1]=a[i][1];
b[i][0]*=b[i][1];
b[i][1]-=1;
c[i][0]*=c[i][1];
c[i][1]-=1;
c[i][0]*=c[i][1];
c[i][1]-=1;
}
}
}
double Niudun:: f_x(double x)
{
double y=0;
for(int i=0;i<xiangshu;i++)
{
y+=a[i][0]*pow(x,a[i][1]);
}
return y;
}
double Niudun::f_x1(double x)
{
double y=0;
for(int i=0;i<xiangshu;i++)
{
y+=b[i][0]*pow(x,b[i][1]);
}
return y;
}
double Niudun::f_x2(double x)
{
double y=0;
for(int i=0;i<xiangshu;i++)
{
y+=c[i][0]*pow(x,c[i][1]);
}
return y;
}
void Niudun::diedai()
{
int k=0;
double x1;
double f,g,h;
do
{
x1=x0;
f=f_x(x1)/f_x1(x1);
g=1-f*f_x2(x1)/f_x1(x1);
h=-f/g;
x0=x1+h;
k++;
}while(fabs(h)>0.5e-10);
cout<<"经过 "<<k<<"次循环"<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(10)<<"x="<<x0<<endl;
}
void main(int argc, char* argv[])
{
Niudun niudun("a.txt");
niudun.diedai();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -