Распарсить формулы

Помогите пожалуйста распарсить формулы из textbox.

Почему вот так не работает:

ExpressionParser parser = new ExpressionParser();
parser.Values.Add("x", x);
parser.Values.Add("y", y);

y_[0] = 1;
y_[1] = parser.Parse(string.Format("{0}", dx_dt.Text));
y_[2] = parser.Parse(string.Format("{0}", dy_dt.Text));

А вот так работает:

ExpressionParser parser = new ExpressionParser();
parser.Values.Add("x", x);
parser.Values.Add("y", y);

y_[0] = 1;
y_[1] = parser.Parse("y+2");
y_[2] = parser.Parse("x+y");

Добавил код:

public void five(double[] y4, out double[] y_)
{
    ....

    ExpressionParser parser = new ExpressionParser();

    parser.Values.Add("x", x);
    parser.Values.Add("y", y);

    y_[0] = 1;
    y_[1] = parser.Parse(dx_dt.Text);
    y_[2] = parser.Parse(dy_dt.Text);

    parser.Values.Clear();
}// five

static public void RungeKutteZick(float h, double[] yy_, out double[] y1)
{
    .......

        for (int j = 0; j < 3; j++)
        {
            for (int m = 0; m < SizeSys; m++)
            {
                if (j == 0 || j == 3)
                {
                    yy[m] = yy_[m] + yy[m];
                }
                else
                {
                    yy[m] = yy_[m] + yy[m] * 0.5f;
                }
            }

            dy = five(yy);

Ответы (1 шт):

Автор решения: aepot

Сперва ошибки. Не нужно использовать out там где один возвращаемый тип, а не 2 и более.

public void five(double[] y4, out double[] y_)

замените на

public double[] five(double[] y4)

А это

y_ = new double[3];

на это

double[] y_ = new double[3];

Затем уберите это, оно бесполезно, так как парсер по завершении работы метода уничтожится сам

parser.Values.Clear();

И на это же место добавьте

return y_;

Затем в вызывающем методе замените

Form1 frm1 = new Form1();
frm1.five(yy, out dy);

На

dy = five(yy);

Потому что вы не используете в методе текстбоксы текущей формы, а создаете новую, в которой они не инициализированы (там null), потому что вы вызываете метод до того, как в текстбоксах что-то появится. И мне кажется, здесь вообще вам не нужно создавать копию текущей формы. А если я ошибаюсь и так задумано, напишите мне об этом в комментарии к этому ответу.

И уберите static у вызывающего метода.

→ Ссылка