计算机.docx
- 文档编号:2235080
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:15
- 大小:162.40KB
计算机.docx
《计算机.docx》由会员分享,可在线阅读,更多相关《计算机.docx(15页珍藏版)》请在冰豆网上搜索。
计算机
《MATLAB程序设计实践》课程考核
班级:
材料0808
学号:
0604080805
姓名:
韩勇军
1、编程实现以下科学计算算法,并举一例应用之。
(参考书籍《精通MALAB科学计算》,王正林等著,电子工业出版社,2009年)
“切比雪夫逼近”
算法说明:
当一个连续函数定义在区间[-1,1]上时,它可以展开成切比雪夫级数。
即:
其中为次切比雪夫多项式,具体表达可通过递推得出:
,
它们之间满足如下的正交关系:
在实际应用中,可根据所需的精度来截取有限的项数,切比雪夫级数中的系数由下式决定:
在MATLAB中编程实现的切比雪夫逼近法函数为:
Chebyshev。
功能:
用切比雪夫多项式逼近已知函数。
调用格式:
其中,y为已知函数;
k为逼近已知函数所需项数;
f是求得的切比雪夫逼近多项式在x0处的逼近值。
程序源代码(m文件):
functionf=Chebyshev(y,k,x0)
%用切比雪夫多项式逼近已知函数
%已知函数:
y
%逼近已知函数所需项数:
k
%逼近点的x坐标:
x0
%求得的切比雪夫逼近多项式或在x0处的逼近值:
f
symst;
T(1:
k+1)=t;
T
(1)=sym('1');
T
(2)=t;
c(1:
k+1)=sym('0');
c
(1)=int(subs(y,findsym(sym(y)),sym('t'))*T
(1)/sqrt(1-t^2),t,-1,1)/pi;
c
(2)=2*int(subs(y,findsym(sym(y)),sym('t'))*T
(2)/sqrt(1-t^2),t,-1,1)/pi;
f=c
(1)+c
(2)*t;
fori=3:
k+1
T(i)=2*t*T(i-1)-T(i-2);
c(i)=2*int(subs(y,findsym(sym(y)),sym('t'))*T(i)/sqrt(1-t^2),t,-1,1)/2;
f=f+c(i)*T(i);
f=vpa(f,6);
if(i==k+1)
if(nargin==3)
f=subs(f,'t',x0);
else
f=vpa(f,6);
end
end
end
应用实例:
切比雪夫应用实例。
用切比雪夫公式(取6项)逼近函数,并求当x=0.5时的函数值。
解:
利用程序求解方程,在MATLAB命令窗口中输入:
>>Chebyshev('1/(2-x)',6)%调用创建的函数euler,输出切比雪夫多项式的6个项
再在MATLAB命令窗口中输入:
>>Chebyshev('1/(2-x)',6,0.5)%调用创建的函数euler,输出当x=0.5时的函数值
输出结果:
流程图:
2、编程解决以下科学计算问题。
实验2:
用二分法(程序3.1)和Newton迭代法(程序3.2)求下列方程的正根:
(1)二分法:
erfen.m:
functiony=erfen(fun,a,b,esp)
ifnargin<4esp=1e-4;end
iffeval(fun,a)*feval(fun,b)<0
n=1;
c=(a+b)/2;
whilec>esp
iffeval(fun,a)*feval(fun,c)<0
b=c;c=(a+b)/2;
elseiffeval(fun,c)*feval(fun,b)<0
a=c;c=(a+b)/2;
elsey=c;esp=10000;
end
n=n+1;
end
y=c;
elseiffeval(fun,a)==0
y=a
elseiffeval(fun,b)==0
y=b;
elsedisp('these,maynotbearootintheintercal');
end
n
函数文件:
fc.m
functiony=fc(x)
y=x*log(sqrt(x.^2-1)+x)-sqrt(x.^2-1)-0.5*x;
end
在MATLAB命令框中输入:
>>clear
>>erfen('fc',1,10,0.05)
输出结果:
(2)牛顿迭代法:
newton.m
functiony=newton(x0)
x1=x0-fc(x0)/df(x0);
n=1;
while(abs(x1-x0)>=1.0e-6)&(n<=100000000)
x0=x1;
x1=x0-fc(x0)/df(x0);n=n+1;
end
x1
n
函数文件:
fc.m
functiony=fc(x)
y=x*log(sqrt(x.^2-1)+x)-sqrt(x.^2-1)-0.5*x;
end
导数函数文件:
df.m
functiony=df(x)
y=log(x+(x^2-1)^(1/2))-x/(x^2-1)^(1/2)+(x*(x/(x^2-1)^(1/2)+1))/(x+(x^2-1)^(1/2))-1/2;
end
在MATLAB命令框中输入:
>>clear
>>clc
>>newton(3)
输出结果:
对比二分法和牛顿法可知:
newton法n值较小,收敛得要快一些。
实验3:
已知函数f(x)=x4-2x在(-2,2)内有两个根,作图求取初值。
用MATAB命令求这两个根。
源代码:
erfen2.m:
functiony=erfen2(fun,a,b,n)
formatlong
ifnargin<4
n=10000;
end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机