x=xlsread('noisyData.xls'); width=11;
smoothed=rectFilt(x,width); figure; plot(x,'--'); hold on;
plot(smoothed,'r'); hold off;
xlabel('Index');
ylabel('Data value');
title('Smoothing Demonstration'); legend('Original Data','Smoothed'); 7.绘制圆的函数
我想绘制一个圆,matlab没有这个函数,没关系我们可以自己来写。编辑一个函数,[x,y]=getCircle(center,r),其中x,y返回的是一个圆的x,y一一对应的值,圆心为center,center应该是一个2个元素的向量,第一个值为x坐标,第二个为y坐标,r为圆半径。最终我们利用返回的x和y只需使用plot函数就可以绘制一个圆。 提示:假如圆心为(0,0),那么半径为1的圆可以按照以下方程求解x,y坐标x(t)=cos(t), y(t)=sin(t)。其中t为[-2*pi:2*pi]。因此,我们可以在以上坐标基础上做任意的尺度变化(半径)和坐标移动(圆心坐标)。 完成以上函数后,我们可以用这个函数来做一些有意思的事情,请利用上面写出的函数完成下面两个练习:
A. 编写一个脚本,名为concentric.m,利用前面的圆函数,结合plot和hold on命令绘制5
个同心圆,结果参考下图:
1050-5-10-15-10-5051015
B. 编写一个脚本,名为olympic.m,利用上面的圆函数,绘制olympic的logo,结果如下
图:
0.80.60.40.20-0.2-0.4-0.6-0.8-1-1.2-1-0.500.511.5
程序(1)function [x,y]=getCircle(center,r) t=-2*pi:0.01:2*pi for i=1:length(t) a=t(i);
x(i)=r*cos(a)+center(1); y(i)=r*sin(a)+center(2); end
程序(2)r=0.5; center=[1,0];
[x,y]=getCircle(center,r) plot(x,y,'r','linewidth',3) hold on; r=0.5;
center=[-0.5,-0.5]; [x,y]=getCircle(center,r) plot(x,y,'y','linewidth',3) hold on; r=0.5;
center=[0.5,-0.5];
[x,y]=getCircle(center,r) plot(x,y,'g','linewidth',3) hold on; r=0.5;
center=[0,0];
[x,y]=getCircle(center,r) plot(x,y,'k','linewidth',3) hold on; r=0.5;
center=[-1,0];
[x,y]=getCircle(center,r) plot(x,y,'linewidth',3) xlim([-1.5 1.5]); ylim([-1.4 1]); hold off;
第三题
目的:
5) 通过自己写函数解决一些常见问题。
题目说明:所有的题目代码写入相应的脚本中,如果题目没有要求特定的脚本文件名,自行定义一个即可。
1.线性方程求解:
使用“\\”,求解下面的线性系统,计算并显示误差向量。
3a?6b?4c?1a?5b?27b?7c?3
clear all;
A=[3,6,4;1,5,0;0,7,7]; B=[1;2;3]; x=A\\B a=x(1) b=x(2)
c=x(3) 2.数值积分:
5使用trapz或者quad计算积分xe?x/3dx,我们知道根据分部积分法可以计算这个积分
?0得到?3xe?x/350?5/3那么请比较实用trapz计算得到的结果和直接使用|?9e?x/3|5??24e?9,0积分后数值计算的结果差异,并显示在命令行窗口中。
clear all; x=0:0.01:5; y=x.*exp(-x/3); z=trapz(x,y)
%%%%%%%%%%%%%%%%% syms a
int(a.*exp(-a/3),0,5)
3.矩阵求逆:
计算矩阵??12??的逆,使用inv函数。然后将结果乘以原始矩阵,检查结果是否为单34??位阵。
clear all; a=[1 2;3 4] b=a*inv(a)
4.多项式拟合:
使用xlsread函数分别载入数据randomDatax.xls和randomDatay.xls,使用ployfit函数对该两对变量分别做1,2,3,4,5阶拟合,为了得到比较好的拟合效果,使用polyfit的中心与标尺模式,具体使用方法为[p,S,mu] = polyfit(x,y,n),它会返回三个参数,
接下来使用对应的[y,delta] = polyval(p,x,S,mu)来根据x对y进行拟合。最后绘制为图,原始数据为黑色圆点,其他5个拟合为不同颜色,对x,y轴做label,对整个图做title,另外加入legend以注明不同曲线的含义。
运行结果可参考下例:
Plynomial fits to random data0.20.150.10.050-0.05-0.1-0.15-0.2 100OriginalOrder 1Order 2Order 3Order 4Order 5110120130140150x160170180190200 y
clear all;
x=xlsread('randomDatax.xls'); y=xlsread('randomDatay.xls'); plot(x,y,'k.') hold on;
[p S mu]=polyfit(x,y,1);
[m delta]=polyval(p,x,S,mu); plot(x,m,'linewidth',2); hold on;
[p S mu]=polyfit(x,y,2);
[m delta]=polyval(p,x,S,mu); plot(x,m,'g','linewidth',2); hold on;
[p S mu]=polyfit(x,y,3);
[m delta]=polyval(p,x,S,mu); plot(x,m,'r','linewidth',2); hold on;
[p S mu]=polyfit(x,y,4);
[m delta]=polyval(p,x,S,mu); plot(x,m,'y','linewidth',2); hold on;