matlab程序设计实践。
题目 matlab程序设计实践8—9页。
学生姓名韩素琦。
学号 0604090916
指导教师汪冰峰。
学院材料科学与工程学院
专业材料压力加工。
完成时间 2024年4月12日
matlab程序设计实践报告。
一. 勒让德逼近编程实现“勒让德逼近”,并用勒让德公式(取6项)逼近函数:1/(2-x),并求出当x=0.5时的函数值。
1 算法说明:
当一个连续函数定义在区间[-1,1]上时,它可以展开成勒让德级数。即:
其中pn(x)为n次勒让德多项式
勒让德的逼近要求被逼近函数定义在区间【-1,1】上,勒让德多项式也可以通过递推来定义:
它们之间满足如下的正交关系:
在实际应用中,可以根据所需的精度来截取有限项数。勒让德级数中的系数由下式确定:
在matlab中编程实现的勒让德逼近法函数为:legendre。
功能:用勒让德多项式逼近已知函数。
调用格式:f= legendre(y,k)或f= legendre(y,k,x0)
其中,y为已知函数;
k为逼近已知函数所需项数;
x0为逼近点的x坐标:
f为求得的勒让德逼近多项式或在x0处的逼近值。
2 源程序:
第一个源程序:
function f=legendre(y,k,x0)
用勒让德多项式逼近已知函数。
已知函数:y
逼近已知函数所需项数:k
逼近点的x坐标:x0
求得的勒让德逼近多项式或在x0处的逼近值:f
syms t;
p(1:k+1)=t;
p(1)=1;
p(2)=t;
c(1:k+1)=0.0;
c(1)=int(subs(y,findsym(sym(y)),sym('t'))p(1),t,-1,1)/2;
c(2)=int(subs(y,findsym(sym(y)),sym('t'))p(2),t,-1,1)/2;
f=c(1)+c(2)*t;
for i=3:k+1
p(i)=(2*i-3)*p(i-1)*t-(i-2)*p(i-2))/i-1);
c(i)=int(subs(y,findsym(sym(y)),t)*p(i),t,-1,1)/2;
f=f+c(i)*p(i);
if(i==k+1)
if(nargin==3) %输入参数个数为三。
f=subs(f,'t',x0);
elsef=vpa(f,6); 对逼近值f取六位有效数字。
end end
end 第二个源程序:
> f=legendre('1/(2-x)',6)
f=legendre('1/(2-x)',6,0.5)
运行结果:f =
0.0955158*t - 0.0000116697*t*(2.
2*t*(2.25*t*(4.66667*t - 2.
33333*t*(7.5*t^2 - 2.5)) 10.
125*t^2 - 3.375) -5.86667*t + 2.
93333*t*(7.5*t^2 - 2.5)) 0.
0000565953*t*(2.25*t*(4.66667*t - 2.
33333*t*(7.5*t^2 - 2.5)) 10.
125*t^2 - 3.375) +0.00154825*t*(7.
5*t^2 - 2.5) -0.000275682*t*(4.
66667*t - 2.33333*t*(7.5*t^2 - 2.
5)) 0.0305351*t^2 + 0.539128f =
从逼近结果上来看,函数的准确值为1/(2-0.5)=0.6667.
流程图如下:
第一题流程图:是。否。
是。否。
是 第二题流程图:
二.编程解决以下科学计算和工程实际问题。
1) 简支梁受左半均匀分布载荷q及右边l/4处集中力偶m0作用(如下图1-1),求其弯矩、转角和挠度。设l=2m,q=1000n/m,m0=900n*m,e=200*109n/m2,i=2*10-6m4.
图1-11 解题思路:
首先对简支梁进行受力分析,受力分析图(如下图1-2)所示:
图1-2第一步:计算支反力。
设支座a和b处的支反力分别为fay和fby,则据∑ma=0,∑fy=0得到平衡方程为:
fby=(q*l^2/8+m0)/l
fay=q*l/2-fby
第二步:建立弯矩方程。
以截面c,d为分界面,将梁划分为ac,cd,db三段。
分别建立ac,cd,db三段对应的弯矩方程:
m1=fay*x-q*x.^2/2; 0≦x≦l/2
m2=fby*(l-x)-m0; l/2≦x≦3l/4
m3=fby*(l-x3l/4≦x≦l
第三步:建立挠曲轴近似微分方程并积分。
建立挠曲轴近似微分方程d2y/dx2=m(x)/ei
对m/ei积分,得转角a,再做一次积分,得挠度y,每次积分都有一个待定的积分常数。
a=∫(m)*dx/(e*i)+ca= a0(x)+ca, 此处设a0(x)= cumtrapz(m)*dx/(e*i
y=∫(a)*dx+cy=∫a0(x) *dx+ca*x+cy,此处设y0(x)=cumtrapz(a0)*dx
第四步:确定相应的积分常数。
ca,cy由边界条件y(0)=0,y(l)=0确定。
y(0)= y0(0)+cy=0
y(l)= y0(l)+ca*l+cy=0
即[0 1;l 1] [ca;cy]=[y0(0);-y0(l)]
ca;cy]=[0,1;l,1]\[y0(0);-y0(l)];
第五步:根据计算结果绘制弯矩、转角以及挠度图形。
源程序:l=2;q=1000;m0=900;e=200e9;i=2e-6; %输入已知参数。
fby=(q*l^2/8+m0)/l;fay=q*l/2-fby; %求支反力。
x=linspace(0,l,101);dx=l/100linspace是线性空间向量。
m1=fay*x(1:51)-q*x(1:51).^2/2; %分三段用数组列出m数组。
m2=fby*(l-x(52:76))-m0;
m3=fby*(l-x(77:101));
m=[m1,m2,m3写出完整的m数组。
a0=cumtrapz(m)*dx/(e*i由m积分求转角a
y0=cumtrapz(a0)*dx由转角积分求挠度y
c=[0,1;l,1]\[y0(1);-y0(101由边界条件求积分常数。
ca=c(1),cy=c(2),a=a0+ca;y=y0+ca*x+cya为转角,y为挠度,求出转角和挠度的完整数值。
subplot(3,1,1),plot(x,m),grid %绘制弯矩图形。
subplot(3,1,2),plot(x,a),grid %绘制转角图形。
subplot(3,1,3),plot(x,y),grid %绘制挠度图形。
3 运行结果:
ca =1.4624e-004cy =
流程图:2)实验一用ode45,ode23及ode113解下列微分方程:
源程序:matlab命令窗口中输入:(或新建一m文件。
fun1=inline('x-y','x','y');
x23,y23]=ode23(fun1,[0,3],1)
x45,y45]=ode45(fun1,[0,3],1)
x113,y113]=ode113(fun1,[0,3],1)
f=dsolve('dy=x-y','y(0)=1','x');
a=[1,2,3];
y=subs(sym(f),findsym(f),a)
运行结果:x23 =
y23 =
x45 =
MATLAB课程设计
1 求被控对象传递函数g s 的matlab描述。num 789 6312 11835 den 1 14 56 64 0 0 gs tf num,den transfer function 789 s 2 6312 s 11835 s 5 14 s 4 56 s 3 64 s 2 2 求被控对象脉冲...
MATLAB课程设计
课程设计。题目 matlab计算器。姓名 班级 学院 专业 完成时间。1总体设计。该计算器程序主要是matlab来制作,界面主要由四个静态文本框 21个运算按钮和两个动态文本框组成。实现的运算功能有四则运算 加 减 乘 除。而且添加了括号使人们使用时更加简单。这些计算功能主要调用了matlab的自定...
MATLAB课程设计
matlab课程设计。如图所示,为测量系统的示意图,它由两个能相互转动的连杆,角度编码器和滚轮等组成。o1为固定点,o2点为转动点,o3点为滚轮的中心,连杆的有效长度分别为l1和l2。任一位置时,连杆1相对于某基准位置的角度为 1,两连杆的相对角度为 2。其中对于 1,取垂直方向为基准线,在基准线左...