matlab方程求解

matlab是美国mathworks公司出的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

但由于其功能的强大,对于初学者显得有些困难,下面,为广大初学者介绍下matlab如何求解方程。

matlab方程求解有两种方法,符号求解和数值求解。

1.solve

通常在不确定方程是否有符号解的时候,推荐先使用solve进行尝试,因为solve相比于数值求解来说,它不需要提供初值,并且一般情况下能够得到方程的所有解。对于一些简单的超越方程,

solve还能够自动调用数值计算系统给出一个数值解。solve的调用形式:

S = solve(eqn1,eqn2,...,eqnM,var1,var2,...,varN)

[S1,�,SN] = solve(eqn1,eqn2,...,eqnM,var1,var2,...,varN)

eq为符号表达式,var为指定的要求解的变量。如果不声明要求解的变量(第一和第三种形式),则matlab自动按默认变量进行求解,默认变量可以由symvar (eq)确定。

例:求解方程组:x^2 + x*y + y = 3, x^2 - 4*x + 3 = 0

matlab代码:

syms x y               %声明符号变量

eq1=x^2 + x*y + y-3

eq2=x^2 - 4*x + 3

[Sx,Sy]=solve(eq1,eq2,x,y)

2.fzero

然而在很多情况下solve并不能求得方程的解析解,这时就可以采用数值法求解。

数值求解法包括fzero和fsolve,其区别在于fzero只适用求解一元函数零点,而fsolve适用于求解多元函数零点(包括一元函数)。

当求解一元函数零点时,推荐优先使用fzero,原因是fzero求解一元方程往往更容易,因为它不仅支持提供初值的搜索,还支持在一个区间上进行搜索。

fzero的常用形式:

x = fzero(fun,x0)

[x,fval] = fzero(fun,x0)

其中fun为函数句柄,x0为搜索初值,fval为求解误差。

以一元方程sin(x)+cos(x)^2=0为例:

y=@(x)sin(x)+cos(x).^2    %这里采用匿名函数,也可以使用函数文件形式

[x,fval]=fzero(y,1)  %1为搜索初值

如果方程有多个零点时,fzero只能根据你提供的初值求得最靠近初值的一个零点,如果希望求得多个零点的话,那么只能够通过改变初值来得到不同的零点。

对于零点的选取,目前来说没有什么比较好的办法,只能够通过分析方程的性质,或者通过作图的方法去寻找一个比较靠近零点的初值。另外,fzero能够提供区间搜索,注意区间两端的端点函数值符号需要反向:

y=@(x)sin(x)+cos(x).^2

[x,fval]=fzero(y,[-1 1])     %fzero在[-1,1]这个区间搜索初值

3.fsolve

fsolve可以求解多元方程,用法和fzero类似。

fsolve的常用形式:

x = fsolve(fun,x0)

[x,fval] = fsolve(fun,x0)

其中fun为函数句柄,x0为搜索初值,fval为求解误差

例:求解方程组x+y=1, x-11y=5

eq=@(x)[x(1)+x(2)-1;x(1)-11*x(2)-5][sol,fval]=fsolve(eq,[1,1])

这里对于方程的的输入需要采用矩阵的形式,其中x(1)代表x,x(2)代表y。有时候变量较多时可能会容易混淆,这里提供另一种方法,采用符号变量形式再利用matlabFunction转化为函数句柄:

syms x y

eq1=x+y-1eq2=x-11*y-5eq1=matlabFunction(eq1);   %将符号函数转化为函数句柄eq2=matlabFunction(eq2);

eq=@(x)[eq1(x(1),x(2));

eq2(x(1),x(2))][sol,fval]=fsolve(eq,[1,1])

4.vpasolve

最后再补充一个数值解法vpasolve,vpasolve是R2012b引进的函数,可以求解一元或多元函数零点。相比于fzero和fsolve来说,vpasolve最大的一个优点就是不需要提供初值,并且能够自动搜索指定范围内的多个解。

vpasolve调用形式:

S = vpasolve(eqn)

S = vpasolve(eqn,var)

S = vpasolve(eqn,var,init_guess)

___ = vpasolve(___,Name,Value)

其中eqn是符号方程,var为需要求解的变量,也可以不提供(第一种形式,这是默认求解变量由symvar(eqn)求得),init_guess为搜索初值,Name,Value为一些选项控制。

例:对于多项式方程,vpasolve能够给出所有解:

syms xvpasolve(4*x^4 + 3*x^3 + 2*x^2 + x + 5 == 0, x)

对于非多项式方程,vpasolve给出它找到的第一个解:

syms xvpasolve(sin(x^2) == 1/2, x)

(0)

相关推荐

  • matlab洛伦茨方程求解相空间轨迹动画

    matlab 洛伦茨方程求解相空间轨迹动画 步骤/方法 01 matlab 洛伦茨方程求解相空间轨迹动画

  • matlab怎么求解方程

    有时候我们在使用matlab进行运算的时候,想使用matlab求解方程,怎么求解呢,下面来分享一下方法 操作方法 01 第一步我们首先看一下matlab求解方程的方法,首先指明所解方程的变量,然后指明 ...

  • Matlab如何求解绝对值

    求解绝对值对于Matlab而言,绝对是小菜一碟,但是许多人仍然不知道如何求解.小编,就教大家如何在Matlab求解绝对值 操作方法 01 直接使用abs函数即可,在abs中直接输入需要求解的数值即可 ...

  • MATLAB怎么求解积分

    利用MATLAB提供的函数int可以轻松地求解复杂的积分,下面利用MATLAB计算几个积分. 操作方法 01 打开MATLAB,在命令窗口中输入"syms x",创建符号变量x. ...

  • 利用 Matlab 求解方程

    当我知道 Matlab 可以用来求解方程的时候,我的内心是惊讶的 操作方法 01 假设这里需要求解的方程组如下: 02 Matlab计算源码(代数形式) res=solve('5*a+5327*b=2 ...

  • ABAQUS2017完整版详细破解安装图文教程(附许可破解下载)

    ABAQUS2017是一款DS公司专业有限元分析软件,新版本带来了大量功能,CFD模块功能更加完善,操作环境更加智能.便捷,并行能力发生质变,系统稳定性更强.另外,在Abaqus/Standard模块 ...

  • MATLAB7.1如何成功安装到win7系统

    MATLAB是一个十分强大的数学软件,我们可以将生活中的问题抽象成数学模型,进而用MATLAB来求解,比如线性规划问题,曲线拟合问题等等,这个软件是数学专业以及热爱数学建模的人必须用到的. 那么首先我 ...

  • 如何用matlab求解常微分方程?matlab解常微分方程之符号解法介绍

    应该如何用matlab求解常微分方程?MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和S ...

  • matlab求方程的根

    在函数特性分析时,常需要求解方程的根,也就是曲线的零点.下面,小编为大家演示如何用matlab求解方程的根: 操作方法 01 作为常见的多项式方程,如下所示,下面演示如何用matlab求其根: 02 ...