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

📄 example4_8.java

📁 清华大学2002年出版的《科学与工程数值计算算法Java》配套源码
💻 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 + -