matlab脚本文件程序设计,实验二 MATLAB程序设计与优化

一、实验目的

掌握 MATLAB普通脚本和实时脚本的编写;

掌握MATLAB的程序流;

掌握MATLAB的函数;

熟悉基于矩阵的程序设计与优化。

二、实验原理

MATLAB脚本:普通脚本与实时脚本;

MATLAB程序流:input、disp、if 语句、for语句、while语句、swich case结构和try catch结构;

MATLAB函数:函数文件,匿名函数,文件中的函数;

MATLAB程序设计与优化:向量化设计代替循环语句、预定义变量等。

三、实验内容

1.编写求解方程

math?formula=ax%5E2%2Bbx%2Bc%20%3D%200的根的函数(这个方程不一定为一元二次方程,因a,b,c的不同取值而定),这里应根据的不同取值分别处理,有输入参数提示,当

math?formula=a%3D0.b%3D0%2Cc%5Cneq0时应提示“为恒不等式!”,并输入几组典型值加以检验。

a=input('a=');

b=input('b=');

c=input('c=');

if a==0&&b==0&&c~=0

disp('为恒不等式!')

elseif a==0&&b~=0

disp('该方程不为一元二次方程!')

x=[(-c)/b];

disp(['x=',num2str(x(1))])

else

d=b*b-4*a*c;

x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];

disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))])

end

2.用匿名函数法定义分段函数

math?formula=f(x)%3D%5Cbegin%7Bcases%7D%20x%5E2%26%20x%5Cgeqslant0%5C%5C%20x%26%20x%3C0%5C%5C%20%5Cend%7Bcases%7D,要求支持矩阵化运算,并演示分别为标量、向量和矩阵时的输入输出结果。

x=input('请输入x的值:');

f=@(x) (x.^2).*(x>=0)+x.*(x<0);

f(x)

3.输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。其中100分为A+,90分~99分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。要求:

(1)用switch语句实现;

(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。

grade=input('请输入一个百分制成绩:');

switch floor(grade/10)

case {10}

if grade==100

disp('成绩等级为A+')

else

disp('输入的成绩不合理!')

end

case {9}

disp('成绩等级为A')

case {8}

disp('成绩等级为B')

case {7}

disp('成绩等级为C')

case {6}

disp('成绩等级为D')

case {5,4,3,2,1,0}

disp('成绩等级为E')

otherwise

disp('输入的成绩不合理!')

end

4.根据

math?formula=%5Cfrac%7B%5Cpi%7D%7B6%7D%3D%5Cfrac%7B1%7D%7B1%5E2%7D%2B%5Cfrac%7B1%7D%7B2%5E2%7D%2B%5Cfrac%7B1%7D%7B3%5E2%7D%2B%E2%80%A6%E2%80%A6%2B%5Cfrac%7B1%7D%7Bn%5E2%7D%2Cn%20%5Crightarrow%5Cinfty,当分别取100、1000和10000时,根据该等式,求的近似值,分别用循环语句和向量化的程序设计实现。

%用循环语句求pi的近似值

n=input('请从100,1000,10000中选择输入n的值:');

y=0;

for i=1:n

y=y+1/(i*i);

end

pi=sqrt(6*y)

%%用向量化程序求pi的近似值

n=input('请从100,1000,10000中选择输入n的值:');

y=sum(1./(1:n).^2);

pi=sqrt(6*y)

5.Fibonacci数组的元素满足:

math?formula=a_%7Bk%2B2%7D%3Da_%7Bk%7D%2Ba_%7Bk%2B1%7D(k%3D1%2C2%2C%E2%80%A6%EF%BC%8Ca_1%3Da_2%3D1),求该数组中第一个大于10000的元素。

a1=1;

a2=1;

while a2<=10000

t = a1;

a1 = a2;

a2 = t + a2;

end

a2

6.编程实现迭代法求

math?formula=%5Csqrt%7Ba%7D,算法原理如下:

math?formula=%5Csqrt%7Ba%7D%20%3Dx%5CRightarrow%20a%20%3D%20x%5E2%20%5CRightarrow%202x%5E2%20%3D%20a%20%2B%20x%5E2%5CRightarrow%20x%20%3D%20%5Cfrac%7Bx%7D%7B2%7D%2B%5Cfrac%7Ba%7D%7B2x%7D%5CRightarrow%20x_%7Bn%2B1%7D%20%3D%20%5Cfrac%7Bx_n%7D%7B2%7D%2B%5Cfrac%7Ba%7D%7B2x_n%7D

要求:

(1)计算a =3,17,113时

math?formula=%5Csqrt%7Ba%7D的值,并与准确值进行对比;

(2)迭代的终止条件是:

math?formula=%7Cx_%7Bn%2B1%7D-x_n%7C%3C1%5Ctimes10%5E%7B-5%7D

a=113;

x(1)=a;

x(2)=(x(1)+(a)/(x(1)))/2;

i=1;

while abs(x(i+1)-x(i))>=1e-5

x(i+2)=(x(i+1)+(a)/(x(i+1)))/2;

i=i+1;

end

y=x(i+1)

disp(['迭代法计算的值与准确值对比相差:',num2str(abs(sqrt(a)-y))])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值