📄 劈因子法解方程.cpp
字号:
#include<iostream.h>
#include<math.h>
void piyinzi(int n,double *u,double *v,double *a){
double pi[100],m,x0,x1=a[1],x2=a[0],y0,y1,y2,z0,z1,du[100],dv[100];
for(int k=1;k<50&&(x1!=0||x2!=0);k++){
cout<<"\n迭代次数:"<<k<<'\n';
x2=a[0];
x1=a[1];
for(int i=0;i<n-2;i++){
x0=a[i+2];
pi[i]=x2;
x2=x1-pi[i]*(*u);
x1=x0-pi[i]*(*v);
}
y2=-pi[0];
y1=-pi[1];
for(i=0;i<n-4;i++){
y0=-pi[i+2];
m=y2;
y2=y1-m*(*u);
y1=y0-m*(*v);
}
z1=y1-m*(*u);
z0=-m*(*v);
du[k]=-(x2*y1-x1*y2)/(z1*y1-z0*y2);
dv[k]=-(z1*x1-z0*x2)/(z1*y1-z0*y2);
(*u)+=du[k];
(*v)+=dv[k];
cout<<"du["<<k<<"]="<<du[k]<<'\t'<<"dv["<<k<<"]="<<dv[k]<<'\n';
cout<<"u["<<k<<"]="<<*u<<'\t'<<"v["<<k<<"]="<<*v<<'\n';
cout<<"r1["<<k<<"]="<<x2<<'\t'<<"r0["<<k<<"]="<<x1<<'\n';
}
cout<<"w*(x)=x*x+("<<*u<<")x+("<<*v<<")\n"<<'\n';
}
void main()
{
int n;
double b[100],x1,x2,m0,m1;
cout<<"输入多项式f(x)的阶数: ";
cin>>n;
cout<<"由高次到低次依次输入f(x)的各项系数:\n";
for(int i=0;i<n+1;i++)
{
cin>>b[i];
}
double u,v;
cout<<"请输入w(x)=x*x+u*x+v的系数u,v:\n";
cin>>u>>v;
piyinzi(n+1,&u,&v,b);
if(u*u-4*v>=0)
{
x1=(-u+sqrt(u*u-4*v))/2;
x2=(-u-sqrt(u*u-4*v))/2;
cout<<"方程的解为:x1="<<x1<<'\t'<<"x2="<<x2<<'\n';
}
else{
m0=-u/2;
m1=sqrt(4*v-u*u)/2;
cout<<"方程的解为:x1="<<m0<<"+i"<<m1<<'\t'<<"x2="<<m0<<"-i"<<m1<<'\n';
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -