经过前几天的学习,matlab基础我们已经大致了解,现在我们继续学习matlab更进一步的应用。
常用函数
在求解有关多项式的计算时,我们无可避免的会遇到以下几个函数
- y=polyval(p,x):求得多项式p在x处的值y,x可以是一个或多个点。
- p3=conv(p1,p2):返回多项式p1和p2的乘积。
- [p3,r]=deconv(p1,p2):p3返回多项式p1除以p2的商,r返回余项。
- x=roots(p)求得多项式p的所有复根。
-
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函数方面的知识就学到这里,明天我们继续学习。