in是一个100行2列的矩阵,两列分别为x和y。用一条直线y=x*a+b拟合x和y的关系;
用最小二乘法计算a和b。
x=in(1:100,1);
y=in(1:100,2);
sumx=0;
sumy=0;
sumxx=0;
sumyy=0;
sumxy=0;
for i=1:1:100
sumx=sumx+x(i);
sumy=sumy+y(i);
sumxx=sumxx+x(i)*x(i);
sumyy=sumyy+y(i)*y(i);
sumxy=sumxy+x(i)*y(i);
end
plot(in(:,1),in(:,2),\'r.\'); %用红色的点画出100个样本点
hold on; %保留当前绘图,不被下次绘图遮盖
n=100;
[b,a]=solve(\'n*a0+a1*sumx=sumy\',\'a0*sumx+a1*sumxx=sumxy\',\'a0\',\'a1\'); %解二元一次方程组,未知数为a0,a1,结果返回给b和a。
a=eval(a); %eval(str),把str当做一条语句执行
b=eval(b);
x2=[0,1]; %知道解析式y=a*x+b,画直线的方法
y2=x2.*a+b; % 因为x2是一个向量,所以用x2.表示
plot(x2,y2); %制动化一条以x2为x,以y2为y的直线
mse=0;
error=0;
for i=1:n
error=error+(y(i)-(a*x(i)+b))*(y(i)-(a*x(i)+b));
end
mse=error/n;
mse
转自(http://blog.sina.com.cn/s/blog_513d21e9010092ao.html)
第一节基本数值计算
1. 变量:分为数值变量和字符变量
2. 常量:计算机中不变的量。如i、j、pi、NaN(不确定)、Inf(无穷大)
3. 字符变量:将字符串作为变量。有三种方法表示:
(1) 用单引号\' \'
(2) 用函数sym(\' \')
(3) 用命令symbs
4. 举例
x=2 % 将2赋给变量x
y=3; % 有\';\'表示在命令窗口不显示y的值
z=x^2 -y % 数值计算。输出结果为1
f=\'sin(x)\' % 用单引号定义一个字符变量
g=sym(\'cos(y)\') % 用函数sym(\' \')定义一个字符变量
syms a b % 用命令syms定义字符变量。一般用于多符号变量的定义
u=2*a % 字符计算。输出结果为2*a
w=b^2-1 % 字符计算。输出结果为b^2-1
fg=f+g % 字符计算。输出结果为sin(x)+cos(y)
uw=u*w % 字符计算。输出结果为2*a*(b^2-1)
u/w % 字符计算。输出结果为2*a/(b^2-1)
第二节矩阵构造及运算
Matlab中数据的结构形式就是一个矩阵。如x=2是一个1×1的矩阵
1. 矩阵的建立
(1) 直接输入法。
(2) 冒号法(1×N)。
(3) 函数法(特殊矩阵)。
(4) 矩阵的编辑(Array Editor)。
2. 向量
向量是1×N的特殊矩阵,即只有一行或者一列,称为N维向量。
3. 向量的点积与叉积
点积:dot(A,B)
叉积:cross(A,B)
4. 举例:
x=[1 2 3; 4 5 6; 7 8 9] % [...],元素之间用空格,行之间用分号。
y=0: 0.1 :1 % 不用[...],初值、步长、终值间用冒号。
w=eye(3) % 3阶单位矩阵。
u=rand(3) % 3阶随机矩阵。元素在0-1之间。
u1=rand(2, 3) % 2*3阶随机矩阵。元素在0-1之间。
q=randn(3) % 3阶随机矩阵。元素在0-1之间。元素符合正态分布。
q1=randn(2, 3) % 2*3阶随机矩阵。元素在0-1之间。元素符合正态分布。
s=magic(3) % 魔方阵。各行各列以及对角元素的和相等。
ss=zeros(3) % 3阶全零阵。
uu=ones(3) % 3阶全1阵。
5. 矩阵的加、减、乘、除
(1) 参与加、减运算的矩阵必须同维
(2) A/B时,A、B列数必须相同。A\B时,A、B行数必须相同。
(3) 矩阵左乘与右乘不同,左除与右除不同。(A*B不等于B*A,A\B不等于A/B)。
(4) 标量或函数与矩阵的运算等于该标量或函数与矩阵的每一个元素的运算。
6. 对矩阵的操作
6.1 对矩阵的元素操作:
(1) 提取矩阵A的第n行第m列的元素,表示为A(n, m)
(2) 提取矩阵A的第n行的所有元素,表示为A(n, :)
(3) 提取矩阵A的第m列的所有元素,表示为A(:, m)
(4) 将矩阵A的第n行第m列的元素重新赋值b,表示为A(n, m)=b
(5) 将矩阵A的第n行的所有元素重新赋值b,表示为A(n, :)=b
(6) 将矩阵A的第m列的所有元素重新赋值b,表示为A(:, m)=b
(7) 将矩阵A的第n行第m列的元素删除,表示为A(n, m)=[ ]
(8) 将矩阵A的第n行的所有元素删除,表示为A(n, :)=[ ]
(9) 将矩阵A的第m列的所有元素删除,表示为A(:, m)=[ ]
6.2 矩阵的部分操作:
Fliplr(A) % 矩阵左右翻转
Flipud(A) % 矩阵上下翻转
Flipdim(A, m) % 矩阵沿特定维(m)翻转
Rot90(A, k) % 矩阵逆时针旋转k*90度
Tiag(A, k) % 取矩阵对角线元素
Tril(A, k) % 取矩阵的下三角部分
Triu(A, k) % 取矩阵的上三角部分
注:k可以是正、负整数,但绝对值一般不大于矩阵的维数。
6.3 矩阵分析操作:
(1) 方阵A的行列式值,可表达为 det(A)
(2) 矩阵A的秩,可表达为 rank(A)
(3) 行列式值不为堆的方阵A,求逆矩阵可表达为 inv(A)
(4) 矩阵A的转置阵,可表达为 A\'
(5) 矩阵A的特征向量与特征值:[V, D]=eig(A)。其中V和D分别为A的特征向量和特征值
6.4 矩阵的数组运算:
矩阵乘:A*B。A的列数与B的行数要相等。
矩阵的数组乘:A.*B。表示为A、B矩阵的对应元素一一相乘,即Aij * Bij。A与B的维度要相同。
矩阵的数组除:A./B或者A.\B
举例:x=-10 : 2 :10
y=sin(x) % correct
y=sin(x^2) % incorrect - Matrix x must be square
y=sin(x.^2) % correct
6.5 矩阵元素的关系运算与逻辑运算(与、或、非)
< 小于
> 大于
<= 小于或等于
>= 大于或等于
== 等于
~= 不等于
6.6 矩阵的多维数组形式
(1) 函数cat的使用
(2) B=cat(dim, a1, a2,...)
(3) 意义:将多个同维数组a1, a2,...构成一个高维数组B。dim是高维数组B的维数。
它必须等于或大于a1, a2,...的阶次
举例:a=[1 2 3 ; 2 3 4 ; 3 5 6]
b=a+10 % 新构成一个矩阵
a(:, :, 2)=b % 将新矩阵赋给a的第二层
a(:, :, 1) % 显示a的第一层
c=cat(3, a, b) % 用函数来构成高维数组
6.7 多项式及其运算式
多项式的创建:
(1) 由1×N的N维向量
P=[a0 a1 a2 … an] 表示 Pn=a0xn + a1xn-1 + a2xn-2+ .. +an多项式。
(2) 由函数poly(A)定义
如果A为二维或以上的矩阵,poly(A)表示由A的特征根确定的多项式。如果A为一维矩阵
poly(A)表示由A的元素为多项式的根确定的多项式。
举例:
%方法一
p=[1 -2 3] %直接给出多项式p
poly2sym(p) %给出p多项式的表达式
%方法二
a=[1 2; -2 4]
ps=poly(a) % 计算a的特征根确定的多项式
poly2sym(ps) % 给出ps多项式的表达式
%方法三
x=[-1 2]
px=poly(x) % 以x的元素为多项式的根确定的多项式
poly2sym(px) % 给出ps多项式的表达式