Оптимизируйте выражение символически - Узнайте о возможностях числовых исключений в уравнениях. Maple 2018 - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь оптимизировать выражения символически.Мне нужно выяснить максимально возможное значение для переменной (переменных), чтобы у выражения все еще было правильное решение.

Например:

expr := (a-b)/b-(a^3) # a=(0,10), b= (0,10)

В этом выражении b = a^ 3 - единственный случай, когда возможно неопределенное решение.для заданного интервала переменных

Это выглядит хорошо для простого выражения.Но в действительности существуют сложные уравнения, которые нужно решать с более чем 2 переменными.

1) Прежде всего необходимо выяснить все значения переменной, что приводит к неопределенному выводу

2) назначить символическое значение переменной, чтобы можно было исключить неопределенный результат.

Мне нужно оптимизировать данное выражение, чтобы при решении не было неопределенных случаев.Я понял, что при оптимизации всегда существует условие для переменных (в этом случае переменная max - это условие, максимальное значение, которое может принимать переменная).вывод выражения всегда является действительным значением

 OptimizedExpr:=a-b[max]/b[max]-a[3] --> b[max]>a^3 or b[max]<a^3 

(легко сказать b [max] <> для ^ 3, а a ^ 3 - это предельное значение. в некоторых случаях оно большеРазумно просто игнорировать другую часть предельного значения. Следовательно, я хотел бы найти решение, которое больше или меньше предельного значения)

Я был бы очень рад, как я могу найти оптимизированные выражения.Я пытался использовать функцию решения, но заметил, что выражения равны нулю и решения.что полностью противоположно тому, что я искал.Я действительно не знаю, есть ли какой-нибудь способ узнать неопределенные случаи в выражениях и о том, какая переменная и при каком значении.

Я попытался объяснить ситуацию в моих лучших проявлениях, и я приветствую любые предлагаемые правки или дополнительную информацию, необходимую.

1 Ответ

0 голосов
/ 04 декабря 2018

Вы написали: «b = a ^ 3 - единственный случай, когда возможно неопределенное решение».

Следовательно, похоже, что вы сделали опечатку со своими скобками и намеревались вместо этого использовать выражение,

expr := (a-b)/(b-a^3);

Команда discont обрабатывает этот пример.

discont(expr, b);

                          / 3\ 
                         { a  }
                          \  / 

Если у вас есть более сложные выражения, пожалуйста, покажите их (и ограничения на другие параметры, такие как a, не повредятчтобы знать, если у вас есть такой).

Трудно ответить правильно, если вы не показываете свой фактический пример, явно и полностью.

[править] Хорошо, вы опубликовали большевовлеченный пример в другом месте.Вы можете использовать команды discont или singular.

expr2 := tan(a*(b+log(1+(epsilon*a*r)/(c*s)))/2):

ans := [singular(expr2, {c, b})]:
ans := map[2](remove,u->lhs(u)=rhs(u), ans):

lprint(%);
  [{c = 0}, {c = -epsilon*a*r/s},
   {b = - (-2*_Z1*Pi+a*ln((a*epsilon*r+c*s)/(c*s))-Pi)/a}]

eval(expr2, ans[1]);
  Error, numeric exception: division by zero

eval(expr2, ans[2]);
  Error, (in ln) numeric exception: division by zero

eval(expr2, ans[3]):
simplify(%);
  Error, (in tan) numeric exception: division by zero

ans1 := map[2](`=`,c,discont(expr2, c)):
lprint(%);
  {c = 0, c = epsilon*a*r/(s*(exp((2*Pi*_Z2-a*b+Pi)/a)-1)),
   c = -epsilon*a*r/s}

ans2 := map[2](`=`,b,discont(expr2, b)):
lprint(%);
  {b = -(a*ln((a*epsilon*r+c*s)/(c*s))-2*Pi*_Z3-Pi)/a}

eval(expr2, ans1[1]);
  Error, numeric exception: division by zero

eval(expr2, ans1[2]):
  simplify(%) assuming real:
  Error, (in assuming) when calling 'cot'. Received: 'numeric exception: division by zero'

eval(expr2, ans1[3]);
  Error, (in ln) numeric exception: division by zero

eval(expr2, ans2[1]):
simplify(%) assuming real;
  Error, (in assuming) when calling 'cot'. Received: 'numeric exception: division by zero'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...