以符号方式优化表达式-找出等式 Maple 2018 中数值异常的可能性
Optimize expression symbolically- Find out numerical exception possibilities in equaitons Maple 2018
我正在尝试以符号方式优化表达式。我需要找出变量可能的最大值,以便表达式仍然有一个有效的解决方案。
例如:
expr := (a-b)/b-(a^3) # a=(0,10), b= (0,10)
在此 eypression 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]<>到a^3,a^3是极限值。在某些情况下,忽略极限值的其他部分更合理。因此,我想解决大于或小于极限值的问题)
我会很高兴,我怎样才能找到优化的表达式。我尝试使用 solve 函数,但观察到表达式等于零并正在求解。这与我正在寻找的完全相反。我真的不知道有什么方法可以找出表达式中未定义的情况以及在哪个值上有什么变量。
我已尽力解释情况,欢迎提出任何修改建议或所需的进一步信息。
你写了,"b=a^3 is the only case where undefined solution is possible."
因此看起来您的括号打错了,并打算将表达式改为,
expr := (a-b)/(b-a^3);
discont
命令处理该示例。
discont(expr, b);
/ 3\
{ a }
\ /
如果您有更多涉及的表达式,请展示它们(如果您有其他参数的限制,例如 a
知道也无妨)。
如果您不明确且完整地展示您的实际示例,则很难正确回答。
[edit] 好的,您在其他地方发布了一个更复杂的示例。您可以使用 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'
我正在尝试以符号方式优化表达式。我需要找出变量可能的最大值,以便表达式仍然有一个有效的解决方案。
例如:
expr := (a-b)/b-(a^3) # a=(0,10), b= (0,10)
在此 eypression 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]<>到a^3,a^3是极限值。在某些情况下,忽略极限值的其他部分更合理。因此,我想解决大于或小于极限值的问题)
我会很高兴,我怎样才能找到优化的表达式。我尝试使用 solve 函数,但观察到表达式等于零并正在求解。这与我正在寻找的完全相反。我真的不知道有什么方法可以找出表达式中未定义的情况以及在哪个值上有什么变量。
我已尽力解释情况,欢迎提出任何修改建议或所需的进一步信息。
你写了,"b=a^3 is the only case where undefined solution is possible."
因此看起来您的括号打错了,并打算将表达式改为,
expr := (a-b)/(b-a^3);
discont
命令处理该示例。
discont(expr, b);
/ 3\
{ a }
\ /
如果您有更多涉及的表达式,请展示它们(如果您有其他参数的限制,例如 a
知道也无妨)。
如果您不明确且完整地展示您的实际示例,则很难正确回答。
[edit] 好的,您在其他地方发布了一个更复杂的示例。您可以使用 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'