MATLAB进阶:函数和方程

 经过前几天的学习,matlab基础我们已经大致了解,现在我们继续学习matlab更进一步的应用。

常用函数

在求解有关多项式的计算时,我们无可避免的会遇到以下几个函数

  1. y=polyval(p,x):求得多项式p在x处的值y,x可以是一个或多个点。
  2. p3=conv(p1,p2):返回多项式p1和p2的乘积。
  3. [p3,r]=deconv(p1,p2):p3返回多项式p1除以p2的商,r返回余项。
  4. x=roots(p)求得多项式p的所有复根。
  5. p=polyfit(x,y,k)用k次多项式拟合向量数据(x, y),返回多项式的降幂系数。

多项式p

多项式p以一个向量形式表示,形式为各个项的系数组成的集合

如:

代码为

p=[1 2 0 -5]; x=roots(p), polyval(p,x)

可以看出,多项式中三次方项,二次方项,一次方项,常数项的系数依次为1,2,0,-5。

所以,p向量就表示为[1 2 0 -5]。以上代码中,roots(p)表示求根,polyval(p,x)表示将结果x代入多项式p中验算求解答案近似接近于0,则说明答案准确。

非线性函数求零点

一元函数

x=fzero(Fun,x0)

其中x0为初始猜测值。当x0为标量时,函数返回函数在x0附近的零点;

当x0为向量[a,b]时,函数返回在[a,b]中的零点(两端函数异号)

其中,两端函数异号的要求显然非常鸡肋。

例如:

求在区间(-2,-0.1)内求函数的零点

​fun=@(x)x*sin(x^2-x-1)
fzero(fun,[-2 -0.1])

函数报错,原因是两端函数同号

我们画图来看:

fplot(fun,[-2,-0.1]),grid on;

 

我们看到函数在-2到-0.1的值均为正数,加上上述鸡肋的限制,故报错。

我们如果想解决这个问题,可以做以下修改:

方案一
fzero(fun, [-2, -1.2]);
fzero(fun, [-1.2, -0.1]);
方案二
fzero(fun, -1.6);
fzero(fun, -0.6);

也就是说,将初始迭代值分别放在答案附近,或将答案分别放在迭代区间内以保持其准确性,但是要依赖画图来确定答案的具体区间。

多元函数

[x,f,h] = fsolve(Fun, x0)。

  • x:返回多元函数 Fun 在x0附近的一个零点,其中x,x0均为向量;
  • f:返回Fun在零点的函数值,应该接近0;
  • h:返回值如果大于零,说明计算结果可靠,否则计算结果不可靠。
  • Fun:预求函数
  • x0:初始值

下面举例演示此函数的用法:

首先,我们需要将此多项式转换为一边等于零的形式,

即:

f(1)=4*x(1)-x(2)-1+exp(x(1));
f(2)=-x(1)+4*x(2)+x(1)^2/8;

我们再将其写入脚本文件中

[x,f,h]=fsolve(@fun,[0 0]);
function f=fun(x)
f(1)=4*x(1)-x(2)-1+exp(x(1));
f(2)=-x(1)+4*x(2)+x(1)^2/8;
end

运行

得到在x=0,y=0处有解,

其中h>1说明结果可信。

函数极值

min(y) 返回向量y的最小值

max(y) 返回向量y的最大值

fminbnd(fun,a,b)

找到函数 fun 在区间 [a, b] 上的局部最小值点

用法

x = fminbnd(fun,a,b)

fun 是一个函数句柄,代表你想要找到最小值点的函数。a 和 b 是区间的边界点,x 是局部最小值点

fminsearch(fun, x0)

找到多元函数 fun 在初始猜测值 x0 附近的局部极小值点

用法:

[x,f] = fminsearch(fun,x0)

fun 是一个函数句柄,代表你想要找到局部最小值点的函数。x0 是初始猜测值,它是一个包含多个元素的向量,代表函数的多个变量。x 返回的是局部极小值点,f 返回的是局部极小值点处的函数值。

今天关于matlab函数方面的知识就学到这里,明天我们继续学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值