matlab solve求值,MATLAB数值计算——0

MATLAB数值计算

MATLAB中文论坛基础板块常见问题归纳(出处: MATLAB中文论坛)

登录http:www.mathworks.com/moler 获取NCM文件,注册账户,下载Toolbox格式,点击安装——在MATLAB中输入ncmgui出现图案即为success!(pathtool添加默认路径)

开始学习:

format 表示格式 help format 可以查询format帮助

format short 把输出的格式改为默认设置

format rat 显示为分数

format long e 显示长精确度并用科学计数法

format long 并没有重计算,把显示数字的有效位5->15位

format compact/loose 紧凑/松散(默认)格式

roots(矩阵) 求多项式的根

solve()通常在不确定方程是否有符号解的时候,优先使用

pretty()使结果已于观察

vpa(phi,50) vpa是可变精度算术函数,可得到任意位数数字的表达式

inline() 内联函数

ezplot(f,0,4) 轻松作图0<=x<=4 range的图像

求解方程通常有两种方法,符号求解solve()和数值求解。

1.solve()

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

solve的调用形式:

sol=solve(eq)

sol=solve(eq,var)

sol=solve(eq1,eq2,…,eqn)

sol=solve(eq1,eq2,…,eqn,var1,var2,…,varn)

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

eg.x+y-1=0,x-11*y-5=0,求不等式

syms x y %声明符号变量

eq1=x+y-1

eq2=x-11*y-5

sol=solve(eq1,eq2,x,y)

x=sol.x

y=sol.y

2.fzero()

然而在很多情况下solve并不能求得方程的解析解,这时就可以采用数值法求解。数值求解法包括fzero和fsolve,其区别在于fzero只适用求解一元函数零点,而fsolve适用于求解多元函数零点(包括一元函数)。当求解一元函数零点时,推荐优先使用fzero,原因是fzero求解一元方程往往更容易,因为它不仅支持提供初值的搜索,还支持在一个区间上进行搜索。

fzero的常用形式:

x = fzero(fun,x0)

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

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

eg.以一元方程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]这个区间搜索初值

除此之外,fzero还能够求解积分方程

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-1

eq2=x-11*y-5

eq1=matlabFunction(eq1); %将符号函数转化为函数句柄

eq2=matlabFunction(eq2);

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

[sol,fval]=fsolve(eq,[1,1])

效果与之前相同,但不容易出错。求得的解以矩阵形式返回给sol,即sol的第一个值是匿名函数的第一个输入参数值x,sol的第二个值是匿名函数的第二个输入参数值y。

原文:https://www.cnblogs.com/yanshanbei/p/11592234.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值