day02-MATLAB的循环和条件语句
循环控制语句
for/end和while/end
一、for/end
1.格式:
for 变量= 起点:增量 :终点 (增量默认为1)
程序语句
end
2.例题:
(1)计算8阶Pascal矩阵的所有元素的和
>> A=pascal(8); %设矩阵A为Pascal 8阶矩阵
>> s=0;
>> for i=1:8 %设置i为8次循环
s=s+sum(A(i,:)); %计算A矩阵的第i列元素的和,sum为对矩阵A(i,:)的i行元素求和的命令
end,s %循环结束后显示总和
更简便的方法如下:
>> sum(sum(pascal(8)))
ans =
12869
(2)用高斯法将5阶魔方矩阵变换为上三角矩阵
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> for j=1:4 %列向操作次数,1-4列
for i=j+1:5
A(i,:)=A(i,:)-A(i,j)/A(j,j)*A(j,:); %对矩阵A下三角进行消元操作
end
end,A
A =
17.0000 24.0000 1.0000 8.0000 15.0000
0 -27.4706 5.6471 3.1765 -4.2941
0 0 12.8373 18.1585 18.4154
0 0 0 -9.3786 -31.2802
0 0 0 0 90.1734
n阶魔方矩阵是:矩阵由1–n2组成,
每行、每列及对角线之和被称为魔术常量或魔法总和,M。
M=n*(n2+1)/2 ;
其中,n为阶数。
<数学思想>线性代数
<编程思想>高斯法化为三角矩阵
A(i,:)=A(i,:)-A(i,j)/A(j,j)*A(j,:);
二、while/end
1.格式:
while 条件表达式
程序语句
end
2.例题
(1)用迭代法求解多项式的实根
x0=3;r=1;n=0; %设置初值,r为计算误差初值,n为迭代次数
while r> 1e-5 %当迭代误差小于设定误差1e-5时,结束循环
x1=x0; %上次的计算值代入下一次
x0=3+5/x1^2; %迭代运算 (这里也可以用.^2,我还不知道是为什么)
r=abs(x0-x1); %误差计算
n=n+1; %迭代次数加1
end,x0,n
多项式的解法可以直接用roots()
>> roots([1 -3 0 -5])
ans =
3.4260 + 0.0000i
-0.2130 + 1.1891i
-0.2130 - 1.1891i
(2)用迭代
条件语句
if/end 和if/elseif/……/else/end
一、if/end
1.例题
(1)输入一个整数,若能被2除尽,则显示它为偶数并显示除2后的商,否则显示此数为奇数
x=input('input a integer\n')
if rem(x,2)==0
disp('x is even')
b=x/2
fprintf('%d\n',b)
else disp('x is odd')
end
(2)用二分法求多项式的根,已知多项式
f(x)=x3-3x2+5x-7=0
它在区间[0,4]有一实根,且f(0)<0,f(4)>0求此实根,允许误差为1E-5
解:
函数m文件如下:
function y=fun_101(x)
y=x.^3-3*x.^2+5*x-7;
文本m文件如下:
while abs(b-a) > tol %设值初值[a,b]及容许误差tol
x=(a+b)/2; %用二分法作试算差
fx=fun_101(x); %调用代数方程式的函数文件,fun_101为函数名
if fx<0 %若fx小于0,则缩小负值搜索区
a=x;
else b=x; %否则缩小正值搜索区
end
end,x
命令行窗口调用:
>> a=0;b=4;tol=1e-5;
examp3_9
x =
2.1795
>>