?? 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 + -