📄 example4_8.java
字号:
import java.applet.*;
import java.awt.*;
public class Example4_8 extends Applet
{
public double DF(int n,double[] x,double[] y)
{double[] f=new double[n];
double[] df=new double[n];
double F=0;
int i;
f[0]=x[0]-5*x[1]*x[1]+7*x[2]*x[2]+12;
f[1]=x[0]*(3*x[1]+x[2]-11);
f[2]=20*x[0]+x[1]*x[2];
for(i=0;i<n;i++)F+=f[i]*f[i];
df[0]=1.0;df[1]=3*x[1]+x[2]-11;df[2]=20;
y[0]=0;
for(i=0;i<n;i++)y[0]+=2*f[i]*df[i];
df[0]=-10*x[1];df[1]=3*x[0];df[2]=x[2];
y[1]=0;
for(i=0;i<n;i++)y[1]+=2*f[i]*df[i];
df[0]=14*x[2];df[1]=x[0];df[2]=x[1];
y[2]=0;
for(i=0;i<n;i++)y[2]+=2*f[i]*df[i];
return F;
}
public boolean solve(int n,double[] x,double eps)
{int i,L=0;double[] y=new double[n];
double F=0,D;
while(L++<1000)
{F=DF(n,x,y);
if(Math.abs(F)<eps)break;
D=0;
for(i=0;i<n;i++)D+=y[i]*y[i];
if(Math.abs(D)<1e-10)return false;
for(i=0;i<n;i++)x[i]-=F/D*y[i];
}
if(L==1001)return false;
return true;
}
public void paint(Graphics g)
{double[] x={1,2,3};
double[] f=new double[3];
double eps=1e-7;
if(solve(3,x,eps))
{g.drawString("X1="+x[0]+" X2="+x[1]+" X3="+x[2],10,20);
f[0]=x[0]-5*x[1]*x[1]+7*x[2]*x[2]+12;
f[1]=x[0]*(3*x[1]+x[2]-11);
f[2]=20*x[0]+x[1]*x[2];
g.drawString("f1="+f[0]+" f2="+f[1]+" f3="+f[2],10,40);}
else{g.drawString("无法收敛或方程无解,请改变初值或加大eps再试",10,20);}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -