您现在的位置是:首页
>
resolve和solve solve详细资料大全
olve详细资料大全 在MATLAB中, olve函式主要是用来求解代数方程(多项式方程)的符号解析解。也能解一些简单其他方程的数值解,不过对于解其他方程的能力很弱,此时求出的解往往是不精确或不完整
solve详细资料大全

在MATLAB中,solve函式主要是用来求解代数方程(多项式方程)的符号解析解。也能解一些简单其他方程的数值解,不过对于解其他方程的能力很弱,此时求出的解往往是不精确或不完整的。注意可能得到的只是部分的结果,并不是全部解。
基本介绍
外文名:solve作用:求解代数方程类别:符号解析解结果:只是部分的结果,并不是全部解 Matlab中的用法,解单个方程,解方程组,解简单的超越方程,注意事项,MuPAD中的solve,语法,解多项式方程,解差分方程,解常微分方程,Mathematica中Solve的用法,Matlab中的用法
solve(eq) solve(eq, var) solve(eq1, eq2, ..., eqn) g = solve(eq1, eq2, ..., eqn, var1, var2, ..., varn) 其中,eq代表一个符号表达式或字元串,var代表一个变数名称 详细的解释:g=solve(eq)函式求代数方程的符号解析解。参量eq表示符号表达式或字元串。若eq是一符号表达式或一没有等号的字元串,则函式对方程的默认变数求解方程eq=0,默认变数由命令findsym(eq)确定。若输出参量g为单一变数,则对于有多重解的非线性方程,g为一行向量。g=solve(eq,var)用法同上,var为指定变数。即对符号表达式或没有等号的字元串eq中指定的变数var求解方程eq(var)=0。g=solve(eq1,eq2,…,eqn)函式求代数方程的符号解析解。参量eq1,eq2,…,eqn表示符号表达式或字元串。函式对方程组eq1,eq2,…,eqn中由命令findsym确定的n个变数如x1,x2,…,xn求解。若g为一单个变数,则g为一包含n个解的结构;若g为有n个变数的向量,则分别返回结果给相应的变数。g=solve(eq1,eq2,…,eqn,var1,var2,…,varn)用法同上,var1,var2,…,varn为指定变数,即对方程组eq1,eq2,…,eqn中指定的n个变数var1,var2,…,varn求解。g= solve(eqn1,...,eqn,,var1,...,varn,Name,Value)用法同上,Name和Value用来对解方程做一些更高级的控制。不填时,按默认值求解。若要控制多个Name对应的Value值,没有顺序要求。Name和Value的选项如下。NameValue 'ReturnConditions' 默认为false,当为true时额外提供两个参数。Example:[v1, v2, params, conditions] = solve(sin(x) +y == 0,y^2 == 3,'ReturnConditions',true) 'IgnoreAnalyticConstraints' 默认为false,当为true时会先对原方程进行一些化简操作后再解,以得到较为精简的结果,这也有可能使一些原本用solve解不出来的方程可以得到解。但置为true时也有可能使解不完整或产生错误 'IgnoreProperties' 默认为false,当为true时求解时会忽略变数定义时的一些假设,比如假设变数为正(syms x positive) 'MaxDegree' 默认为3,当复杂多项式方程的阶数高于'MaxDegree'时,solve可能只给出隐式解,调整该项可以让solve给出一些更高阶代数方程的显性解。注意该项最大为4(在数学上更高阶的多项式方程往往很少有解析解) 'PrincipalValue' 默认为false,为true时只给出一个主要的解 'Real' 默认为false,为true时只给出实数解解单个方程
如果以x为变数syms a b c x;solve('a*x^2 + b*x + c')%结果如下ans =-(b + (b^2 - 4*a*c)^(1/2))/(2*a) 如果以b为变数syms a b c x;solve('a*x^2 + b*x + c','b')%结果如下ans =-(a*x^2 + c)/x解方程组
syms x;S = solve('x + y = 1','x - 11*y = 5');S = [S.x S.y]%结果如下S =[ 4/3, -1/3]解简单的超越方程
对于一些简单的超越方程,solve可以自动调用数值计算系统给出一个解,但可能不是完整的解。 例子:syms xsolve(sin(x) == x^2 - 1) 以上方程没有解析解,故求解器自动调用数值计算系统试图寻找数值解。但要想在整个定义域内寻根将要花费大量时间和资源,故solve只找出一个解。 结果:ans =-0.63673265080528201088799090383828 如果对这个该函式画图后会发现其实这个方程是有两个解的。ezplot(sin(x), -2, 2)hold onezplot(x^2 - 1, -2, 2)hold off 为求出另一个根可以调用MuPAD的数值求解器,并 指明求解区间,或者用fsolve等其他方法数值求解, 下面用evalin函式调用MuPAD求解另一个在0~2之间的根evalin(symengine, 'numeric::solve(sin(x) = x^2 - 1, x = 0..2)') 结果:
ans =1.4096240040025962492355939705895 高级控制的例子syms xsolve(x^5 == 3125, x) 这样就得到复数域上的5个解,结果:ans =5(5*5^(1/2))/4 + (2^(1/2)*(5^(1/2) + 5)^(1/2)*5*i)/4 - 5/4(5*5^(1/2))/4 - (2^(1/2)*(5^(1/2) + 5)^(1/2)*5*i)/4 - 5/4(2^(1/2)*(5 - 5^(1/2))^(1/2)*5*i)/4 - (5*5^(1/2))/4 - 5/4- (2^(1/2)*(5 - 5^(1/2))^(1/2)*5*i)/4 - (5*5^(1/2))/4 - 5/4 如果只想要实数域上的解,那么在Name和Value的地方加上:solve(x^5 == 3125, x, 'Real', true) 结果: ans = 5
注意事项
1solve解非代数方程的能力较弱,最好结合其他方式求解非代数方程2如果解得是一个方程组,而且采用了形如[a,b]=solve(a+b==1, 2*a-b==4,a,b) 的格式,那么,在MATLAB R2014a中没问题,可以保证输出的a,b就等于相应的解,但是在R2012b等早先版本中不能保证输出的顺序就是你声明变数时的顺序。所以最好采用g=solve(a+b==1, 2*a-b==4,a,b)这种单输出格式,这样输出的是一个结构体,g.a和g.b就是对应的解。MuPAD中的solve
MuPAD是MATLAB现在的符号计算引擎(以前为maple),也可以单独使用,单独使用时语法有所不同。语法
solve(eq, x, <Options>) 单个方程,指定变数 solve(eq, x = a .. b, <Options>) 单个方程,指定区间 solve(eq, vars, <Options>) 方程组 solve(eq, <Options>) solve(system, x, <Options>) solve(system, vars, <Options>) solve(system, <Options>) solve(ODE) solve(REC)解多项式方程
solve(x^7 + x^2 + x, x)solve({x + y + z = 3, x + y = 2}, {x, y, z}) 或 solve({x + y + z = 3, x + y = 2}, [x, y, z]) {[x = 2 - z1, y = z1, z = 1]} 方程组可以用前面介绍的集合,序列的方式混合 也即{ }和[ ]交叉使用
代数符号方程 S := solve(a*x^2 + b*x + c, x)
解多项式方程
解差分方程
R:=rec(eq, y(n), <cond>);solve(R)参数: eq: 方程或表达式 y: 未知函式 n: 索引号 cond: 初始值或边界集合 由此可见,Rec主要是返回多项式的结果表达式,对于复杂问题,有直接法,for多重循环,滤波器法,Z变换法。 解差分方程
解常微分方程
ode::solve(o, <Type = OdeType>, <Opts>)solve(o, <Type = OdeType>, <Opts>)o: 常微分方程
Type = OdeType 方程类型Abel, Bernoulli, Chini, Clairaut, ExactFirstOrder, ExactSecondOrder, Homogeneous, Lagrange, Riati.
Opts 与解法有关选项
例子o:= ode(y'(x) = y(x)^2, y(x));solve(o)o:= ode({y'(x) = a*y(x)^2, y(a) = ln(a)}, y(x)):solve(o) 解常微分方程
Mathematica中Solve的用法
调用方法:Solve[expr,vars] 例:Solve[x^2 + a x + 1 == 0, x] 很赞哦! (1033)