自己整理MATLAB知识1入门例1-1 绘制正弦曲线和余弦曲线。
x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x));例1-2 求方程3x4+7x3+9x2-23=0的全部根。
p=[3,7,9,0,-23]; %建立多项式系数向量x=roots(p) %求根例1-3 求积分quad('x.*log(1+x)',0,1) %‘里是被积函数’0,1分别是积分上下限例1-4 求解线性方程组。
a=[2,-3,1;8,3,2;45,1,-9]; %方程左面系数b=[4;2;17]; %方程右面系数x=inv(a)*b %也可是x=a\b的形式例1-5 水仙花for m=100:999m1=fix(m/100); %求m的百位数字m2=rem(fix(m/10),10); %求m的十位数字m3=rem(m,10); %求m的个位数字if m==m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend例1-6 已知,当n=100时,求y的值。
程序如下:y=0;n=100;for i=1:ny=y+1/(2*i-1);endy例1-7 求[100,200]之间第一个能被21整除的整数for n=100:200if rem(n,21)~=0continueendbreakendn例1-8 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。
求[1,500]之间的全部完数。
for m=1:500s=0;for k=1:m/2if rem(m,k)==0s=s+k;endendif m==sdisp(m);endend例1-9 绘制曲线t=0:0.1:2*pi;x=t.*sin(3*t);y=t.*sin(t).*sin(t);plot(x,y);例1-10 用不同标度在同一坐标绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx) 程序如下x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2);例1-11 绘制三维曲线t=0:pi/100:20*pi;x=sin(t);y=cos(t);z=t.*sin(t).*cos(t);plot3(x,y,z);title('Linein 3-D Space');xlabel('X');ylabel('Y');zlabel('Z');grid on;例1-12 绘制三维曲面[x,y]=meshgrid(0:0.25:4*pi);z=sin(x+sin(y))-x/10;mesh(x,y,z);axis([0 4*pi 0 4*pi -2.5 1]);例1-13 使用switch结构判断学生成绩的等级,90分以上为优,80~90为良,70~80为中,60~70为及格,60分以下为不及格。
score=98;s1=fix(score/10); %取十位数switch s1case {9,10}s='优'case 8s='良'case 7s='中'case 6s='及格'otherwises='不及格'end例1-14 使用for结构计算1+2+3+…+100 sum=0;for i=1:100sum=sum+i;endsum另一种方法:i=1;100;a=sum(i)第三种方法:sum=0; i=1;while i<=100sum=sum+i;i=i+1;endsum例1-15例1-16 鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼关了多少只兔子和多少只鸡?chicken=1;while 1if chicken+(100-2*chicken)/4==36break;endchicken=chicken+1;endchickenrabbit=(100-2*chicken)/4例1-17 设银行年利率为11.25%.将10000元钱存入银行,问多长时间会连本带利翻一番?money=10000;years=0;while money<20000years=years+1;money=money*(1+11.25/100)end例1-18 小猴吃桃问题有一天小猴摘下了若干个桃子,当即吃掉了一半,又多吃了一个.第二天接着吃了剩下的一半,又多吃了一个以后每天都是吃掉尚存的桃子的一半零一个.到第十天早上,小猴准备吃桃子时,看到只剩下 1 个桃子了.问小猴第一天共摘下了多少个桃子?k=10;p(k)=1;while k>=2k=k-1;p(k)=2*(p(k+1)+1);endp(1)另一种方法:x(1)=1;for i=2:10;x(i)=(x(i-1)+1)*2 ;endx(10)第三种方法:m=1;for i=1:9m=2*(m+1);endm例1-19 对任一自然数n,按如下法则进行运算:若n为偶数, 则将n除2;若n为奇数,则将n乘3加1。
将运算结果按上面法则继续运算, 重复若干次后计算结果最终是1.n=input(‘input n=’); %输入数据while n~=1r=rem(n,2); %求n/2的余数if r = =0n=n/2 %第一种操作elsen=3*n+1 %第二种操作endend例1-20 利用for循环求1!+2!+3!+…. +5!的值sum=0;for i=1:5sum=sum+prod(1:i);endsum例1-21 求向量x的各元素的平方和x = input (‘x=’);s=0;for i=1:length(x)s=s+x(i)^2;ends例1-22 计算f(x)=ex,使用break语句当f(x)>1000时终止计算。
x=0:10;for n=xf=exp(n);if f>1000breakendend例1-23 使用for循环将字符串中的数值取出,遇到非数值则跳过。
str='The result is 100.';len=length(str);s=[ ];for n=1:lenif str(n)>'9' | str(n)<'0' %非数值时 continueends=[s str(n)]end例1-24x=-5:0.1:5;if x>=1y=x.^2-1;elseif -1<x<1y=0;elsey=-x.^2-1;endplot(x,y);例1-25 计算s=0;for i=1:10000s=s+1/2^(i+2);end例1-26 用循环求解最小的m ,使其满足 s=0;221101111x x x x x ⎧-≥⎪-<<⎨⎪-+≤-⎩∑=+100001221i i ∑=>m i i 110000while (s<=10000) m=m+1; s=s+m; end例1-27 编写M 脚本文件,分别使用for 和while 循环语句计算 ,当sum>1000时终止程序。
for 循环 clear sum=0 for n=1:1000 sum=n^n+sum if sum>1000 break end end while 循环 sum=0;n=1; while sum<1000 sum=n^n+sum n=n+1∑==101i i isum例1-28 考虑两个多项式a(x)=x3+2x2+3x+4和b(x)= x3+4x2+9x+16的乘积:a=[1 2 3 4] ; b=[1 4 9 16];c=conv(a , b)c =1 6 20 50 75 84 64结果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。
两个以上的多项式的乘法需要重复使用conv。
例1-29 设x=[1,2,3,4,5,6]; y=[2,5,12,16,13,11];试用这6个散点,拟合一条3次多项式曲线.x=[1,2,3,4,5,6]; y=[2,5,12,16,13,11];f=polyfit(x,y,3);X=linspace(0,6,100);Y=polyval(f,X);plot(x,y,'ro',X,Y,'B-','linewidth',5);例1-30 求极限函数 limit格式 limit(F,x,a) %计算符号表达式F=F(x)的极限值,当x→a 时。
limit(F,a) %用命令findsym(F)确定F中的自变量,设为变量x,再计算F的极限值,当x→a时。
limit(F) %用命令findsym(F)确定F中的自变量,设为变量x,再计算F的极限值,当x→0时。
limit(F,x,a,'right')或limit(F,x,a,'left') %计算符号函数F 的单侧极限:左极限x→a- 或右极限x→a+。
syms x a t h n;L1 = limit((cos(x)-1)/x)L2 = limit(1/x^2,x,0,'right')L3 = limit(1/x,x,0,'left')L4 = limit((log(x+h)-log(x))/h,h,0)v = [(1+a/x)^x, exp(-x)];L5 = limit(v,x,inf,'left')L6 = limit((1+2/n)^(3*n),n,inf)例1-31 求导函数 diffsyms x y tD1 = diff(sin(x^2)*y^2,2)D2 = diff(D1,y)D3 = diff(t^6,6)计算结果为:D1 = -4*sin(x^2)*x^2*y^2+2*cos(x^2)*y^2D2 = -8*sin(x^2)*x^2*y+4*cos(x^2)*yD3 = 720格式 diff(S,'v')、diff(S,sym('v')) %对表达式S中指定符号变量v计算S的1阶导数。
diff(S) %对表达式S中的符号变量v计算S的1阶导数,其中v=findsym(S)。
diff(S,n) %对表达式S中的符号变量v计算S的n阶导数,其中v=findsym(S)。