目录
2,fminsearch使用无导数法计算无约束的多变量函数的最小值
1,多项式计算
1,polyval求值
y=polyval(p,x)
p:多项式系数;x:x的取值
2,roots求根
r=roots(p)
3,conv多项式乘法
p1=conv(p,q)//p*q=p1
求下列多项式的所有根,并进行验算。(请按题号标注习题解答)
p=[1 1 1];
//求根
x=roots(p)
//验算
polyval(p,x)
(2)roots([3 0 -4 0 2 -1])
(3)p=zeros(1,24);
p([1 17 18 22])=[5 -6 8 -5]; %这样比直接写24个系数简短。
x=roots(p)
polyval(p,x) %验算,结果应为零
(4)p1=[2 3];
p2=conv(p1, p1);
p3=conv(p1, p2);
p3(end)=p3(end)-4; %原p3最后一个分量-4
x=roots(p3)
polyval(p3,x) %验算,结果应为零
2,求函数零点
0,函数的定义
fun=@(x)表达式;
1,inline创建内联函数
clc,clear
x=1;alpha=pi/6
f = inline('sin(alpha*x)')
f(x,alpha)
>>f = Inline function: f(alpha,x) = sin(alpha*x)
>>ans=0.5
2,fzero求非线性函数零点
可以通过plot画图求出零点大概位置
1,附近零点
fun = @cos; % function x0 = 3; % 3附近零点 x = fzero(fun,x0)
2,范围零点
fun = @cos; % function
x0 = [1 2]; % initial interval
x = fzero(fun,x0)
3,fsolve
和fzero 用法几乎一致
部分不可导的函数不能使用fzero这时候可以使用fsolve
[x,fvalue,exitflag]=fsolve(fun,[0 0 0])
2. 求方程
的正根
clear all;clc;
fun=@(x)x.*log(sqrt(x.^2-1)+x)-sqrt(x.^2-1)-0.5*x;
fplot(fun,[1,3]);
grid on;
//看图可知零点在2.1附近
x= fsolve(fun,2.1)
法二:
fun=inline('x*log(sqrt(x^2-1)+x)-sqrt(x^2-1)-0.5*x');
fzero(fun,2.1) %注意定义域,初值须大于1
3,求解非线性方程组
5. 求解下列非线性方程组在原点附近的根
fun=inline('[9*x(1)^2+36*x(2)^2+4*x(3)^2-36;x(1)^2-2*x(2)^2-20*x(3);16*x(1)-x(1)^3-2*x(2)^2-16*x(3)^2]','x');
[x,fvalue,exitflag]=fsolve(fun,[0 0 0])
4,求极值点
1,fminbnd查找单变量函数在定区间上的最小值
[x,fval] = fminbnd(fun,x1,x2)
在[x1,x2]之间求解fun的局部最小值
2,fminsearch使用无导数法计算无约束的多变量函数的最小值
[x,fval] = fminsearch(fun,x0)
在x0附近求解fun的局部最小值
8. 作出下列函数图形,观察所有的局部极大, 局部极小和全局最大, 全局最小值点的粗略位置; 并用MATLAB函数fminbnd和fminsearch求各极值点的确切位置
clear;clc;
fun = @(x)x.^2.*sin(x.^2-x-2);
fplot(fun,[-2,2]);grid on;
//观察得局部极大的粗略位置x0=-1.5,0
//局部极小粗略位置x0=-2,-0.5,1.5
//全局最大粗略位置x0=-1.5
//全局最小的粗略位置x0=-2
[x(1),f(1)] = fminbnd(fun,-2,-1.5);//局部极小值
[x(2),f(2)] = fminsearch(fun,-0.7);//局部极小值
[x(3),f(3)] = fminsearch(fun,1.5);//局部极小值
fun2 = @(x)-x.^2.*sin(x.^2-x-2);
//用函数取负的方法同理求出极大值
[x(4),f(4)] = fminbnd(fun,-1.7,-1.2);//局部极大值
[x(5),f(5)] = fminsearch(fun,0);//局部极大值
%输出部分
disp([x(1),x(2),x(3)]);//局部极小值
disp([x(4),x(5)]);//局部极小值
//从极值中进一步筛选
x(find(f==min(f)))//全局最小值
x(find(f==max(f)))//全局最大值
9. 考虑函数
(1)作出
在的图,观察极值点的位置;
(2) 用MATLAB函数fminsearch求极值点和极值。
close;
x=-2:0.1:1;y=-7:0.1:1;
[x,y]=meshgrid(x,y);
z=y.^3/9+3*x.^2.*y+9*x.^2+y.^2+x.*y+9;
mesh(x,y,z);grid on;%作图观察, 可看到[0 0]附近极小值,[0 -5]附近极大值
fun=@(x)x(2)^3/9+3*x(1)^2*x(2)+9*x(1)^2+x(2)^2+x(1)*x(2)+9;
x=fminsearch(fun,[0 0])%求极小值
fun2=inline('-(x(2)^3/9+3*x(1)^2*x(2)+9*x(1)^2+x(2)^2+x(1)*x(2)+9)');
x=fminsearch(fun2,[0 -5])%求极大值
[
x(1):x
x(2):y
]
5,曲线拟合
向量模计算mol=norm(v)
polyfit
p= polyfit(x,y,n)
返回次数为 n
的多项式 p(x)
的系数
10. 假定某天的气温变化记录如第二章习题5,试用最小二乘方法找出这一天的气温变化规律。考虑下列类型函数, 作图比较效果,并比较误差平方和的大小。
(1) 二次函数;
(2) 三次函数;
(3) 钟形函数
(1)
clear;
t=0:24;
c=[15 14 14 14 14 15 16 18 20 22 23 25 28 ...
31 32 31 29 27 25 24 22 20 18 17 16];
p2=polyfit(t,c,2)
norm(c-polyval(p2,t))^2%误差平方和,反映拟合效果
(4)
%第(4)小题
fun2=@(b,t)b(1)*sin(pi/12*t+b(2))+20;
b=lsqcurvefit(fun2,[0 0],t,c)%初值可以试探,这里用a=0, b=0试探
figure
f2=feval(fun2, b,t);
norm(f2-c)^2%拟合效果
plot(t,c,'o',t,f2) %作图检验