采用C#编写的程序,给定初值然后计算,程序很简单,只有两个循环。为什么有的初值能算有的不能算?
例如1500能算,但是2500就不能算了,3500能算,但是5500又算不通了?这是什么原因?
非常谢谢!!!
不能算是什么鬼,是程序崩溃,还是计算的结果不对
因为你的程序写错了。
for循环写的好。。。怎么会计算错误。。
你把代码贴出来看看,这样直接说不明白
//*通过窗体赋值*//
string strPath = Application.StartupPath + "\\test.accdb";
bp.P = double.Parse(textBox1.Text);
bp.T = double.Parse(textBox2.Text);
double pbS8;
pbS8 = 1000000 * Math.Pow(10, (3.1115 - 2442.4 / (bp.T - 106.50)));
double vS8S;
vS8S = 8 * 32.064 / 2070000;
bp.fS8S = pbS8 * Math.Exp(vS8S * (bp.P - pbS8) / 8.314 / bp.T);
bp.bS8= bp.Ω * 8.314 * 1025.0 / 5200000;
bp.bH2S = bp.Ω * 8.314 * 373.55 / 8970000;
bp.b = bp.yS8 * bp.bS8 + 1.0 * bp.bH2S;
bp.β = bp.b * bp.P / 8.314 / bp.T;
double αS8 = Math.Pow(1.0 + (0.37464 + 1.54226 * 0.3805 - 0.26992 * 0.3805 * 0.3805) * (1.0 - Math.Pow(bp.T / 1025, 0.5)), 2);
double αH2S = Math.Pow(1.0 + (0.37464 + 1.54226 * 0.1 - 0.26992 * 0.1 * 0.1) * (1.0 - Math.Pow(bp.T / 373.55, 0.5)), 2);
double aS8 = bp.Ψ * αS8 * 8.314 * 8.314 * 1025 * 1025 / 5200000;
double aH2S = bp.Ψ * αH2S * 8.314 * 8.314 * 373.55 * 373.55 / 8970000;
bp.a = bp.yS8 * bp.yS8 * aS8 + 2 * bp.yS8 * 1.0 * (1 - 0.0758) * Math.Pow(aH2S * aS8, 0.5) + 1.0 * 1.0 * aH2S;
bp.q = bp.a / bp.b / 8.314 / bp.T;
double z, z1;
z1 = 0.2;
z = 0.2;
for (int i = 1; i < 1000000; i++)
{
z = 1.0 + bp.β - bp.q * bp.β * (z1 - bp.β) / (z1 - 0.4142 * bp.β) / (z1 + 2.4142 * bp.β);
if (Math.Abs(z - z1) <= 0.00001)
{
z = z1;
bp.Z = z1;
break;
}
else
{
z1 = z;
}
}
bp.qS8 = bp.q * (2 * (bp.yS8 * aS8 + 1.0 * (1.0-0.0758)*Math.Pow(aS8*aH2S,0.5)) / bp.a - bp.bS8 / bp.b);
bp.I = 1.0 / 2 / 1.4142 * Math.Log((bp.Z + 2.4142 * bp.β) / (bp.Z - 0.4142 * bp.β), 2.71828183);
bp.фS8 = Math.Exp(bp.bS8 * (bp.Z - 1.0) / bp.b - Math.Log((bp.Z - bp.β), 2.71828183) - bp.qS8 * bp.I);
double yS81;
bp.yS8 = 0.1;
for (int i = 1; i <= 1000000000; i++)
{
yS81 = bp.fS8S / bp.фS8 / bp.P;
if (Math.Abs(yS81 - bp.yS8) <= 0.00001)
{
bp.yS8 = yS81;
break;
}
else
{
bp.yS8 = yS81;
}
}
}
//*定义全局参数*//
public class bp
{
public static double T;
public static double P;
public static double fS8S;
public static double Ω=0.07780;
public static double Ψ=0.45742;
public static double yS8;
public static double Z;
public static double bS8;
public static double bH2S;
public static double b;
public static double фS8;
public static double I;
public static double qS8;
public static double a;
public static double q;
public static double β;
}
private void button1_Click(object sender, EventArgs e)
{
//输出
textBox3.Text = bp.yS8.ToString();
}