声明:本文章中数据来自清风老师数学建模课程

文章目录

  • MATLAB求解方程和方程组
    • 1、solve函数
      • 1.1 求解单变量方程
      • 1.2 多变量方程求解
      • 1.3 方程组的求解
      • 1.4 solve求解时可能出现的问题
    • 2、vpasolve函数
      • 2.1 vapsolve的使用
      • 2.2 vpasolve解决一个更复杂的例子
    • 三、fsolve函数

MATLAB求解方程和方程组

  • 不同MATLAB版本间语法存在不兼容的情况,关于这个问题其实我们只需要查看所使用版本的MATLAB帮助文档即可,具体的可以参考知乎中https://www.zhihu.com/question/360875116/answer/937256480这里的一个评论。
  • MATLAB中有关方程和方程组的求解有比较多的命令,这里我们仅介绍其中的3个命令,分别为:solve函数、vpasolve函数、fsolve函数。其他有关方法可以在使用到时查看帮助文档。这里也有一篇有关MATLAB求解方程和方程组的博文供参考学习:https://www.cnblogs.com/gentle-min-601/p/9672221.html

1、solve函数

1.1 求解单变量方程

%% 例题1: 求解单变量方程
clear;clc
syms x
answ = solve(sin(x) == 1, x)  % 注意:这里的等号一定要有两个,一个等号表示赋值,两个等号才表示左右两边相等
answ = solve(sin(x) == 1)  % 只有一个符号变量x,所以可以不指定未知数
% 也可以这样写
clear;clc
syms x
eqn = (sin(x) == 1);  % eqn = sin(x) == 1;    % 这里因为优先级的关系可以将括号省去
answ = solve(eqn, x)       % 当所求的方程过长时,这样先将方程赋值给eqn,然后将eqn带到solve中,更加美观
% 因为三角函数是周期函数,如果要得到所有的解,则需要加上条件
[answ, params, condions] = solve(eqn, x, 'ReturnConditions', true)

需要注意的是这里,当求解的是周期函数时,若想将返回的解为周期值,需要带上ReturnConditions参数并设为true
如下:其中in(k,‘integer’)表示k为整数

1.2 多变量方程求解

%% 例题2: 多变量方程求解
clear;clc
syms a b c x
eqn = (a*x^2 + b*x + c == 0);
answ1 = solve(eqn, x)  % 将x视为未知数求解
%  -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
%  -(b - (b^2 - 4*a*c)^(1/2))/(2*a)
answ2 = solve(eqn, a) % 将a视为未知数求解
% -(c + b*x)/x^2

1.3 方程组的求解

%% 例题3:方程组求解
clear;clc
syms u v a
eqn = [2*u + v == a, u - v == 1];
answ = solve(eqn, [u, v])
answ.u
answ.v
[answ_u, answ_v] = solve(eqn, [u, v])

1.4 solve求解时可能出现的问题

如在对方程进行以下求解时,MATLAB会给出警告。

%% solve 可能会警告
syms x
eqn = (sin(x) == x^2 - 1);
solve(eqn, x)


这是因为所求的方程超出了solve函数求解的能力了,在这种情况下继续使用solve函数求解可能其算法求的值与我们的要求的结果相差甚远。并且MATLAB建议使用vpasolve进行求解。

2、vpasolve函数

  • vpasolve默认情况下只返回一个我们指定区间内的解,若想返回多个结果需要我们指定’random’为true,多次求解来获得不同的解
  • 通常情况下,当所求方程不是很复杂时可以画出方程对应函数的图像,确定方程根的大致范围,再结合vpasolve进行求解

2.1 vapsolve的使用

绘图:

syms x
fplot(sin(x), [-2 2])  % fplot函数可绘制表达式的图形
hold on
fplot(x^2 - 1, [-2 2])

%% vpasolve函数求解
% 用vpasolve函数指定求[0 2]上的解
syms x
eqn = sin(x) == x^2 - 1;
vpasolve(eqn, x, [0 2])
vpasolve(eqn, x, [-1 0])
vpasolve(eqn, x, [-10 10])
% vpasolve returns all solutions only for polynomial equations.
% For nonpolynomial equations, there is no general method of finding all solutions.
% When you look for numerical solutions of a nonpolynomial equation or system that has several solutions,
% then, by default, vpasolve returns only one solution, if any.
% To find more than just one solution, set random to true.
% Now, calling vpasolve repeatedly might return several different solutions.
vpasolve(eqn, x, 'random', true)
vpasolve(eqn, x, -5)   % 给定搜索的起始点

2.2 vpasolve解决一个更复杂的例子

%% 来看一个更复杂的例子
syms x y
eqn = [x^2 - 2*x - 3*x*y == 10, y^4 == exp(-2*x/3)]
[answ_x, answ_y] = vpasolve(eqn, [x, y], 'random', true)
% 画图看看
ezplot(x^2 - 2*x - 3*x*y == 10, [-10 10])
hold on
ezplot(y^4 == exp(-2*x/3*y), [-10 10])
close % 关闭图形% ezplot函数比较鸡肋,下面这个函数比较厉害哦
fimplicit(x^2 - 2*x - 3*x*y == 10, [-10 10],'r')  % R2016b版本之后才有
hold on
fimplicit(y^4 == exp(-2*x/3*y), [-10 10],'b')  % R2016b版本之后才有
[answ_x, answ_y] = vpasolve(eqn, [x, y],[-4 -1;1 5])  % 指定搜索的范围:x位于[-4 -1], y位于[1 5]
hold on
plot(answ_x, answ_y,'ko', 'MarkerSize',10)
% plot(double(answ_x), double(answ_y),'ko', 'MarkerSize',10)   % double可以将我们的符号变量转换为数值变量

