利用Mathematica求博弈、优化问题,以及复杂公式化简

很多博弈或者优化问题都可以归结为求某个函数的极值(最大值或者最小值),使用Mathematica可以方便地求解该问题,无论是解析解还是数值解。求解过程基本可以分为两步:   

1)原函数对自变量求一阶导并令其为0,然后求解方程。如果是多变量,就要对每个自变量求导并令其为0,然后联立求解;

2)原函数对自变量求二阶导(对于多变量,就是求海森矩阵的值),将第一步得出的解代入。如果二阶导大于0,那么就是极小值,如果二阶导小于0,那么就是极大值。

需要注意的事项是:如果第一步求得多个解,那么就需要将所有解代入原函数,然后比较哪个是真正的最大值或者最小值。

利用Mathematica求博弈、优化问题

以下以函数SigmaP为例:

其中,自变量为x和y。当函数比较复杂的没有解析解的,可以一样的数值求解,无非是用NSolve[]替换Solve[]。

SigmaP对x求导为:

由于该模型比较简化,所以此式比较简单。如果式子比较复杂可以加上Simplify[]命令化简。同样地,SigmaP对y求导为:

令dSigmaPdx=0求得:

令dSigmaPdy=0求得:

将x代入y,或者将y代入x均可求得x以及y,但是直接联立以上两个方程求解是更快的一种方法。

联立

dSigmaPdx=0

dSigmaPdy=0

求得:

可以看出有三组解,并且都非常复杂。可以用Simplify[]命令化简,但是非常慢,所以下边介绍一种不常用的方法。

复杂公式化简

我们观察到上图中有很多重复的项,所以可以对其做代换为(para1和para2可以替换成任意变量):

结果为:

我们发现又出现了一些新的重复项,再将其代换为(para111和para112可以替换成任意变量):

结果为:

此时可以看出公式已经相当简化了。这种简化了的公式是可以写进文章的,像之前那种有几百项的公式肯定是没办法的。

最后必须要将以上的解代入二阶导,才能确定解是原函数的最大值还是最小值。二阶导也可以做上面的代换:

最后,有相关需求欢迎联系我们.

微信:CAE320

微信公众号:320科技工作室

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAE320

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值