【问题标题】:Optimize expression symbolically- Find out numerical exception possibilities in equaitons Maple 2018象征性地优化表达式-找出等式 Maple 2018 中的数值异常可能性
【发布时间】:2018-12-04 10:12:06
【问题描述】:

我正在尝试象征性地优化表达式。我需要找出变量可能的最大值,以便表达式仍然有一个有效的解决方案。

例如:

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 是极限值。在某些情况下,忽略极限值的其他部分更合理。因此,我想求解大于或小于极限值)

我会很高兴,我怎样才能找到优化的表达方式。我尝试使用求解函数,但观察到表达式等于零并求解。这与我正在寻找的完全相反。我真的不知道有什么方法可以找出表达式中未定义的情况以及哪个变量的值。

我尽力解释情况,欢迎任何建议的编辑或所需的进一步信息。

【问题讨论】:

    标签: symbolic-math maple


    【解决方案1】:

    您写道,“b=a^3 是唯一可能存在未定义解决方案的情况。”

    因此看起来您在括号中打错了字,并打算将表达式改为,

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

    discont 命令处理该示例。

    discont(expr, b);
    
                              / 3\ 
                             { a  }
                              \  / 
    

    如果您有更多涉及的表达式,请展示它们(如果您有其他参数,例如a,知道这些限制不会有什么坏处)。

    如果您不明确完整地展示您的实际示例,则很难正确回答。

    [edit] 好的,您在其他地方发布了一个更复杂的示例。您可以使用discontsingular 命令。

    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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多