1

私のプログラムでは、「button1_Click」でいくつかの変数を定義しました。また、「button1_Click」関数には「for」ループがあります。そのループでは、これらの変数を変更したいのですが、そうではありません。私は何をすべきですか...それらを参照渡ししますか? はいの場合、どのように?

private void button1_Click(object sender, EventArgs e)
        {
            double t=0;
            double x = double.Parse(X0.Text);
            double z = double.Parse(Z0.Text);
            double y = double.Parse(Y0.Text);
            double u = double.Parse(U0.Text);
            double tn = double.Parse(Tn.Text);
            double h = double.Parse(textbox_h.Text);

            for (int i = 0; i < (tn / h); i++)
            {

                double K1x = h * fx(t, x, y, z, u);

                double K2x = h * fx(t + h / 2, x + K1x / 2, y + K1y / 2, z + K1z / 2, u + K1u / 2);

                double K3x = h * fx(t + h / 2, x + K2x / 2, y + K2y / 2, z + K2z / 2, u + K2u / 2);

                double K4x = h * fx(t + h, x + K3x, y + K3y, z + K3z, u + K3u);


                x =x+ (1 / 6)*(K1x + 2 * K2x + 2 * K3x + K4x);
                richTextBox1.Text += "X(" + (h * (i + 1)).ToString() + ")=" + x.ToString();


            }

すべてが正しいのですが、最後の行では、x の新しい値が x に入らず、古い値が残っています。fx、fz、fy、fu は、以前に定義した関数であることに注意してください。

4

2 に答える 2

7

問題は、1 / 6とが0両方16あるintため、結果もになりますint。はint小数を含めることができないため、単に削除され、丸めは行われません。そして0.16666666...、小数点なしはです0

これを修正するには、2つのうち少なくとも1つをダブルまたはフロートにします。

1.0 / 6

完全な行は次のようになります。

x = x + (1.0 / 6)*(K1x + 2 * K2x + 2 * K3x + K4x);
于 2013-01-17T13:41:21.433 に答える
0

You have in your expression

1 / 6

That's an integer division and gives integer 0. Consider using

1.0 / 6.0

instead.

于 2013-01-17T13:42:56.713 に答える