找回密码
 注册
Simdroid-非首页
查看: 100|回复: 1

[编程进阶] 急求二分法修正

[复制链接]
发表于 2013-6-26 16:41:48 | 显示全部楼层 |阅读模式 来自 山东青岛
悬赏20仿真币未解决
程序感觉没错呀,不知为什么,每次运行的时候,b=0,:'( ,坐等解答
Fun[x_] :=
Module[{pw = x},
  sigmaxx = sigmaV;
  sigmayy = sigmaH*Sin[b]^2 + sigmah*Cos[b]^2;
  sigmazz = sigmaH*Cos[b]^2 + sigmah*Sin[b]^2;
  sigmayz = (sigmah - sigmaH)*Cos[b]*Sin[b];
  sigmaxy = 0;
  sigmazx = 0;
  sigmarr = pw;
  pr = 0.25;
  c = 0.95;
  pp = 15*10^6;
  delta = 0.77;
  alpha = 0.55;
  phi = 0.15;
  sigmaH = 45*10^6; sigmah = 35*10^6; sigmaV = 50*10^6; b = 0;
  M = delta*(alpha*(1 - 2*pr)/(1 - pr) - phi)*(pw - pp);
  sigmarr = pw + delta*phi*(pw - pp);
  sigmatt = -pw + (sigmaxx + sigmayy) -
    2*(sigmaxx - sigmayy)*Cos[2*theta] + M;
  sigmaz = -c*pw + sigmazz - pr*(2*(sigmaxx - sigmayy)*Cos[2*theta]) +
     M;
  sigmatz = 2*sigmayz*Cos[b];
  sigmart = 0;
  sigmarz = 0;
  sigma3 =
   0.5*((sigmatt + sigmaz) - Sqrt[(sigmatt - sigmaz)^2 + 4*sigmatz^2]);
  r = FindMinValue[sigma3, {theta}];
  Return[r];
  ]
n = 1;
a0 = 50*10^6;
b0 = 80*10^6;
a = a0;
b = b0;
x = (a + b)/2;
error = 0.00001;
While[Abs[(Fun[x] + 5*10^6)/5/10^6] > error && n < 10, x = (a + b)/2;
If[(Fun[x] + 5*10^6)*(Fun[a] + 5*10^6) < 0, b = x, a = x]; Print[x];
n++]

发表于 2013-7-20 00:31:29 | 显示全部楼层 来自 陕西咸阳
Simdroid开发平台
我一般看不到别人的代码的,不过我写过牛顿法,二分法,切线法求方程根的代码的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 06:49 , Processed in 0.027102 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表