我正在尝试使用迭代来求解加速度方程;
a =((T * IE * i1 * ef1) / rdyn) - ((((IE + IT) * ((ifinal * i1) ^ 2) +
IW) * a0) / ((rdyn) ^ 2)) - (mF * g * fR * Cos(Atn(0))) - (mF * g *
Sin(Atn(0))) - (0.5 * ro * cW * A * ((V) ^ 2) / ((3.6) ^ 2));
其中我将a0用作迭代值,将a用作未来值。我使用了do while循环,程序非常简单。我发现收敛到一个值大约需要3或4次迭代。问题是,当它计算excel的最终值时会冻结。
我似乎找不到问题。任何人都可以发现什么地方出问题了吗?
Sub IteracaoAceleracao()
Dim FZA, inertia, Rollresist, FSt, FL, T, ifinal, i1, ef1, rdyn, IE, IT, IW, mF, g, fR, ro, cW, A, V, a0, e, c As Double
a0 = 0
e = 1
c = 0
T = Sheets("T.Pot x n DADOS").Range("C5")
ifinal = Sheets("Dados carro.motor.transm").Range("D21")
i1 = Sheets("Dados carro.motor.transm").Range("D16")
ef1 = Sheets("Dados carro.motor.transm").Range("E16")
rdyn = Sheets("Dados carro.motor.transm").Range("D5")
IE = Sheets("Dados carro.motor.transm").Range("J4")
IT = Sheets("Dados carro.motor.transm").Range("J5")
IW = Sheets("Dados carro.motor.transm").Range("J3")
mF = Sheets("Dados carro.motor.transm").Range("D2")
g = 9.81
fR = Sheets("T.Pot x n DADOS").Range("A36")
ro = Sheets("Dados carro.motor.transm").Range("D25")
cW = Sheets("Dados carro.motor.transm").Range("D3")
A = Sheets("Dados carro.motor.transm").Range("D4")
V = Sheets("T.Pot x n DADOS").Range("A22")
FZA = (T * ifinal* i1 * ef1) / rdyn
inertia = (((IE + IT) * ((ifinal * i1) ^ 2) + IW) * a0) / ((rdyn) ^ 2)
Rollresist = mF * g * fR * Cos(Atn(0))
FSt = mF * g * Sin(Atn(0))
FL = 0.5 * ro * cW * A * ((V) ^ 2) / ((3.6) ^ 2)
Do While e > 0.00155
Sheets("FZ,Ex aceleração").Range("L4") = (FZA - inertia - Rollresist - FSt - FL) / mF
e = Sheets("FZ,Ex aceleração").Range("L4") - ax0
e = Abs(e)
a0 = Sheets("FZ,Ex aceleração").Range("L4")
Loop
End Sub
答案 0 :(得分:0)
第35行的ax0看起来非常可疑
e = Sheets("FZ,Ex aceleraçao").Range("L4") - ax0
。
也许应该是
e = Sheets("FZ,Ex aceleraçao").Range("L4") - a0
。
该代码非常不可读。做类似的事情:
Dim a0 as Double
Const g as Double = 9.81
Dim shDados as Worksheet
Set shDados = Sheets("Dados carro.motor.transm")
ifinal = shDados.range("D21")
等...
希望这对您有所帮助。继续努力。