编制的m文件如下所示:
function xin18; %建立文件名为xin18 clc,clear %清屏,清内存 a=input('请输入数据','s') %输入数据 n=length(a); %计算a的长度 b=[]; %令b为空集 e=[]; %令e为空集 d=','; %令d为‘,’
z=fix(n/3); %z为对三求商然后对零取整,z是添加几个‘,’的标志 if rem(n,3)~=0; %如果n对三取余不等于0
c=rem(n,3); %c为对三取余数之后的余数,为1或2 for i=1:c %i的取值范围
b=[b,a(i)]; %将a的最高位赋值给b,如果c=1,b=a最高位上的一位数,如果c=2,b=a最高位上的两位数 end
if c==1 %讨论c=1的情况 for i=1:z %i的变化范围
e=[e,d]; %将逗号放到e中去 for i=(3*i-1):(3*i+1) %i的变化范围
e=[e,a(i)]; %根据i随z的变化,将2,3,4。5,6,7。……等位置上的数据放到e中的逗号后面
end %结束for循环 end %结束for循环。此处的for循环,就是输入一个逗号,输入三个数据,以此类推
else c==2 %讨论c=2的情况 for i=1:z %i的变化范围
e=[e,d]; %将逗号放到e中去 for i=(3*i):(3*i+2) %i的取值范围
e=[e,a(i)]; %将3,4,5。6,7,8。…等位置上的数据放到逗号后面 end %结束for循环
end %结束for循环 end %结束if循环
else %此处讨论恰好整除的情况 for i=1:3 %i的取值范围
b=[b,a(i)]; %整除的情况下把前三位直接赋值到b中去 end %结束for循环
for i=1:(z-1) %i的取值范围。由于恰好整除,所以前三位不用加逗号,所以逗号数为z-1
e=[e,d]; %将逗号放到e中 for i=3*i+1:3*i+3 %i的取值范围
e=[e,a(i)]; %根据i随z的变化,将4,5,6。7,8,9。……等位置上的数据放到e中的逗号后面
end %结束for循环 end %结束for循环
end %结束if循环
f=[b,e] %将b得到的前几位与e得到的逗号数据放入f中去 end %结束function
19、求出矩阵a中每行元素的平均值和平均最大的行号。 编制的m文件如下所示:
function lin19; %定义文件名为lin19 clc,clear %清屏,清内存 a=input('输入矩阵:'); %输入矩阵 b=[]; %定义b为空集
[i,j]=size(a); %对a求行列数,放到[i,j]中 for i=1:i %i的取值范围 s=0; %令s=0
for j=1:j %j的取值范围
s=s+a(i,j); %对i一定时对行累加,改变i值,不同的行重新进行求和 end %结束for循环
fprintf(' 平均值(i=%d)=%d\\n',i,s/j) %输出每行平均值 b=[b,s/j]; %平均值放入b中去 end %结束for循环 w=0; %令w=0
for p=1:i %p的取值范围
if b(p)>w %每一行的平均值与w比较
w=b(p); %如果平均值大于w,将平均值赋值给w end %结束if循环 end %结束for循环
fprintf('平均最大行 %d\\n',p) %输出平均最大的行号 end %结束function 20、
(使用函数csapi和spapi及其相关函数) x=3:0.4:8; %x的取值
y=(sqrt(1+x)-sqrt(x-1))./(sqrt(2+x)+sqrt(x-1)); %y的表达式 Sp=csapi(x,y) %得到分段三次样条的有关数据 Sp =
form: 'pp'
breaks: [3 3.4000 3.8000 4.2000 4.6000 5 5.4000 5.8000 6.2000 6.6000 7.0000 7.4000 7.8000]
coefs: [12x4 double] pieces: 12
order: 4 dim: 1
Sp.coefs %显示每个区间上三次多项式的系数 ans =
-0.0034 0.0169 -0.0534 0.1605 -0.0034 0.0127 -0.0415 0.1416 -0.0018 0.0086 -0.0330 0.1268 -0.0013 0.0064 -0.0270 0.1149 -0.0009 0.0048 -0.0225 0.1050 -0.0007 0.0038 -0.0190 0.0968 -0.0005 0.0030 -0.0163 0.0897 -0.0004 0.0024 -0.0142 0.0836 -0.0003 0.0020 -0.0124 0.0783 -0.0002 0.0016 -0.0110 0.0737 -0.0002 0.0014 -0.0098 0.0695 -0.0002 0.0012 -0.0087 0.0658
ezplot('(sqrt(1+x)-sqrt(x-1))./(sqrt(2+x)+sqrt(x-1))',[3,8]) %在区间绘制y
hold on %保持figure不关闭 fnplt(Sp) %绘制出插值效果
分段三次样条插值拟合效果:图a,函数拟合
syms x %定义自变量x y=(sqrt(1+x)-sqrt(x-1))./(sqrt(2+x)+sqrt(x-1)); %y的表达式 y2=diff(y,x,2); %对函数求二阶导数
ezplot(y2,[3,8]) %绘制在区间上二阶导数的图像
hold on %保持figure窗口不关闭 s2=fnder(Sp,2);fnplt(s2) %对二阶导数进行插值拟合
分段三次样条插值拟合效果:图b,函数二阶导数
x=3:0.4:8; %x的取值
y=(sqrt(1+x)-sqrt(x-1))./(sqrt(2+x)+sqrt(x-1)); %y的表达式 Sp=spapi(6,x,y) %6阶B-样条的相关数据 Sp =
form: 'B-'
knots: [1x19 double] coefs: [1x13 double] number: 13 order: 6 dim: 1
ezplot('(sqrt(1+x)-sqrt(x-1))./(sqrt(2+x)+sqrt(x-1))',[3,8]) %绘制区间上y的图像 hold on %保持figure窗口不关闭 fnplt(Sp) %对B-样条进行插值拟合
B-样条插值拟合效果:图c,函数拟合
syms x %定义自变量x
y=(sqrt(1+x)-sqrt(x-1))./(sqrt(2+x)+sqrt(x-1)); %y的表达式 y2=diff(y,x,2); %对函数求二阶导数
ezplot(y2,[3,8]) %画出区间上二阶导数的图像 hold on %保持figure窗口不关闭 s2=fnder(Sp,2);fnplt(s2) %对函数进行插值拟合