科学计算与MATLAB主讲:汪冰峰主讲:汪冰峰中南大学材料科学与工程学院中南大学材料科学与工程学院2010.112010.11上机考试复习MATLAB基础操作题¾28页,例2-1¾62页,例2-29,2-30¾64页,例2-31¾66页,例2-32¾88页,例3-7MATLAB图形操作题¾101页,例4-1¾104页,例4-6¾107页,例4-10¾123页,例4-30¾124页,例4-31插值/拟合操作题¾222页,例7-3¾227-228页,例7-7/7-8微分求解操作题¾244页,例题¾87页,例题clearall;F=[11.21.42.35;0-0.6342;-177.291.4];[gx,gy]=gradient(F)%计算梯度n=surfnorm(F)%计算法向量积分函数操作题¾233页,例7-10¾237页,例7-11/12常微分方程操作题¾275页,例题7-47¾273-274页,例题7-45/46方程组求解操作题¾246页,例7-17¾265页,例7-39方程求根操作题例:求方程在x=0.5附近的根。210xx+−=x=fzero('x^2+x-1',0.5)例:求方程在区间[1.2,2]上的一个根。220xx−+=x=fzero('sqrt(x)-x^3+2',[02])偏微分方程求解操作题Simulink求解例:求解椭圆型偏微分方程的拉普拉斯形式。2222222(,)(,)(,)004,04(,0),(,4)16cos()(0,),(4,)16cos()uxyuxyuxyxyxyuxxuxxuyyuyy∂∂∇=+=∂∂≤≤≤≤⎧==⎨==⎩概率统计求解操作题¾307页,例9-21;¾308页,例9-22;¾309页,例9-23•梯形积分MATLAB程序设计编程题•MATLAB程序设计(中点法)functiondf=MidPoint(func,x0,h)ifnargin==2h=0.1;elseif(nargin==3&&h==0.0)disp('h不能为0!');return;endendy1=subs(sym(func),findsym(sym(func)),x0+h);y2=subs(sym(func),findsym(sym(func)),x0-h);df=(y1-y2)/(2*h);•简单欧拉方法程序function[outx,outy]=MyEuler(fun,x0,xt,y0,PointNum)%MyEuler用前向差分的欧拉方法解微分方程%fun表示f(x,y)%x0,xt表示自变量的初值和终值%y0表示函数在x0处的值,其可以为向量形式%PointNum表示自变量在[x0,xt]上取的点数ifnargin5|PointNum=0%如果函数仅输入4个参数值,则PointNum默认值为100PointNum=100;endifnargin4%y0默认值为0y0=0;endh=(xt-x0)/PointNum;%计算步长hx=x0+[0:PointNum]'*h;%自变量数组y(1,:)=y0(:)';%将输入存为行向量,输入为列向量形式fork=1:PointNumf=feval(fun,x(k),y(k,:));%计算f(x,y)在每个迭代点的值f=f(:)';y(k+1,:)=y(k,:)+h*f;%对于所取的点x迭代计算y值endouty=y;outx=x;%plot(x,y)%画出方程解的函数图function[root,n]=StablePoint(f,x0,eps)if(nargin==2)eps=1.0e-4;endtol=1;root=x0;n=0;while(toleps)n=n+1;r1=root;root=subs(sym(f),findsym(sym(f)),r1)+r1;tol=abs(root-r1);end•不动点迭代法求解非线性方程•C语言与MATLAB比较对于给定的X求解下列n多项式的值P(x)=a0+a1x+a2X^2+…+anx^n算法:直接逐项求和tk=x^kUk=a0+a1x+a2X^2+…+a(k-1)x^(k-1)+akx^ktk=xt(k-1)Uk=u(k-1)+aktk初值:t0=xu0=a0算法分析:秦九韶算法P(x)=a0+a1x+a2X^2+…+anx^nP(x)=(…((anx+an-1)x+an-2)x+…+a1)x+a0If,vk=(…((anx+an-1)x+an-2)x+…+an-k+1)x+an-kVk=vk-1x+an-kV0=ank=1,2,…,n开始读入x,nan-vK-1读入aiK=nVx+an-k—vK+1-k输出V结束C语言程序为:Voidreadata(floata[],intn){inti;For(i=0;i=n;i++)Scanf(“%f”,&a[i]);Main(){voidreaddata(floata[],intn);Floatx,a[10],v;Intn,k;Printf(“entern,x:”);Scanf(“%d,%f”,&n,&x);Printf(“enterthearrayofa[n]:”);Readdata(a,n);V=a[n];K=1;While(k=n){v=v*x+a[n-k];K=k+1;}Printf(“%f\n”,v);}求p(x)=1.345x^4+3.458x^3+5.980x^2-9.672x-3.722,x=4.781多项式的值。C程序运行过程为:entern,x:4,4.781enterthearrayofa[n]:1.3453.4585.980-9.672-3.722V=1167.37468MATLAB程序运行结果:谢谢谢谢!!