《Matlab 程序设计实践》课程考核
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Matlab 程序设计实践》课程考核
班级:材料5562
学号:054633898
姓名:原迅
一.编程实现以下科学计算算法,并举一例应用之。“帕德逼近”在matlab中编程实现的帕德逼近法函数为:Pade。
功能:用帕德形式的有理分式逼近已知函数。
调用格式:f=Pade(y,n)或f=Pade(y,n,x0)
其中,y为已知函数;
n为帕德有理分式的分母多项式的最高次数;
x0为逼近点的x坐标;
f为求得的帕德有理分式或在x0处的逼近值。
在matlab中实现函数的帕德逼近的代码如下:
M文件名:Pade.m
function f= pade(y,n,x0)
%用帕德形式的有理分式逼近已知函数
%已知函数:y
%帕德有理分式的分母多项式的最高次数:n
%逼近点的x坐标:x0
%求得的帕德有理分式或在x0处的逼近值:f
syms t;
A=zeros(n,n);
q=zeros(n,1);
p=zeros(n+1,1);
b=zeros(n,1);
yy=0;
a(1:2*n)=0.0;
for(i=1:2*n)
yy=diff(sym(y),findsym(sym(y)),n);
a(i)=subs(sym(yy),findsym(sym(yy)),0.0)/factorial(i);
end;
for(i=1:n)
for(j=1:n)
A(i,j)=a(i+j-1);
end;
b(i,1)=-a(n+i);
end;
q=A\b;
p(1)=subs(sym(y),findsym(sym(y)),0.0);
for(i=1 :n)
p(i+1)=a(n)+q(i)*subs(sym(y),findsym(sym(y)),0.0) ;
for(j=2 :i-1)
p(i+1)=p(i+1)+q(j)*a(i-j);
end
end
f_1=0;
f_2=0;
for(i=1:n+1)
f_1=f_1+p(i)*(t^(i-1));
end
for(i=1:n)
f_2=f_2+q(i)*(t^i);
end
if(nargin==3)
f=f_1/f_2;
f=subs(f,'t',x0);
else
f=f_1/f_2;
f=vpa(f,6);
end
方法一算法实现流程图如下:
例子:帕德逼近应用实例,用勒让德公式(取四项)逼近函数1/(1-x),并求当x=0.5时的函数值
解:在matlab命令窗口中输入以下命令:
M文件名:aa.m
>> f=Pade('1/(1-x)',4)
f =
(2.92857*t^4 + 0.821429*t^3 + 0.988095*t^2 + 1.0006*t + 1.0)/(- 0.5*t^4 + 0.107143*t^3 - 0.0119048*t^2 + 0.000595238*t + 1.0)
M文件名:bb.m
>> f=Pade('1/(1-x)',4,0.5)
f =
2.0757
从逼近结果看,函数的准确值为1/(1-0.5)=2,而用4次有理分式的帕德逼近已经达到了很高的精度了。
实现流程图为:
二.编程解决以下科学计算和工程实际问题。
拉弯合成部件的截面设计。这一设计计算将归结为解一个三次代数方程,过去要用试凑法反复运算,本例显示了用matlab求解的简洁。钻床立柱如图所示。设P=15kN,许用拉应力[σ]=35Mpa,钻头轴与立柱轴距离为0.4m,试求立柱直径。
钻床受力图
这个三次代数方程可用matlab多项式求根的roots函数求解
M文件名:dd.m
源程序:
P=input('p='),l=input('l=') %输入力和偏心距
asigma=input('[Ò]=') %输入许用拉应力
a=[ asigma *pi/32,0,-P/8,-P*1]; %求三次代数方程的导数向量
r=roots(a); %求代数方程的根
d=r(find(imag(r)==0)) %只取实根
结果:
>> dd
p=15000
P =
15000
l=0.4
l =
0.4000 [σ]=35e6 asigma =
35000000
d =
0.1219
流程图如下:
三.求解下列边值问题:
(1)x”=(-2/t)x’+(2/t.^2)x+(10cos(ln(t)))/t.^2,其中x(1)=1,x(3)=3,输出t=1.5,2,2.5时x的值,并作x的图。
解:
调用dsolve函数,求解微分方程的符号解法
M文件名:ff.m
>> x=dsolve('D2x=(-2/t)*D1x+(2/(t^2))*x-(10*cos(log(t)))/(t^2)','x(1)=1','x(3)=3','t')
x =
1/13*t*(28*tan(1/2*log(3))^2+9*tan(1/2*log(3))+1)/(1+tan(1/2*log(3))^2)-9/13/t^2*(6*tan(1/2*log(3))^2 +tan(1/2*log(3))+3)/(1+tan(1/2*log(3))^2)-(2*tan(1/2*log(t))-3+3*tan(1/2*log(t))^2)/(1+tan(1/2*log(t))^2) >>ezplot(x)
>>legend('x- t的函数')
>> t=[1.5,2,2.5]
t =
1.5000
2.0000 2.5000
>> x=subs(sym(x),findsym(x),t)
x =
2.4776 2.8336 2.9391
1/13 t (28 tan(1/2 log(3))2+9 tan(1/2 log(3))+1)/(1+tan(1/2 log(3))2)-...-(2 tan(1/2 log(t))-3+3 tan(1/2 log(t))2)/(1+tan(1/2 log(t))2)
t