首页 > 编程知识 正文

MATLAB解方程组中 solve 和 fsolve 的细节比较

时间:2023-05-06 20:29:57 阅读:225505 作者:1090

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求解数值解

如果觉得本文写的还不错的伙伴,可以给个关注一起交流进步,如果有在找工作且对阿里感兴趣的伙伴,也可以发简历给我进行内推:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。