Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 溢出错误---循环在函数中不收敛_Excel_Vba - Fatal编程技术网

Excel 溢出错误---循环在函数中不收敛

Excel 溢出错误---循环在函数中不收敛,excel,vba,Excel,Vba,'我想用以下常量在主程序中调用此函数dpdxf,但它在第一次迭代时停止,给出了-ve的dpdxf值。胸围dpdxf应始终大于0或为正 p1=40196684 p2=4019668 xf=320 PI=4*10^-11 t=20 n=0.4 k=20 wg=3*10^-6 H=46 w=0.006 qg=0.002 mug_p=0.04 '=================================================================== Function d

'我想用以下常量在主程序中调用此函数dpdxf,但它在第一次迭代时停止,给出了-ve的dpdxf值。胸围dpdxf应始终大于0或为正

p1=40196684
p2=4019668
xf=320
PI=4*10^-11
t=20
n=0.4
k=20
wg=3*10^-6
H=46
w=0.006
qg=0.002
mug_p=0.04

'===================================================================

Function dpdxf(p1, p2, xf, PI, t, n, k, wg, H, w, qg, mug_p)

Static frpr

dpdxf = (p1 - p2 - 2 * qg / PI) / xf
FrGaF = 1
Static qgg

 Do
   frpr = dpdxf
        Do
         qgg = FrGaF

          FrGaF = -((H * wg * (-3 * 2 ^ (-1 / n) * k * n ^ (2 + 1 / n) * ((-2 * t + dpdxf * wf) / (k * n)) ^ (1 + 1 / n) - (2 * dpdxf ^ 2 * wg ^ 2) / (mug_p) - (2 *n * dpdxf ^ 2 * wg ^ 2) / (mug_p))) / (3 * (1 + n) * dpdxf))
        Loop While Abs(FrGaF - qgg) >= 0.00  

     dpdxf = (p1 - p2 - 2 * (FrGaF / PI)) / xf

 Loop Until Abs(dpdxf - frpr) <= 0.0001

End Function
p1=40196684
p2=4019668
xf=320
PI=4*10^-11
t=20
n=0.4
k=20
wg=3*10^-6
H=46
w=0.006
qg=0.002
杯子p=0.04
'===================================================================
函数dpdxf(p1、p2、xf、PI、t、n、k、wg、H、w、qg、mug\p)
静态frpr
dpdxf=(p1-p2-2*qg/PI)/xf
FrGaF=1
静态qgg
做
frpr=dpdxf
做
qgg=FrGaF
FrGaF=-((H*wg*(-3*2^(-1/n)*k*n^(2+1/n)*(-2*t+dpdxf*wf/(k*n))^(1+1/n)-(2*dpdxf^2*wg^2)/(2*n*dpdxf^2*wg^2)/(mug*p))/(3*1+n*dpdxf))
当Abs(FrGaF-qgg)>=0.00时循环
dpdxf=(p1-p2-2*(FrGaF/PI))/xf
循环直到Abs(dpdxf-frpr)尝试


因此,您不会最终除以整数值。也可以将常量更改为
1#
2#
,将它们声明为浮点数。

我真的很想在这方面帮助你,但所有这些变量(即frpr、dpdxf、k、n、t)都很难读懂代码,听起来像是银行或物理:)。你可以考虑编辑代码吗?是的,非常真实,但是不能减少代码。但我可以说,有两个未知数FrGaF和dpdxf。我必须声明qgg和frpr应用循环条件。我觉得我的逻辑不够好,因为在计算dpdxf时,它的值不会收敛,但迭代会继续进行,当它达到-ve值时,会产生溢出错误。我将在明天尝试并关注它,如果您允许,我可能会编辑代码,以便其他人更容易地遵循。非常感谢。。我希望你能理解我在代码中的问题。你可以手工得到同样的结果:(40196684-4019668-2*0.002/4e-11)/320=-199447。要么初始值错误,要么猜测dpdxf的公式错误。我想求解FrGaF=----和dpdxf=(p1-p2-2*(FrGaF/PI))/xf以得到dpdxf和FrGaF的解。。。。
Function dpdxf(ByVal p1 as Double, ByVal p2 as Double, ByVal xf as Double, ByVal PI as Double, _ 
               ByVal t as Double, ByVal n as Double, ByVal k as Double, ByVal wg as Double, _
               ByVal H as Double, ByVal w as Double, ByVal qg as Double, ByVal mug_p as Double)