matlab数值解方程,[原创]MATLAB的Mupad应用之以数值方法解方程

本帖最后由 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]))复制代码

324619ae995a043bc12bde7d078becb8.gif

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:随机返回一个满足条件的解

324619ae995a043bc12bde7d078becb8.gif

20101101134453051.gif (10.1 KB, 下载次数: 3)

2010-11-1 13:59 上传

324619ae995a043bc12bde7d078becb8.gif

20101101140419507.gif (4.76 KB, 下载次数: 0)

2010-11-1 14:04 上传

完整示例

324619ae995a043bc12bde7d078becb8.gif

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

324619ae995a043bc12bde7d078becb8.gif

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 求根的区间

你可能感兴趣的:(matlab数值解方程)