标签:
MATLAB作为科研工作者的忠实伙伴,解各种复杂方程的性能与其他工具相比,自然不逞多让。本期盘点MATLAB中solve和fsolve两个函数在解方程中的优劣。
1. solve函数
语法:
S = solve(eqn,var)
S = solve(eqn,var,Name,Value)
Y = solve(eqns,vars)
Y = solve(eqns,vars,Name,Value)
[y1,...,yN] = solve(eqns,vars)
[y1,...,yN] = solve(eqns,vars,Name,Value)
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)
描述:
S = solve(eqn,var) 求解变量var的方程eqn 。如果未指定var, symvar 函数将确定要为其求解的变量。例如, solve(x + 1 == 2, x)解决等式 x + 1 = 2为x .
例子
S = solve(eqn,var,Name,Value) 使用由一个或多个Name,Value对参数指定的附加选项。
例子
Y = solve(eqns,vars) 解决了方程组eqns的变量vars , 并返回一个结构, 包含解决方案。如果不指定vars, 则solve使用 symvar 查找要解决的变量。在这种情况下, symvar发现的变量数等于等式的个数eqns.
例子
Y = solve(eqns,vars,Name,Value) 使用由一个或多个Name,Value对参数指定的附加选项.
例子
[y1,...,yN] = solve(eqns,vars) 解决了变量vars的eqns方程组。解决方案被分配给y1,...,yN的变量。如果不指定变量, solve使用symvar查找要解决的变量。在这种情况下, symvar发现的变量数等于输出参数的个数N.
[y1,...,yN] = solve(eqns,vars,Name,Value) 使用由一个或多个名称指定的附加选项Name,Value对参数。
例子
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true) 返回指定解决方案中的参数和解决方案条件的附加参数parameters和conditions。
solve 函数的局限性
对于非多项式方程,只能求出一个解
对于稍许复杂的方程,求解结果出现很大误差
求解复杂的多项式方程时,可能会产生错误的求解结果
求解复杂的多项式方程时,可能无法求解,且非常耗时
求解超越方程时,只能返回一个解;
求解超越方程时,可能返回错误解;
2. fsolve函数
语法(仅列出两种)
x = fsolve(fun,x0)
[x,fval,exitflag] = fsolve(fun,x0,options)
fun: 函数,用于定义方程(组)
x0: 计算初值
x: 求解结果(方程的根)
fval: 将求解结果x 带入方程(组) fun,对应的值,即fun(x)
exitflag: 返回方程组求解结果的状态(详见help 文档)
options: 方程的求解设置
MATLAB fsolve函数总结
fsolve可以求解方程(组) 的实数根和复数根
fsolve采用迭代的数值算法,速度快
给定不同的初值,可以求得不同的根(局部寻根)
初值给的不好,可能导致求解失败
关于初值如何给定的问题
a) 一元/ 二元方程(组),通过图解法,可以得到根的个数,并粗略地估计出根的值,用做fsolve的初值
b) 根据方程组中变量的实际意义,合适地给出初值。例如,时间/ 长度/ 质量等物理量,应该大于0
c) 通过更多的练习和经验积累,自然会见多识广
总结:
尽量避免使用solve函数
尽可能使用fsolve求解数值解
标签:
来源: https://blog.csdn.net/Power1_Power2/article/details/82893867