您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 求职简历 > 本科数模培训―matlab2(wyy)
2020/1/241第二部分程序基本流程Matlab2020/1/2421关系运算符和逻辑运算符运算符运算==等于~=不等于大于=大于或等于小于=小于或等于2020/1/243逻辑运算符&逻辑与|逻辑或xor逻辑与或~逻辑非2020/1/2442020/1/2452选择结构(分支语句)选择结构的语句有if语句和switch语句。1.if语句格式一:if条件语句组end格式二:if条件语句组1else语句组2end2020/1/246例:输入三角形的三条边,求面积。A=input('请输入三角形的三条边:');ifA(1)+A(2)A(3)&A(1)+A(3)A(2)&A(2)+A(3)A(1)p=(A(1)+A(2)+A(3))/2;s=sqrt(p*(p-A(1))*(p-A(2))*(p-A(3)));disp(s);elsedisp('不能构成一个三角形。')end运行:请输入三角形的三条边:[456]9.92162020/1/247disp('Thisprogramsolvesfortherootsofaquadratic');disp('equationoftheformA*X^2+B*X+C=0.');a=input('EnterthecoefficientA:');b=input('EnterthecoefficientB:');c=input('EnterthecoefficientC:');%Calculatediscriminantdiscriminant=b^2-4*a*c;ifdiscriminant0%therearetworealroots,so...x1=(-b+sqrt(discriminant))/(2*a);x2=(-b-sqrt(discriminant))/(2*a);例:设计并编写一个程序,用来求解一元二次方程的根。2020/1/248disp('Thisequationhastworealroots:');fprintf('x1=%f\n',x1);fprintf('x2=%f\n',x2);elseifdiscriminant==0%thereisonerepeatedroot,so...x1=(-b)/(2*a);disp('Thisequationhastwoidenticalrealroots:');fprintf('x1=x2=%f\n',x1);else%therearecomplexroots,so...real_part=(-b)/(2*a);imag_part=sqrt(abs(discriminant))/(2*a);disp('Thisequationhascomplexroots:');fprintf('x1=%f+i%f\n',real_part,imag_part);fprintf('x2=%f-i%f\n',real_part,imag_part);end2020/1/2492.switch语句switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:2020/1/2410例:某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):price200没有折扣200≤price5003%折扣500≤price10005%折扣1000≤price25008%折扣2500≤price500010%折扣5000≤price14%折扣输入所售商品的价格,求其实际销售价格。2020/1/2411程序如下:price=input('请输入商品价格');switchfix(price/100)case{0,1}%价格小于200rate=0;case{2,3,4}%价格大于等于200但小于500rate=3/100;casenum2cell(5:9)%价格大于等于500但小于1000rate=5/100;casenum2cell(10:24)%价格大于等于1000但小于2500rate=8/100;casenum2cell(25:49)%价格大于等于2500但小于5000rate=10/100;otherwise%价格大于等于5000rate=14/100;endprice=price*(1-rate)%输出商品实际销售价格2020/1/24122循环结构(循环语句)while语句的一般格式为:while(条件)循环体语句end其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。1while循环2020/1/2413例:统计问题一组数据的平均数(数学期望)和标准差。平均数的定义如下:其中xi代表n个样本中的第i个样本。如果所有的输入数据都可以在一个数组中得到,这些数据的平均数就可以通过公式(4.1)直接计算出来,或应用MATLAB的内建函数mean。标准差的定义如下:2020/1/2414%Initializesums.n=0;sum_x=0;sum_x2=0;%Readinfirstvaluex=input('Enterfirstvalue:');%WhileLooptoreadinputvalues.whilex=0%Accumulatesums.n=n+1;sum_x=sum_x+x;sum_x2=sum_x2+x^2;%Readinnextvaluex=input('Enternextvalue:');end2020/1/2415%Checktoseeifwehaveenoughinputdata.ifn2%Insufficientinformationdisp('Atleast2valuesmustbeentered!');else%Thereisenoughinformation,so%calculatethemeanandstandarddeviationx_bar=sum_x/n;std_dev=sqrt((n*sum_x2-sum_x^2)/(n*(n-1)));%Telluser.fprintf('Themeanofthisdatasetis:%f\n',x_bar);fprintf('Thestandarddeviationis:%f\n',std_dev);fprintf('Thenumberofdatapointsis:%f\n',n);end2020/1/2416for循环变量=表达式1:表达式2:表达式3循环体语句end其中:表达式1的值为循环变量的初值,表达式2的值为步长。表达式3的值为循环变量的终值。(步长为1时,表达式2可以省略。)2for循环2020/1/24172020/1/241825362020/1/2419例:计算thedayofyear%Getday,month,andyeartoconvertdisp('Thisprogramcalculatesthedayofyeargiventhe');disp('currentdate.');month=input('Entercurrentmonth(1-12):');day=input('Entercurrentday(1-31):');year=input('Entercurrentyear(yyyy):');%Checkforleapyear,andaddextradayifnecessaryifmod(year,400)==0leap_day=1;%Yearsdivisibleby400areleapyearselseifmod(year,100)==0leap_day=0;%Othercenturiesarenotleapyearselseifmod(year,4)==0leap_day=1;%Otherwiseevery4thyearisaleapyearelseleap_day=0;%Otheryearsarenotleapyearsend2020/1/2420%Calculatedayofyearbyaddingcurrentdaytothe%daysinpreviousmonths.day_of_year=day;forii=1:month-1%AdddaysinmonthsfromJanuarytolastmonthswitch(ii)case{1,3,5,7,8,10,12},day_of_year=day_of_year+31;case{4,6,9,11},day_of_year=day_of_year+30;case2,day_of_year=day_of_year+28+leap_day;endend%Telluserfprintf('Thedate%2d/%2d/%4disdayofyear%d.\n',...month,day,year,day_of_year);2020/1/24213break语句和continue语句break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。2020/1/2422例求[100,200]之间第一个能被21整除的整数。程序如下:forn=100:200ifrem(n,21)~=0continueendbreakendn2020/1/24234循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。2020/1/2424例:若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==sdisp(m);endend2020/1/2425例:用最小二乘法画噪声数据的近似曲线下落物体将会作匀加速度运动,它的速度符合下面的公式:v(t)=at+v0(4.3)v(t)代表物体在t时刻的速度。加速度为g,初速度v0为0。2020/1/2426如果我们确定了待定系数m和b,那么我们就确定了解析式4.4。y=mx+b(4.4)确定待定系数m和b的标准方法为最小二乘法。之所以称为最小二乘法,是因为根据偏差的平方和为最小的条件来选择常数m和b的。公式如下:2020/1/2427其中,∑x代表所有测量值x之和,∑y代表所有测量值y之和,∑xy代表所有对应的x与y的乘积之和,代表测值量x的数学期望。代表测值量y的数学期望。已知有一系列含有噪声的数据(x,y),编写程序用最小二乘法计算出m和b。数据要求从键盘输入,画出每一个数据点还有画出最适合的直线。xy2020/1/2428设计算法这个问题被分解为6个大步骤:GetthenumberofinputdatapointsReadtheinputdatavaluesCalculatetherequiredstatisticsCalculatetheslopandinterceptWriteouttheslopandinterceptPlottheinputpointsandthefittedline2020/1/2429%Scriptfile:lsqfit.mdisp('Thisprogramperformsaleastsquaresfitofan');disp('inputdatasettoastraightline.');n_points=input(‘Enterthenumberofinput[xy]points:');%Readtheinputdataforii=1:n_pointstemp=input('Enter[xy]pair:');x(ii)=temp(1);y(ii)=temp(2);end2020/1/2430%Accumulatestatistic
本文标题:本科数模培训―matlab2(wyy)
链接地址:https://www.777doc.com/doc-3267247 .html