本帖最后由 lijinfeng042 于 2010-11-3 19:26 编辑
使用Mupad可以非常方便的求解非线性方程的数值解,简化输入的步骤,同时添加各种限制~只要有一下几个函数numeric::linsolve, numeric::polyroots, numeric::polysysroots, numeric::realroot, numeric::realroots, numeric::solve
注意:以下例子均在Mupad环境进行,如需在Command Window 运行,请作如下处理
M='代码'
result = evalin(symengine,M)
%这样调用也是有缺点的,就是少数命令不支持...
主要有以下几个方面内容,呵呵 做个目录
float 对结果求近似值
numeric::solve
numeric::fsolve
numeric::linsolve
numeric::polyroots
numeric::polysysroots
numeric::realroot
numeric::realroots
注意:在数值解法里,将会忽略assume及assuming对未知数的条件限制,例如x>0将不可以用assume(x>0)表示 可以在区间里限定x=0..infinite
float 对结果求近似值
这个很基本的,类似double, 用法 float(object, n)
float(solve([x^3 + x^2 + 2*x = y, y^2 = x^2], [x, y]))复制代码
20101101132946206.gif (6.36 KB, 下载次数: 2)
2010-11-1 13:59 上传
numeric::solve
先说一下用法numeric::solve(方程(组), , ),有必要解释一下:
方程(组):方程组必须使用[]或{},对应变量列表也是,可以交叉使用,即numeric::solve([..],{..})或numeric::solve({..},[...])
变量列表:有三种形式x,x=a(指定猜测值) , x=a..b(指定求解区间),这个非常重要
参数列表:
AllRealRoots: 求所有实根,这个只针对单个方程有用,否则报错
Multiple: 针对多项式方程(组),与AllRealRoots
FixedPrecision:针对一元多项式的快速搜索
RestrictedSearch:对非多项式方程只在指定区间内求解
UnrestrictedSearch:数值搜索可能会返回在搜索范围之外的结果
MultiSolutions:允许所有区间内求解
Multiple:对多项式方程知名重根个数
Random:随机返回一个满足条件的解
20101101134453051.gif (10.1 KB, 下载次数: 3)
2010-11-1 13:59 上传
20101101140419507.gif (4.76 KB, 下载次数: 0)
2010-11-1 14:04 上传
完整示例
20101101135912054.gif (11.03 KB, 下载次数: 3)
2010-11-1 13:59 上传
numeric::fsolve
numeric::fsolve的用法与numeric::solve类似,只是可用参数少了几个,只用于非线性系统
numeric::fsolve(方程(组), [变量表], )
用法和意义均与numeric::solve一致,参数只有这4个RestrictedSearch,UnrestrictedSearch,MultiSolutions,Random
20101101141410922.gif (5.75 KB, 下载次数: 5)
2010-11-1 14:14 上传
numeric::linsolve
用法:numeric::linsolve(eqs, , ) 解线性方程组 可以复杂的线性问题考虑 比如
n := 500: x[0] := 0: x[n + 1] := 0:
eqs := [x[i-1] - 2*x[i] + x[i+1] = 1 $ i = 1..n]:
vars := [x[i] $ i = 1..n]:
numeric::linsolve(eqs, vars)复制代码
numeric::polyroot
numeric::polysysroots
多项式方程求根
numeric::realroot 求某个区间实根
numeric::realroots 求根的区间