三、fsolve函数

fsolve是Matlab优化工具箱中的一个函数,可专门用来求解特别复杂的方程和方程组
在使用fsolve函数进行求解时需要将我们要求解的方程或者方程组写入函数中,然后将函数句柄带入fsolve中。

%% 待求解方程组
function F = my_fun(x)F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
end
%% 求解
x0 = [0,0];  % 初始值
result_x = fsolve(@my_fun,x0)

MATLAB求解方程和方程组相关推荐

  1. MATLAB求解方程与方程组

    目录 一.solve()方法 (1)单变量方程 f(x)=0 1)符号方程 2)数值方程 3)超越方程 (2)方程组 二.fsolve()方法 (1)数值求解 三.fzero()方法 (1)求解方程 ...

  2. 一篇文章带你搞定 MATLAB 求解方程和方程组

    文章目录 一.solve() 语句符号求解 1. 解单变量方程 2. 解数值方程 3. 解超越方程 4. 解方程组 二.fsolve() 数值求解:非线性方程 三.fzero():解方程组的根 四.r ...

  3. MATLAB求解方程和多元方程组

    MATLAB求解方程和多元方程组 0. 说明 1. 核心函数solve 2. 单个方程求解 3. 带未知参数的方程 4. 多元方程组求解 5. 数值近似解 6. 无解的情况 7. 多多留言点赞! 0. ...

  4. 用matlab解方程组例子,Matlab求解超定方程组实例

    Matlab求解超定方程组实例 对于超定方程组,特别是非线性方程组,可以用Matlab基于最小二乘算法来进行求解,例如,求解下列方程组: 一个三个未知数,九个方程的非线性方程组: cos(x3)*si ...

  5. 使用MATLAB求解方程求根——学习笔记

    使用MATLAB求解方程求根--学习笔记 碎碎念:终于参加完了某比赛,连续大约摸了两天的鱼,就在昨天由于自己的操作失误,亲手将电脑给烧了,这就是上天在暗示我是时候加油为接下来的两场比赛和一个考试努力啦 ...

  6. Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别

    1.引言 Matlab中有很多求解方程和方程组的函数,这些函数的使用可能有很多人都模棱两可,这里做一个简单的介绍,给个大方向,学会这些函数的基本使用场景.想要学习每个函数的更多细节和案例,Matlab ...

  7. matlab formatts,matlab求解二次方程组clearformatsyms Ls Lw Ts Tb Te Tc Tns Tn Tp Q P

    matlab求解二次方程组clearformatsyms Ls Lw Ts Tb Te Tc Tns Tn Tp Q P matlab求解二次方程组 clear format syms Ls Lw T ...

  8. 如何利用matlab求解方程

    如何利用matlab求解方程 1.    前言 作为三大数学软件之一,matlab在数值计算方法的能力首屈一指.求解方程是工科学习和工程计算中最基础.最常见的问题.掌握利用现代化工具求解方程的方法对于 ...

  9. 简单迭代法、牛顿法、弦割法、布洛依登法求解方程或方程组【Matlab】

    利用迭代法求解定非线性方程及方程组,使得误差不超过10^(-8).同时应用迭代加速技术,提交迭代运算效率. 此题需要用到的MATLAB代码及附录: 附录6 二分法作根的隔离 % 附录6 二分法作根的隔 ...

最新文章

  1. Java 中的反射机制
  2. SAP CRM IBASE Solution manager callstack
  3. 给你出道题 红绿灯问题
  4. 产品运营:当你和上级发生争执你会怎么处理?
  5. Java菜鸟教程 面向对象初步(一)
  6. 淘淘商城19_在taotoa-portal工程中调用taotao-rest工程
  7. Spring之Bean的作用域、使用外部属性文件、mchange-commons-java-0.2.11.jar下载
  8. 步道乐跑 位置模拟刷步数
  9. 鼠标划定区域的屏幕翻译 python3
  10. 机器人 李永禄_第八届中国青少年机器人竞赛名单
  11. TCP基于窗口的端到端的拥塞控制机制
  12. FOne MOOC在线课程平台
  13. python3.0不向后兼容啥意思_为什么Python 3不能向后兼容?
  14. TAElectronic-车辆电子电器模型库
  15. 有点甜的小姐姐,概念原画师Z.W.Gu作品
  16. bugku 奇怪的密码
  17. https证书多少钱,不同品牌CA的SSL证书价格对照
  18. 编译原理学习笔记 3.3 正则文法的状态图
  19. 如何解决 Unable to locate package gcc-4.6-base:i386
  20. C# XPTable 单元格增加图标(XPTable控件使用说明三)

热门文章

  1. 【CMD】bat以管理员身份运行命令
  2. 十二种抓龙头妖股的实战方法
  3. [转]一路且行且思考
  4. 1、vert.x的特性
  5. Ensemble learning 集成学习(一)
  6. 微小目标识别研究(1)——白酒杂质识别论文搜集
  7. html中下划线下移,css-控制下划线在文本装饰上的位置:下划线
  8. jeDate日期控件的验证
  9. Old money风盛行,柯罗芭KLOVA演绎中式奢华
  10. 我在北京,我不在北京