《北师MATLAB课件实验课一》由会员分享,可在线阅读,更多相关《北师MATLAB课件实验课一(13页珍藏版)》请在金锄头文库上搜索。
1、数学模型实验课(一),函数、图像、方程,管道包扎问题: 如果知道直圆管道的长度,用缠绕的方法包扎管道,需用多长的带子? 设管道长 L = 30m , 圆管截面周长 C = 50cm, 带子宽 W = 30cm,则最少要用多长M的带子才能将管道缠绕包扎上? 现有带长M=51m,计划将这条带子全部用来缠绕包扎上面的管道。缠绕时允许带子互相重叠一部分。应该如何包扎这个管道?(计算结果精确到0.001),1.1 函数及其图像,一、函数值及图像 初等函数数值直接表示: 幂函数 sqrt sin asin tan exp log 1. 求连续函数在一点函数值 sin(2) 2.求函数在一列点上的值 x=1
2、:6;y=x.2+sin(x); 3. 画函数的图像 plot(x,y),grid,进一步: 二元函数的定义、求值、画图 x=-3:0.1:3;y=x; X,Y=meshgrid(x,y); Z=X.2+cos(4.*Y); surf(X,Y,Z); mesh(X,Y,Z); 尝试meshc,meshz,surfc,surfl ezsurf(x.2 +sin(y),二、自定义函数 (1)定义内联函数 fun=inline(x2+y2,x,y); (2)函数句柄 fun=(x,y) x.2+sin(y); (3)建立M函数文件 在Matlab命令窗口的File菜单中选择New命令,出现子菜单,
3、选择m-file的命令,将得到M文件的编辑窗口 编辑M文件:可以是一段程序或一个函数。 编辑完成后,在此窗口的File菜单中选择save as的命令,得到对话 框,输入文件名 *.m,三、函数运算求函数值,fun(3) x=-0.5 0 0.8 18; fun(x); feval(fun,3) 求初等函数在一列点上的函数值 function y=fun(x) y=x2+sin(x); Save as fun.m x=1:10; eval(x.2+sin(x) fvec=vectorize(fun) feval(fvec,x),问题 1:设管道长L=30m,圆管截面周长 C=50cm, 如果带子
4、宽W=30cm, 用缠绕的方法包扎管道,最少要用多长带子才能将管道包上 模型: 所需要的带子长度为 function y=fun(x) y=30.*0.5./x+sqrt(0.5.2-x.2); Save as fun.m fun(0.3) 50.4000,1.2 求解函数方程 问题2 现有带子长M=51cm,计划将这条带子全部用来缠绕包扎上面的管道,缠绕时允许带子互相重叠一部分,应该如何包扎这个管道。 建模:令在包扎时除去重叠部分后带子的宽度为W,则应该有关系 求解. 上述问题可以转化为求函数 的零点,1. 直接求一元函数的零点 %用内联函数求零点 fun=inline(51-30*0.5/
5、w-sqrt(0.52-w2),w); w0=fzero(fun,0.3) %用函数文件求零点 function y=fun1(w) y=51-30*0.5/w-sqrt(0.52-w2); w0=fzero(fun1,0.3) 2. 图像求解 x=0.001:0.0001:0.5; fun2=vectorrize(fun1);y=fun2(x) plot(x,y),grid,3.用循环语句迭代求解 n=0.25; while fun1(n)=0, n=n+0.001; end; n; %用循环语句搜寻零点。因为随着带宽的减小,带长增加,一旦带长超过51米则停止搜寻,为使零点的精度达到0.00
6、1,取搜寻的步长为0.001。 for i=1:100 w=0.3-0.001*i; y=30*0.5/w+sqrt(0.52-w2); if y =51 w0=w, break; end; end; w0,4. 二元函数方程组求解 画等高线图搜寻两个函数的公共零点的近似值 取近似的公共零点作为初值,求精确坐标,练习 二分法求解方程零点,运用二分法求函数F(x)=x-2(1/x)的零点 分析:F(1)=-10. 由连续函数性质知存在x*(1,2),使得 F(x*)=0 二分法算法伪代码: step0: Let x0=1,y0=2 step i: Let c=(xi-1+yi-1)/2, if f(c)=0, then x*=c, end elseif f(c)0, then xi=xi-1,yi=c, otherwise xi=c,yi=yi-1, if yi-xi0.001,then x*=(xi+yi)/2, end otherwise go next step 写出Matlab程序,