矩阵组合的一些事情
%%
x=1:10;
y=2:2:20;
A=[x;y]
%%
x=1:10;
y=2:2:20;
A=[x;y]' %进行转置
进一步
%%
x=[1 2 3 ;4 5 6];
y=[12 0 7;9 3 8];
A=[x;y]
%%
x=[1 2 3 ;4 5 6];
y=[12 0 7;9 3 8];
A=[x;y]'进行转置
横向组合:
%%
x=[1 2 3 ;4 5 6];
y=[12 0 7;9 3 8];
A=[x, y] %不用逗号,用个空格也行
sort函数
rand函数
匿名函数
基本格式:
handle = @(arglist)anonymous_function
arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。
anonymous_function为匿名函数的表达式。
数据拟合
发现事物潜在的一般规律
多项式拟合函数 polyfit(x,y,n)
x,y为样本数据
n是拟合的次数
%%
x=1790:10:2010;
y=[3.9,5.3,7.2,9.6, 12.9,17.1 ,23.2,31.4,38.6,50.2, ...
63.0,76.0,92.0,105.7,122.8,131.7, ...
150.7,179.3,203.2,226.5,248.7,281.4,308.7];
plot(x,y,'*'); %画出散点图
p=polyfit(x,y,3); %进行三次多项式拟合,将系数向量保存在p中
polyval(p,2020) %多项式求值,预测2020年的人口数量
plot(x,y,'*' ,x,polyval(p,x),'r'); %画出拟合曲线
2020年的预测人口
拟合曲线:
数值微分
一些概念:
向前差分,向后差分和中心差分 ~~微分
向前差商,向后差商和中心差商 ~~导数
对向量:
>> mk=[2 3 7 9];
>> z=diff(mk)
z =
1 4 2
就是向前差分,z(1)=mk(2)-mk(1)
z(2)=mk(3)-mk(2)
z(3)=mk(4)-mk(3)
相比较向量mk而言,z向量少了一个元素
对矩阵:
就是一列一列的,diff后的矩阵与原矩阵比较少了一行
详细说明
数值积分
以后有兴趣再补充吧。。。
非线性方程求解
1.单变量非线性方程求解
fzero(函数名,x0)
x0为搜索起点
fzero函数只会给出离x0最近的那个根
2.非线性方程组的求解
fsolve(函数名,[x0,yo],options)
设置options=optimset(‘display’,‘off’)
函数调用时不显示中间结果
下面给出一个实例:
例2求下列方程组在(1,1,1)附近的解并对结果进行验证。
sin(x)+y+z2ex=0
x+y+z=0
xyz=0
%%
f=@(x)[sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)];
x=fsolve(f,[1,1,1],optimset('display','off'));
disp(x) %x中第一个值就是x,第二个值是y,第三个值是z
disp(f(x))
输出:
求函数极值
无约束极值问题 |
[xmin,ymin]=fminbnd(函数名,x1,x2,options)
(这个取得的是局部最优解)
一元函数在(x1,x2)区间中的极小值点xmin和极小值ymin
[xmin,ymin]=fminsearch/fminunc(函数名,x0,options)
多元函数的极小值点和极小值
(无约束问题举例)
求多元函数f(x,y)=x3-y3+3x2+3y2-9x的极值
%%
clear
f=@(x)x(1)^3-x(2)^3+3*x(1)^2+3*x(2)^2-9*x(1);
g=@(x)-f(x); %g(x)= —f(x)
[xmin,ymin]=fminunc(f,rand(2,1)) %求极小值点
[xmax,ymax]=fminsearch(g,rand(2,1)) %求极大值点