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

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 函数的局限性

  1. 对于非多项式方程,只能求出一个解
  2. 对于稍许复杂的方程,求解结果出现很大误差
  3. 求解复杂的多项式方程时,可能会产生错误的求解结果
  4. 求解复杂的多项式方程时,可能无法求解,且非常耗时
  5. 求解超越方程时,只能返回一个解;
  6. 求解超越方程时,可能返回错误解;

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函数总结

  1. fsolve可以求解方程(组) 的实数根和复数根
  2. fsolve采用迭代的数值算法,速度快
  3. 给定不同的初值,可以求得不同的根(局部寻根)
  4. 初值给的不好,可能导致求解失败
  5. 关于初值如何给定的问题
    a) 一元/ 二元方程(组),通过图解法,可以得到根的个数,并粗略地估计出根的值,用做fsolve的初值
    b) 根据方程组中变量的实际意义,合适地给出初值。例如,时间/ 长度/ 质量等物理量,应该大于0
    c) 通过更多的练习和经验积累,自然会见多识广

总结:
尽量避免使用solve函数
尽可能使用fsolve求解数值解

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

  • 21
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
solve、fsolve和vpasolve都是MATLAB用于求解方程的函数,但在用法和求解能力上有一些区别。 1. solve函数: solve函数用于求解符号方程。它可以决包含符号变量的方程或方程组。使用solve函数时,需要定义符号变量,并将方程或方程组作为输入参数。solve函数返回一个结构体,其包含方程的。以下是solve函数的示例用法: ```matlab syms x y eqn1 = x + y == 5; eqn2 = x - y == 1; sol = solve([eqn1, eqn2], [x, y]); sol.x sol.y ``` 2. fsolve函数: fsolve函数用于求解数值方程。它可以决非线性方程或非线性方程组。使用fsolve函数时,需要定义一个函数句柄,该函数描述了方程或方程组的形式。fsolve函数通过数值迭代方法找到方程的。以下是fsolve函数的示例用法: ```matlab fun = @(x) x^2 - exp(x); x0 = 0; % 初始猜测值 x = fsolve(fun, x0); ``` 3. vpasolve函数: vpasolve函数用于求解数值方程或符号方程。它可以决包含符号变量和数值变量的方程或方程组。vpasolve函数通过数值计算和符号计算相结合的方法来求解方程。使用vpasolve函数时,需要定义变量,并将方程或方程组作为输入参数。以下是vpasolve函数的示例用法: ```matlab syms x y eqn1 = x + y == 5; eqn2 = x - y == 1; sol = vpasolve([eqn1, eqn2], [x, y]); sol.x sol.y ``` 总结: - solve函数用于求解符号方程,适用于符号计算。 - fsolve函数用于求解数值方程,适用于数值计算。 - vpasolve函数可以用于求解符号方程和数值方程,适用于符号计算和数值计算的结合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值