matlab怎么输出多个变量(matlab输出多个变量用fprintf)

matlab怎么输出多个变量(matlab输出多个变量用fprintf)p 在行末加上 分号 回车后执行代码但不显示结果 format 改变文本显示方式 short 显示 5 位小数 long 显示 15 位小数 compact 紧凑地显示结果 loose 松散地显示结果 who 列出现有变量名 whos 列出变量值和属性 clear 删除内存所有变量 clear p

大家好,我是讯享网,很高兴认识大家。



 <p>在行末加上&quot;分号&quot;,回车后执行代码但不显示结果 

讯享网

format … 改变文本显示方式 :short(显示5位小数),long(显示15位小数),compact(紧凑地显示结果),loose (松散地显示结果) who 列出现有变量名 whos … 列出变量值和属性 clear 删除内存所有变量 clear … 删除指定变量 cls 清除command windows窗口里的一切 close all 一键关闭所有打开的figure fclose(‘all’) 一键关闭所有用fopen打开过的文件 doc … 查看某函数的说明文档 helpwin 打开帮助文档 quit 退出matlab path 列出matlab查询范围的路径 addpath 增加matlab查询范围的路径 lookfor … 查询包含某关键字的所有文件和命令 edit 编辑生成脚本文件 fprintf(format,x1,x2…) 格式化输出x1,x2,格式在format里定义,注意加上单引号,【例】&gt;&gt;fprintf(‘%6.2f 喵= %6.2f 汪’,mao,gou),其中%6.2f表示输出的结果至少占6个占位符,不足用空格补齐,小数点后保留2位 % … 注释 当程序一行没有写完但又想换行后继续写,可以用换行符 … (空格+三个点)

bf 黑体,it斜体, m 恢复字体, frontname 字体名,frontsize 字体大小,^{xxx} xxx作为上标,{xxx} xxx作为下标,如果只想改变部分文字格式,把要改变的文字用大括号括起来 【例】&gt;&gt;title(‘bfit正常字体^{上标}{下标}’)

在matlab里,数组就是一个一行n列的矩阵,向量就是一个n行一列的矩阵 input 提示输入数据来赋值,【例】&gt;&gt;x=input(&quot;提示内容&quot;)
矩阵输入,行内数据用空格或逗号分开,行间数据用分号分开,外面加上单引号表示转置 a=[1 2 3] 行矩阵 b=[1 2 3]‘列矩阵
c=[1;2;3]列矩阵 ones(m,n) 生成m行n列的矩阵 zeros(m,n)生成m行n列的零矩阵 eye(m) 生成m阶单位矩阵 eye(m,n)生成m*n阶单位矩阵 magic(n) 生成n阶魔方方阵 k(m,n)=8 定义了矩阵k(m*n),且m,n位置上的元素为8,其余为0 l=[k,k] 以行的方式把k(2*3)和k(2*3)矩阵拼接成新的矩阵 【例】&gt;&gt;l(2*6) l=[k;k] 以列的方式把k(2*3)和k(2*3)矩阵拼接成矩阵l(4*3) ,被拼接的矩阵必须行列数对应才能拼接

j:k 生成行数组,从j开始,k结束【例】 &gt;&gt;3:8 返回 [3 4 5 6 7 8] j:i:k 生成行数组,从j开始,k结束,i为步长 【例】&gt;&gt;(3:2:8)’ 返回[3 5 7]‘ 列矩阵 linespace(x1,x2,n) 生成x1到x2的n个等差数列 logspace(x1,x2,n)生成10^x1到10^x2的n个对数等间距点组成的行矩阵 reshape(a,i,j) 将矩阵a中所有元素以i*j的阵列重新排列生成新的矩阵

i,j 虚数单位,定义为i^2=j^2=-1 inf,Inf 正无穷,产生于以0做除数 NaN 不定式,表示非数值量,产生于0/0,∞/∞ pi 圆周率π的双精度表示

date 返回当前日-月-年格式的日期 clock 返回当前时间 year(now) 返回年份 month(now) 返回当前月份 day(now)或day(today)返回当前日

a(m,n) 取a矩阵中第m行,n列的数 a(i) 取矩阵中从上往下,从左往右数第i个数 a(:,j) 取矩阵a中第j列的所有数据 a(i,:) 取矩阵a中第i行的所有数据 a(i:n:j,k) 取矩阵a中从第i行开始,步长为n,到j之间,第k列的所有数据 a(i,j:end) 取矩阵a中第i行,第j列到最后一列的所有数据

a/b a为被除数,b为除数,【例】&gt;&gt;25 返回0.4 ab a为除数,b为被除数【例】&gt;&gt;25 返回2.5 power(a,b) 等价于计算a^b

A+B 矩阵加 A-B 矩阵减 A.^n A上每个元素都乘n次方 A+n A上每个元素都+n cross(A,B)或A*B,矩阵(向量)叉积 dot(A,B)或A.*B ,矩阵(向量)点积 inv(B) 求B矩阵的逆矩阵 A^n 计算矩阵的幂:A*A…*A det() 计算矩阵的行列式 rank() 求矩阵的秩 eig() 求矩阵的特征值 trace() 求矩阵的迹(主对角线元素求和) size() 返回矩阵的行数和列数 length() 返回矩阵行数和列数最大的数字

三角函数 默认为弧度制 sin() 对矩阵中每个元素进行sin运算 exp() e的幂 log(),log10(),log2(),以e,10,2为底的对数 sqrt() 求平方根 sign() 符号函数 max 最大值【例】&gt;&gt;max(A),返回矩阵A中每一列的最大值,【例】&gt;&gt;[Y,I]=max(a,[],dim) 返回矩阵每个维度上的最大值Y和位置I,dim=1(列),=2(行),下同 min 最小值,用法同max median(a,dim),mean(a,dim) 返回矩阵每列最大值,最小值,中位数值,均值 sum(a,dim) ,prod(a,dim) 对矩阵每一维度求和,求积

圆整函数 ceil 正无穷方向,ceil(-3.5)=-3 floor() 负无穷方向 floor(-3.5)=-4 fix() 0方向 fix(-3.5)=-3 round() 向最近的整数,即取绝对值后四舍五入 round(-3.3)=-3

求余 mod(a,m) 返回用a除m后的余数,=a-m.*floor(ahttps://www.douban.com/note//m) rem(a,m) 返回用a除m后的余数,=a-m.*fix(ahttps://www.douban.com/note//m)

多项式计算 conv(u,v) 多项式相乘函数,求高次多项式展开 deconc(u,v)=[q,r] 多项式相除函数,返回整除多项式q和余子式r

复数计算 real()取实部 imag()取虚部 abs()求摸 angle() 求幅角 conj(Z)或(Z)’ 求Z的共轭复数

生成字符串的方法:单引号法【例】&gt;&gt;s=‘这是字符串’ abs()或double() 返回字符串的ASCII码 char() 返回ASCII码对应的字符串 str2num() 将字符串转数字换为数字表示形式 num2str() 将数字转换为字符串 lower() 将大写字母转换为小写字母 upper() 将小写字母转换为大写字母 strcmp(a,b) 比较字符串a和b是否完全相同,相同返回1,不相同返回0 srtncmp(a,b,n) 比较字符串a和b的前n个字符是否完全相同,相同返回1,不相同返回0 findstr(a,‘f’) 查找字符串a中的字符串f的位置 strcat(a,b) 字符串的拼接,将字符串b接在字符串a的后面 srtvcat(a,b) 字符串纵向拼接,第一行为a,第二行为b,有空字符串的位置被忽略 srt2mat(a,b) 字符串纵向拼接,第一行为a,第二行为b,有空字符串的位置产生一个空行 disp(a) 将字符串作为一个元素(1*1)输出,常用语提示语

逻辑值:0(False),其他值(True) 关系运算符:&lt;,&lt;=,&gt;,&gt;=,==(等于),~=(不等于) 【例】 “A”&lt;&quot;B&quot; ans=1

讯享网 3==4 ans=0 

存在元整误差的情况下比较a和b是否相等的方法: &gt;&gt;abs(a-b)&lt;1.0e-14 ans=0(不相等),1(相等) 数组/数组和标量进行比较时,就是将标量与数组/矩阵每一个元素进行比较,并输出每一个位置的比较结果组成的数组/向量。 数组与数组,矩阵与矩阵进行比较,其维数必须保持一致,每一个对应位置的元素进行比较,输出由每一个位置比较结果组成的数组/矩阵

逻辑运算符:&(与),|(或),~(非),xor(异或) 用法: a & b,a | b,~a,xo(a,b) 标量与数组/矩阵进行逻辑运算,就是标量与数组/矩阵中每一个元素进行逻辑运算 数组/矩阵与数组/矩阵进行逻辑运算,就是每个元素与对应位置的元素进行逻辑运算,前提是运算的矩阵/数组维数相同

算数运算优先级高于逻辑运算 【例】:&gt;&gt; 1+2&lt;1+0 ans = 0 逻辑&(与)运算的优先级高于逻辑|(或)运算 逻辑值与数值进行一般运算时,逻辑值会转换成数值 【例】:&gt;&gt;1+(6&lt;7)+8 ans = 10

只根据逻辑运算符一侧的结果来获得整个逻辑运算的结果,其效果为减少运算步骤,节省时间,参与短路运算的值,必须为标量值 运算符:&&(与),||(或) &gt;&gt;a+c && b-c ,计算a+c,当a+c为逻辑假,ans必然等于逻辑假,不再计算b-c,直接输出结果 ans=0 &gt;&gt; a*c || b/c ,计算a*c,当a*c为逻辑真,ans必然等于逻辑真,不再计算b/c,直接输出结果 ans=1

ischar(x) : 判断是否为字符 isempty(x): 判断是否为空值 isinf(x): 判断是否为无穷大 isnan(x): 判断是否不是数字 isnumeric(x): 判断是否为数字

plot(x,y) x,y为向量 polt(y) y为复数时,默认将横轴作为实轴,纵轴作为虚轴 plot(x1,y1,’-r‘,x2,y2,’*g‘,…) 横坐标为x1,纵坐标为y1,线型为直线红色,横坐标为x2,纵坐标为y2,线型为线绿色,作折线图。线型不写则自动匹配,线型颜色表如下: 蓝色:“b”、绿色:“g”、红色:“r”、蓝绿:“c”、紫红:“m”、黄色:“y”、黑色:“k”。 实线:“-”、点线:“:”、点划线:“-.”、虚线:“–”、星号线:“.”、O线:“o.”。 plot(x1,y1,’属性名‘,属性值) 属性名:linewith 线宽,markeredgecolor 指定标识边缘的颜色,markerfacecolor 指定标识填充的颜色,markersize 指定标识的大小 xlabel() 添加横坐标标签 ylabel() 添加纵坐标标签 grid … 网格开关,on=开,off=关 legend(‘生成的第一条线’,‘生成的第二条线’…) 插入每一条曲线的图例说明 hold on 保持图不被下一张曲线冲走,可以将下一条曲线重叠在上一张图上 axis([xmin xmax ymin ymax]) 自定义横轴和纵轴的范围 axis … 坐标轴范围设置,auto=自动匹配**范围,equal=纵横坐标单位刻度相同,square=纵横坐标总长度相同(把图画成正方形) semilogx(x,y) 横轴以对数形式作图 semilogy(x,y) 纵轴以对数形式作图 loglog(x,y) 横轴和纵轴都以对数形式作图 以上以及更多的图的修改可以在figure里进行详细设置 快速作图 fplot(函数,范围,误差) 函数形式必须是y= f(x),范围=[下限 上限],误差默认为2e-3。该函数绘图的数据点是自适应产生的。在函数平坦处,所取数据点比较稀疏;在函数变化剧烈处,将自动取较密的数据点。 ezplot(函数) 函数形式可以为y= f(x)之外,还可以是隐函数形式,f(x,y)=0 极坐标图 polarplot (theta,r) theta为极角,单位为弧度,r为极径 其他二维作图 stem(x,y) 棍形图 stairs(x,y) 阶梯图 bar(x,y) 柱形图 barh(x,y) 水平柱形图 compass(x,y) 罗盘图 pie(x,explode) x为数据向量,explode为爆炸向量,对应于每个数据,由0,1组成,0为不炸,1为炸开
histogram(y) 根据y的数量自动设定横坐标绘制柱状图 rose (theta,x) 画角度分布图 窗口操作 figure(n) 新建/激活图像窗口 figure n subplot(m,n,p) 新建/激活m*n个图像子窗口,并激活第p个子窗口 close(figure(n)) 关闭图像窗口n

if 语句 套路 if exp1 如果 xxx1 block1 我就 yyy1 elseif exp2 否则如果 xxx2 block2 我就 yyy2 … … elseif expn 再否则如果 xxxn blockn 我就 yyyn else 如果以上都不行的话 blockn+1 我就 yyyn+1 end 老子不干了

注:exp,block都是逻辑表达式

if 语句的嵌套

if x&gt;0

if y&lt;0 ... else ... end 

else

讯享网... 

end

switch 结构

套路

switch(swith_expr) 我要判断swith_expr是否满足下面的条件 case case_expr1 判断是否满足条件 case_expr1

block1 满足就 block1 不满足就看下一个条件 

case case_expr2 判断是否满足条件 case_expr2

讯享网block2 满足就 block2 不满足就看下一个条件 

case case_expr3 判断是否满足条件 case_expr3

block3 满足就 block3 不满足就看下一个条件 

… 。。。 otherwise 以上条件都不满足 blockn 不干了 end 下班

一个case里可以写有多个条件 switch(swith_expr) case{case_expr1,case_expr2,case_expr3} block1 case{case_expr4,case_expr5} block2 otherwise block3 end

try_catch 结构

套路 try 语句块 catch 语句块 end

先执行try中的语句块,执行到错误后执行catch

while循环

判断否满足条件,满足就执行代码块,不满足就结束

For循环

for index=expr 代码块 end

index是循环指数,exper是数组,exper有多少列,循环就执行多少次 常见的表达式有: for ii=1:2:10 循环5次,最后一次ii=9 for ii=[1 3 5 7] 循环4次,最后一次ii=7 for ii=[2 5 9;1 6 10] 循环3次,最后一次ii=[9;10]

prod(a) 计算a的阶乘

for ii=1:n

讯享网n_factorial=n_factorial*ii; 

end

break和continue

break,会跳出循环 continue,结束本次循环,进行下一个循环

For ii=1:5

if ii==3; <span style="font-weight: bold;">break</span> 当ii=3时,无条件地跳出for循环,直接到for对应的end执行下一行代码 end 

fprintf(’ii=%d ‘,ii) end disp(‘End of loop!’) 运行结果为,输出ii=1 ii=2 End of loop! 如果没有break,输出结果为ii=1 ii=2 ii=3 ii=4 ii=5 End of loop!

for ii=1:5

讯享网if ii==3 <span style="font-weight: bold;">continue</span> 当ii=3时,跳过这个for循环执行的代码,进行下一个for循环(ii=4) end fprintf(&#x27;ii=%d 

’,ii) end disp(‘End of loop!’)

运行结果为,输出ii=1 ii=2 ii=4 ii=5 End of loop! 如果没有break,输出结果为ii=1 ii=2 ii=3 ii=4 ii=5 End of loop!

b=logical(a) 将普通数组a变成逻辑数组b c=b+0 将逻辑数组b变成普通数组c 逻辑数组具有屏蔽作用 【屏蔽作用的应用】对矩阵a中所有大于5的数进行开平方 a=[1 2 3;4 5 6;7 8 9]; =======用逻辑数组屏蔽的方法解决===== t_1=tic;
b=(a&gt;5); a(b)=sqrt(a(b)); t_2=toc(t_1);
fprintf(‘time=%f ’,t_2) ============用for循环解决=========== t_1=tic; for ii=1:size(a(1))

for jj=1:size(a(2)) if a(ii,jj)&gt;5 a(ii,jj)=sqrt(a(ii,jj)); end end 

end t_2=toc(t_1); fprintf(‘time=%f

’,t_2)

注:tic,toc为计时函数,tic计时开始,toc计时结束,toc(开始时间)=开始到现在消耗的时间

讯享网 增加计时功能是为了比较两个方法运行效率的差异,与程序功能无关</p><p>函数<span style="font-weight: bold;">文件名</span>要与<span style="font-weight: bold;">函数名相同</span> 

which 函数名 查找并返回函数的路径 lookfor 函数名 查找是否存在该名称或在H1注释行中包括该关键词的函数 建立函数前先检查一下有没有与现有函数重名 基本格式: function [输出参数1,输出参数2,…] =函数名(输入参数1,输入参数2,…) %H1注释行 函数说明,并且可以通过lookfor进行搜索 % 其他注释 代买快 return 返回结果,并结束函数,如果return是函数的最后一行,可以不写

【例】计算(x1,y1)和(x2,y2)的距离的函数:dist2,返回值d ==========建立函数============= function y = dist2(x1,y1,x2,y2) %计算两点之间的距离 %x1,y1,x2,y2为两点坐标,y为返回值 y=sqrt((x1-x2)^2+(y1-y2)^2); return ==========试试效果============= &gt;&gt;dist2(4,5,5,7)
ans=2. ==========修改一下函数============ function y = dist3(point1,point2) %计算两点之间的距离 %point1,2为两点坐标,y为返回值 %point的格式为[x,y] x1=point1(1) % x1,x2,y1,y2都是局部变量,按值传递 x2=point2(1) y1=point1(2) y2=point2(2) y=sqrt((x1-x2)^2+(y1-y2)^2); return ==========试试效果========== &gt;&gt;A=[3,4] ; B=[4,5]; dist2(A,B)
ans=2. ==========================

按值传递 =================== function swap(y1,y2)
%交换y1,y2的值 t=y1; y1=y2; y2=t; =====运行一下====== &gt;&gt;y1=3; y2=4; swap(y1,y2) &gt;&gt;y1 =3 &gt;&gt;y2

=4

函数内部的y1和y2和函数外的y1,y2是两个独立的参数,函数内的参数不论怎么变化都不会改变函数外的实际参数。按值传递是指将实际参数的值赋于函数的参数上,函数的参数是实际参数的一个拷贝,而不是参数本身

根据入口参数个数来确定函数要实现的功能 例如根据输入坐标的数量来确定计算的是平面坐标系两点的距离还是空间坐标系的两点距离 nargin 入口实际参数个数 nargout 接受返回值的参数个数 nargin 和 nargout一般只出现在函数内部 【例】计算二维或三维空间(x1,y1,z1)和(x2,y2,z2)的距离的函数:dist3D,返回值d ==========建立函数============= function d = dist3d(x1,x2,y1,y2,z1,z2) %计算两点之间的距离 %x1,y1,z1,x2,y2,z2为两点坐标,d为返回值 error(nargchk(4,6,nargin)); % 注释1 if nargin=4

 d=sqrt((x1-x2)^2+(y1-y2)^2); 

elseif nargin=6

讯享网 d=sqrt((x1-x2)^2+(y1-y2)^2)+(z1-z2)^2); 

else

z2=0 warning(&#x27;只输入了五个参数,随后一个参数默认为0&#x27;); 

1.8877

注释1: 2016b版会建议不用error输出错误提示,并且用narginchk或nargoutchk代替nargchk的功能,在未来的版本中可能会取消掉nargchk命令,此处可以修改为narginchk(4,6);

error(‘啦啦啦啦’) 以红色的字体输出:啦啦啦啦 nargchk(min args,max args,num args) min args:最小输入参数个数,max args:最大输入参数个数,num args:你所输入参数个数(nargin),当输入参数个数介于最小和最大之间,返回[],如果输入参数个数大于最大,返回Too many input arguments.如果输入参数小于最小,返回Not enough input arguments. error(nargchk(min args,max args,nargin)) 两个函数联用即可得到相应的错误提示,并且停止程序的运行 将error改用warning,能够在获得错误提示的情况下继续运行程序

在函数中声明的变量,称为局部变量,仅在函数内部使用,当函数调用完之后就会释放(清除)。如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为持久变量(又称静态变量)。持久变量只能在function里声明,且只有这个function才能认识它,也就是说该变量无法在其他函数中使用。 持久变量声明后,默认为空矩阵([]),使用之前通常需要初始化 。 如果想让某个函数中的变量能够被其他函数调用,需要将其定义为全局变量

global 变量1 变量2 变量3… 定义变量1,变量2,变量3 为全局变量 通常用&quot;global_变量名&quot;这样的格式来命名,以便与局部变量区分 clearglobalA 清除全局变量A persistent 变量1 变量2… 将变量1,变量2…定义为持久变量

【例】均值计算

function ave=average(x) narginchk(1,1); persistent n sum_x if x==‘reset’ 注释1

讯享网n=0; sum_x=0; 

else

n=n+1; sum_x=sum_x+x; ave=sum_x/n; 

end

注释1:可以修改为if strcmp(x,‘reset’)

dialog玩法多多,直接看帮助吧

创建匿名函数 句柄=@(变量)(有关变量的表达式), @是定义句柄的运算符 通过句柄调用函数 @sin 调用sin函数

【例】定义函数f(x,y)=x^2+y

&gt;&gt;f=@(x,y)x^2+y; 注1 &gt;&gt;f(1,2) ======运行一下=========

ans=3

注1:第一个括号里面是自变量,后面是表达式,f为是一个句柄

常用的函数的函数 ①eval(‘命令语句’) 将文本以命令的方式运行

【例】

&gt;&gt;for n=1:5; &gt;&gt;eval([‘M=’ ‘magic(n)’]); &gt;&gt;end; ====运行一下=======

M =

1

M =

1 3

4 2

M =

8 1 6

3 5 7

4 9 2

M =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

M =

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

②fzero(句柄,a) 在自变量=a附近寻找非线性单变量函数的0值点

【例】查找sin t =0.3的t值

&gt;&gt;x=fzero(@(t)sin(t-0.3),3) 注1 ====运行一下========

ans=3.9793

注1:@(t)sin(t-0.3):调用以t为自变量的函数sin(t-0.3)


讯享网

③fminbnd(函数句柄,x1,x2) 查找自变量在x1,x2之间取得函数极小值时的自变量值

④quad(函数句柄,积分上限,积分下限) 用数值积分的方法对函数进行积分

【例】

&gt;&gt;f=@(x)1https://www.douban.com/note//x &gt;&gt;quad(f,0.5,1) =====运行一下===

ans= 0.2970

⑤ezplot(函数句柄) 对函数作图

【例】画sin(x)在0,2π之间作图

ezplot(@sin,[0 2*pi])

⑥fplot(函数句柄,范围)

【例】sin(x) cos(x) tan(x)在0,2π之间作图

fplot(@(x)[sin(x) cos(x) tan(x)],2pi.[0 1])

⑦feval(函数句柄, x1, …, xn) ,将x1~xn带入函数,求得并输出y1~yn

【例】快速作图

function quickplot(fname,limits) x=limits(1):0.01:limits(2); y=feval(fname,x); plot(x,y); =======================

子函数 就是funtion里调用的其他function

主函数里面的其他函数都叫子函数,子函数仅在主函数里被调用使用,无法从外部调用

function [s,c]=my(x) 主函数 s=ss(x); c=cc(x); function x1=ss(x1) 子函数 x1=(sin(x1))^2; function y1=cc(y1) 子函数

y1=(cos(y1))^2;

&gt;&gt;[k l]=my(10) ==========运行一下=========== k = 0.3304

l =

0.6696

私有函数 私有目录下的函数叫私有函数,私有函数只能够被该函数所在目录(私有目录)的上一层父目录里的函数调用,在其他文件夹中不可见,因此私有函数可以与非私有目录下的函数名重名。与标准函数相比,matlab优先查找私有函数 私有目录的建立:建立一个叫&quot;private&quot;的目录 私有函数的建立:在私有目录下建立函数或者将函数移动到私有目录下 私有函数的访问:通过路径+函数名调用 【例】help private/函数名

m*n数组:二维数组 m*n*l数组:三维数组 … m1m2…mn数组:n维数组

一页纸上有m行n列文字,有k列页这样的纸构成书,将书按列的方式排满书架,排满的书架以列的方式排列在整个房间,房间以列的方式排满整个图书馆,这就是一个以文字为元素的高维数组

高维数组的生成 下标法 a(;,;,k) 表示第k页的元素,即前两个维度的数组,是一个二维数组 可以用这种方法定义每一页的元素,以此来定义一个三维数组 a(;,;,1)=[1 2 3;4 5 6;7 8 9] a(;,;,2)=[10 11 12;13 14 15;16 17 18] a(;,;,3)=[19 20 21;22 23 24;25 26 27] 这样就定义了一个3*3*3的三维数组 函数生成法 zeros(3,4,5,6)生成3*4*5*6的0矩阵 ones(1,2,3) 生成1*2*3的全是1的矩阵 rand(2,2,3) 生成2*2*3的随机数矩阵 reshape(数组,2,3,3) 将数组变成2*3*3的矩阵

【例】18个数字排到一个3*3*2的矩阵中

a=(1:18) reshape(a,3,3,2) ======运行一下=======

ans(:,:,1) =

1 4 7

2 5 8

3 6 9

ans(:,:,2) =

10 13 16

11 14 17

12 15 18

repmat(A,[M N P …]) 复制并平铺一个数组,将A在第一维重复平铺M次,第二维重复平铺N次,第三维重复平铺P次..最后形成一个高维数组 cat(DIM,A,B) 以某种方式连接A和B,DIM=1按列,=2按行,=3,按页连接,=n,以第n个维度进行连接

【例】将四个b以页的方式连接在一起

b=[1 2;3 4] cat(4,b,b,b) =====运行一下====== ans(:,:,1,1) =

1 2

3 4

ans(:,:,1,2) =

1 2

3 4

ans(:,:,1,3) =

1 2

3 4

==================

高维数组的应用:作3D图啊 有关线的格式与plot一样方法进行设置 三维曲线图 plot3(x,y,z)

【例】

t=0:0.1:15; x=exp(-0.2*t).*sin(2*t); y=exp(-0.2*t).*cos(2*t); subplot(2,1,1); plot3(x,y,t); subplot(2,1,2);

plot(x,y);

表面图 surf(x,y,z,C) x为(1*m)向量,y为(1*n)向量,分别代表坐标,z(n,m)为高度,C为(n*m*3)的RGB颜色矩阵:(n*m*1),(n*m*2),(n*m*3)分别为R,G,B矩阵(n*m),颜色矩阵的值的范围为0~1 ============================== x=1:10; y=1:10; z=zeros(10,10); for ii=1:10

讯享网for jj=1:10 z(ii,jj)=exp(-0.5*(x(ii)^2+y(jj)^2)); end 

end

surf(x,y,z)

[X Y]=meshgrid(x,y) x为(1*m)向量,y为(1*n)向量,以行的方式复制n次x向量生成X(n*m),以列的方式复制m次y‘(n*1)生成Y(n*m)

再用这个X和Y带入函数运算,其效果和上【例】一样

x=1:10; y=1:10; [X Y]=meshgrid(x,y) z=X.exp(-0.5(X.^2+Y.^2));

surf(x,y,z);

网格图 mesh(X,Y,Z) 用法同表面图 等高线图 contour(X,Y,Z,n) X为1*n矩阵 ,Y为1*m矩阵 Z为n*m矩阵,数值表示高度,n为颜色的数量,例如:在(X(1),Y(1))的坐标的高度为Z(1,1)的值

【例】画z=x*e^(-x^2-y^2)的等高线图,-2&lt;x&lt;2,-2&lt;y&lt;3

[X Y]=meshgrid(-2:2:2,-2:2:3); Z=x.*exp(-x.^2-y.^2); contour(X,Y,Z) ============================

一个很大的矩阵里大多数元素都是0,这样的矩阵就叫做稀疏矩阵,如1000*1000的单位矩阵 因此sparse(稀疏矩阵)可以只存储不为0的数据和位置来减少内存空间,提高运行效率。 nonzeros(A) 按列查找并返回矩阵A中非0元素,元素乘以3即可估算占用内存空间,与whos A中显示的占用空间比对,决定是否存储为稀疏矩阵 nzmax(A) 对于稀疏矩阵,返回的是矩阵非0元素占据的内存量;对于完整的矩阵,返回的是元素个数

稀疏矩阵的创建与转换

sparse(A) 将普通矩阵A转换为稀疏矩阵 full(A) 将系数矩阵A转换为普通矩阵============================================================= a=eye(1000) 普通矩阵 size:1000*1000 Bytes: s_a=sparse(a) 转换成稀疏矩阵 size:1000*1000 Bytes:24008 ============================================================= speye(n) 创建n*n的单位稀疏矩阵 sprand(m,n, density) 创建服从均匀分布的稀疏矩阵(m*n),density为非零元素的密度(0~1) sprandn(m,n, density) 创建服从正态分布的稀疏矩阵(m*n),density为非零元素的密度(0~1) 稀疏矩阵的运算 稀疏矩阵的运算与全矩阵运算是一致的 稀疏矩阵与稀疏矩阵运算得到的是稀疏矩阵(除非没有0元素) 稀疏矩阵与全矩阵运算得到的是全矩阵 稀疏矩阵的函数 issparse(A) 判断矩阵A是否为稀疏矩阵,返回逻辑结果 [rows,cols,vals]=find(A) 查找所有非0函数的行,列,值 spy(A) 将稀疏矩阵A可视化,画成散点图 spones(A) 将稀疏矩阵A所有非0元素用1替换。用途是计算稀疏矩阵中非零元素的数量

双变量句柄的调用 @(x,t)f(x,t),[x下限,x上限,t下限,t上限] ezmesh(函数,范围) ,范围格式:[XMIN,XMAX,YMIN,YMAX],默认x,y的范围为-2*pi~2*pi ezmesh(f(x,y)),z=f(x,y) ezmesh(f(x,y,z)),f(x,y,z)=0

用途:构造数据类型,将不同类型、不同维数的数据元素组织在一起 a(m,n)表示第m行n列上的单元的整体 a{m,n}表示第m行n列上的单元里的具体内容 【例】一个2*2单元数组a,其中a(1,1)为3*3 double数组,a(1,2)为一串文本,a(2,1)为3*2数组,a(2,2)为一个空矩阵 单元数组的创建与赋值方法 cell(m,n) 创建m*n的空单元数组 cell(n) 创建n*n的空单元数组 内容索引法赋值:单元数组名{索引}=内容 【例】创建2*2的单元数组a a{1,1}=[1 2 0;3 0 1;1 0 1] a{1,2}=’i k‘ a{2,1}=[] a{2,2}=[1 2;1 3] 单元索引法赋值:单元数组名(索引)={内容}
a(1,1)={[1 2 0;3 0 1;1 0 1]} a(1,2)={’i k‘} a(2,1)={[]} a(2,2)={[1 2;1 3]} 也可以一次性生成:a={[1 2 0;3 0 1;1 0 1],’i k‘;[],[1 2;1 3]} 清空和删除 a(m,n)={[]} 清空单元数组中的(m,n)单元 a(m,:)={[]} 清空第m行 a(:n)={[]} 清空第n列 a(m,:)=[] 删除第m行 a(:n)=[] 删除第n列 单元数组的显示 直接输入单元数组名,显示的是单元数组的的类型 a[m,n] 显示单元数组第m行n列的内容 celldisp(a) 将单元数组a所有内容显示出来 a(m,n) 显示单元数组第m行n列的数据结构 cellplot(a) 以图形方式显示单元数组a的数据结构 字符型单元数组 字符型单元数组与普通字符数组的转换 iscell(a) 判断数组是否为单元数组 cellstr(a) 将字符型普通数组a转换为字符型单元数组 char(a) 将字符型单元数组转换为字符型普通数组 iscellstr(a) 判断数组是否为字符型单元数组 num2cell(a) 将数值型普通数组的每一个元素转换为数值型单元数组 cell2num(a) 将数值型单元数组转换为普通数值型数组 mat2cell(a,b,c) 将普通数值型数组转换为数值型单元数组,a为待转换的普通数组,b为行分割向量(1*m),c(1*n)为列分割向量,最后a转换为m*n的单元数组 cell2mat(a)将数值型单元数组转换为数值型普通数组

【例】将普通数组x分割成3*2的单元数组c

c = mat2cell(x, [10, 20, 30], [25, 25]) =========运行一下============ 结果为x被分割为如下形式的单元数组 10*25 10*25 20*25 20*25

30*25 30*25

单元数组的嵌套 【例】 =================== a={[1 2;3 4],[1 2];[3 4],[’Hello‘]}; b={a,2;[1 2 3],[]} =========运行一下===== b = 2×2 cell array

{2×2 cell } [2] [1×3 double] [] 

==================== 访问嵌套单元数组的方法: a{m,n}(p,q) 返回单元数组a中第(m,n)个单元中的(p,q)位置的元素 【例】上例中 b{1,1}{1,2}(1,2)的结果为2

结构数组的元素是带名字的,叫做域名,可以存储不同数据类型的一种数组,元素称为,访问方式为数组名.域名 结构数组的创建与修改 student.name=’a‘; student.age=18; student.gender=’boy‘; student(2).name=’b‘ ; student(2).age=17 ; student(2).gender=’girl‘ ;

输入结构数组名 返回所有的域

&gt;&gt;student

name 1×2 struct array with fields:

讯享网name age gender 

==================== student(1) 显示所有域名和结果 student(1).name 查看具体域名的结果

s=struct(’域名‘,’域值‘,’域名‘,’域值‘,…) 如果有一个阈值为{},那么所有 域值都为空,只有相应的域名,为一个0*0的结构数组 s1=struct 生成一个1*1的结构数组,没有域名和域值 s2=struct([]) 生成一个0*0的结构数组,没有域名和域值 rmfield(结构数组名,’域名‘) 删除指定域名的域 setfield(结构数组名,’域‘,’域值‘) 给结构数组的域赋值,用途同struct getfield(结构数组名,’域‘) 返回相应域名的值,同前文结构数组名.域名的作用 结构数组的函数 s=orderfields(s) 将s中所有的域按照ASCII码的顺序排序 s=orderfields(s1,s2) 将s1中域按照s2的顺序排序 s=orderfields(s1,C) 将s1中域按照单元数组C的顺序排序 isstruct(s) 判断一个数组是否为结构数组 isstruct(s,’域名‘) 判断结构数组中是否存在某个域名 size(结构数组) 返回结构数组的维度 size(结构数组.域名) 返回域值的维度 结构数组的嵌套 结构数组的某个域也是个结构数组 【例】student下有age,gender,grade,name四个域,现增加域 student.family.father=’John‘

student.family.mother=’Kate‘

&gt;&gt;student =======运行一下============ age: 1 gender: ’male‘ grade: [90 90 80]

family: [1×1 struct]

&gt;&gt;student(1).family.father =======运行一下======== ans=

John

转换函数 struct2cell(s) 将结构数组s(p个域),转换为p*m*n的单元数组 s=struct(’a‘,1,’b‘,2,’c‘,3,’d‘,4)

s(2)=struct(’a‘,14,’b‘,12,’c‘,23,’d‘,34)

&gt;&gt;s=struct2cell(s) ===========运行一下=========== 4×1×2 cell array s(:,:,1) =

[1] [2] [3] [4] 

s(:,:,2) =

讯享网[14] [12] [23] [34] 

======================== cell2struct(单元数组,域名,维度) fieldnames(s) 返回包含s域名的单元数组

多项式运算 f(x)=an*x^n+an-1*x^(n-1)+…+a1*x^1+a0 a=[5 3 4 6] b=[4 3 1 1 6] polyval(a,x) 求解以a为系数矩阵在x=x处的多项式的值,polyval(a,2)=5*2^3+3*2^2+4*2^1+6=66 conv(a,b) a和b的卷积运算(多项式的乘法运算) [q r]=deconv(a,b) a和b的反卷积运算(多项式的除法运算),得到多项式q和余式r,且满足a = conv(b,q)+r roots(a) 对系数矩阵为a的多项式求根,以列向量输出 poly® 用根的列向量r构造多项式 差值与拟合 已知数据是精确的,建议使用差值 已知数据包好噪声和误差,建议用拟合 t=[0 1 2 3 4 5];y=[0 20 60 68 77 110]; interp1(x,y,xi,method) 一维线性插值,x为自变量,y为因变量,xi为插值点,method为差值计算方法,不写默认为线性差值

【例】线性插值法计算2.1处的值

&gt;&gt;interp1(t,y,2.1)

ans=60.7999

polyfit(x,y,n) 拟合多项式,x为自变量,y为因变量,n为最高次数

【例】用三次多项式拟合后计算2.1处的值

ans=52.2235

数值微分 diff: 差分,后一个数减前一个数,差分一次,减少一个数【例】diff([1 2 3 4 5])=[1 1 1 1] y=diff(x,n,dim) x为需要差分的向量,n为差分次数(对差分结果再差),dim为指定差分的维度方向 diff(x,m+n)=diff(diff(x,m),n) 微分套路:dy/dx=(diff(y)/diff(x))

【例】y=sin(x),[-2*pi,2*pi] 的微分

x=-2*pi:0.01:2*pi; y=sin(x); diff_x=diff(x); diff_y=diff(y); diff_f=diff_yhttps://www.douban.com/note//diff_x; y1=cos(x); plot(x,y); hold on plot(-2*pi:0.01:2*pi-0.01,diff_f); 注

plot(x,y1);

注:差分一次后,减少一个数据 数值积分 quad(fun,a,b,tol) Simpson积分法 ,fun函数名,a积分下限,b积分上线,tol误差限 quadl(fun,a,b,tol) Lobatto积分法 ,fun函数名,a积分下限,b积分上线,tol误差限 【例】Q= quad(@sin,0,0.5*pi) ans=0.3119 【例】Q= quadl(@sin,0,0.5*pi) ans=0.1748 Lobatto积分法比Simpson积分法精度更高 常微分方程数值解法 [T Y]=solver(odefun,tspan,y0,option) solver是ode函数,有ode45,ode23,ode15s等,odefun是求解的微分方程,其格式为 y’=f(t,y) ,tspan指定积分区间,用向量表示,y0初始条件构成的向量,option可以通过参数改变积分条件 solver选用的优先次序为ode45,ode23,ode15s

【例】求解微分方程:y‘=-y-xy^2,0≤x≤1,y(0)=1

function dy=f(x,y)

dy=-y-x*y^2;

[X1 Y1]=ode23(@f,0:0.1:1,1); [X2 Y2]=ode45(@f,0:0.1:1,1); [X3 Y3]=ode15s(@f,0:0.1:1,1); plot(X1,Y1,X2,Y2,X3,Y3) ==================================

符号对象必须先定义,再使用 符号对象的定义 S=sym(A,set) 将A定义为符号量S,类型为sym,当A为数值型,set要求的格式,’integer‘, ’rational‘, ’real‘, ’positive‘,’clear‘,默认为’rational‘(有理数) x=sym(‘x’) 将符号&quot;x&quot;存储到符号变量x中 syms agr1 agr2 … real 定义arg1 arg2 … 多个符号变量,格式为实数 【例】 S1=sym(’log(2)‘) S2=sym(log(2)) S3=log(2) x=sym(’x‘) S1+x ======运行一下======== S1 =log(2) S2 =6535940992 S3 =0.9945 x = x

x + log(2)

一般符号运算 syms x y z t;

f1=x^3+x+2;

f2 = x^4 + 4*x^2 + 9);

&gt;&gt;f1+f2 ans= x^4 + x^3 + 4*x^2 + x + 11 &gt;&gt;f1*f2 ans= (x^4 + 4x^2 + 9)(x^3 + x + 2) &gt;&gt;expand(f1*f2) ans=x^7 + 5*x^5 + 2*x^4 + 13*x^3 + 8*x^2 + 9*x + 18 符号矩阵运算 syms a b c d x A1=[a b ; c d ] A2=[1 2;a b] &gt;&gt;A1+A2
ans= [ a + 1, b + 2] [ a + c, b + d] &gt;&gt;A1-a ans= [ 0, b - a] [ c - a, d - a] &gt;&gt;A1*A2 ans= [ a + a*b, b^2 + 2*a] [ c + a*d, 2*c + b*d] &gt;&gt;A1*A2 ans= [ a, 2*b] [ a*c, b*d] 普通矩阵转换为符号矩阵 x=sym(’[a b c;d e f]‘); x(2,3) x([2 3]) =====运行一下======= ans=f

ans=[t g]

symvar(‘表达式’) 查找表达式中优先作为独立变量的变量

syms m n f=sin(m)+cos(n)

&gt;&gt;findsym(f) ans=[n m]

表达式的化简 collect(表达式,指定变量) 指定某个变量进行合并同类项,不指定则以第一优先独立变量进行合并同类项 syms x y; f=x^2*y+x*y-x^2-2*x; g=-14*x*exp(-2*x)+316*exp(-2*x); f=collect(f) g=collect(g,exp(-2*x)) ans=(y - 1)*x^2 + (y - 2)*x ans= (316 - x/4)*exp(-2*x) x是该函数的第一优先独立变量,因此默认对x进行合并同类项 factor(表达式) 因式分解 factor(x^2-y^2) ans=[(x+y),(x-y)] simplify(表达式) 自动将表达式化简 simple(表达式) 自动将表达式化简,并输出各种化简方式的结果 [S1 S2]=numden(表达式) 通分表达式,输出[S1(分子)S2分母] pretty(表达式) 转换成自然书写格式的表达式 符号的极限和微积分运算 limit(表达式,v,a,方向) 求表达式的极限,v为指定独立变量求极限,默认为第一优先独立变量,a为趋近的点,默认为0,方向为趋近方向,‘right’求右极限,‘left’求右极限 limit(sin(x)/x) ans=0 diff(S,’v‘,n) 求表达式的符号微分,v为指定独立变量求极限,默认为第一优先独立变量,n为微分次数 diff(sin(x)/x) =cos(x)/x - sin(x)/x^2 int(S,’v‘,a,b) 求表达式的符号积分,v为指定独立变量求极限,默认为第一优先独立变量,a,b为上下限,若给出a,b值,则求的是定积分 int(sin(x)) ans= -cos(x) taylor(f,n,v,a) 求泰勒级数展开,n为次数,默认为6次,v为指定独立变量求极限,默认为第一优先独立变量,a为指定在该点进行展开,默认为0 taylor(sin(x)/x) ans=x^4120 - x^26 + 1 符号积分变换 fourier(f,u,v) 傅里叶变换,对f进行傅里叶变换,u为原函数中指定的自变量,默认为x,v为像函数中指定的自变量,默认为w ifourier(f,u,v) 傅里叶反变换,参数同傅里叶变换 laplace(f,u,v) 拉普拉斯变换u为原函数中指定的自变量,默认为x,v为像函数中指定的自变量,默认为w ilaplace(f,u,v)拉普拉斯反变换,参数同傅里叶变换 ztrans(f,,u,v) Z变换,u为原函数中指定的自变量,默认为x,v为像函数中指定的自变量,默认为w iztrans Z反变换 求方程的解析解 solve 求解代数方程的符号解 f=solve(表达式1,表达式2…,变量1,变量2,… ) 返回的结果f以结构数组的形式储存 [y1,y2, … ]=solve(’表达式1‘,’表达式2‘…,变量1,变量2, …) 返回的结果f以单元数组的形式储存 注意,表达式中等号用‘’==‘’表示

【例】求解线性方程组

syms x y z g=solve(x+y-2==1,2*x+3*y+z==13,3*x-z==-2,x,y,z); ==========运行一下=============== &gt;&gt;g.x ans=1 &gt;&gt;g.y ans=2 &gt;&gt;g.z

ans=5

【例】

syms a b sita x1 x2; L1=x1*cos(sita)-x2*sin(sita)==a; L2=x1*sin(sita)-x2*cos(sita)==b; [x1,x2]=solve(L1,L2,x1,x2); x1=simplify(x1) x2=simplify(x2) ======运行一下============= x1 =(a*cos(sita) - b*sin(sita))/(2*cos(sita)^2 - 1)

x2 =-(b*cos(sita) - a*sin(sita))/(2*cos(sita)^2 - 1)

常微分方程解析解 dsolve(微分方程,初始条件) 其中表达式的等号用“==”表示,微分方程用中一阶微分y’=dy/dx用diff(y,x),高阶微分y^(n)用diff(y,x,n)表示,求解微分方程组时将多个微分方程组成一个向量

【例】y=y(x),求解y‘’=2*x+y,y(0)=1,y‘(0)=2时的特解

syms y(x) D2y=diff(y,x,2)==2*x+y; Dy=diff(y,x); cond=[y(0)==1,Dy(0)==2]; g=dsolve(D2y,cond) ====运行一下========= g = (5*exp(x))/2 - (3*exp(-x))/2 - 2*x ====================

复数的一般运算 a=2+3i isreal(a) 判断a是否是实数 ans=0(逻辑值) real(a) 返回a的实部 ans=2 imag(a) 返回a的虚部 ans=3 conj(a) 返回a的共轭复数 ans=2-3i abs(a) 计算a的模 ans=3.3989 angle(a) 计算a的幅角 ans=0.7329 复数的关系运算只有相等(==)和不相等(~=),没有大于和小于 复数作图 polarplot(自变量1,因变量1,自变量2,因变量2,…)

polar一次只能画一个图像

t=0:0.01:4*pi; y(t)=exp(-0.2t).(cos(t)+1i*sin(t)); subplot(3,1,1); plot(y) %直角坐标图 subplot(3,1,2); polarplot(angle(y),abs(y)) %极坐标轴 subplot(3,1,3);

polarplot(t,real(y),t,imag(y));

plot对复数作图,默认将横轴作为实轴,纵轴作为虚轴

load 和 save load(’文件名‘,’-mat‘,’变量名‘) 加载指定的mat文件中指定的变量,不填写变量名则全部加载,加载的格式有-mat:强制以mat格式进行加载,-ascii:强制以ascii格式加载,不填则默认为-mat save(’文件名‘,’变量名‘) 将内存中指定变量保存为指定的文件名的mat文件,不写变量名则默认保存所有的变量 textread A=textread(’文件名‘) 文件中存储的是纯数字数据,从文件中读取数据并保存至A中 [A,B,C, …]textread(’文件名‘,’数据格式‘) 文件中存储的是字符串数据,从文件中读取数据并以指定格式保存至A,B,C,…中,数据格式同fprintf函数的格式 【例】data.txt中存有如下数据 Sally Type1 12.34 45 Yes Joe Type2 23.54 60 No

Bill Type1 34.90 12 No

[a b c d e]=textread(’shuju.txt‘,’%s%s%f%d%s‘) ===运行一下========================== a = 3×1 cell array

&#x27;Sally&#x27; &#x27;Joe&#x27; &#x27;Bill&#x27; 

b = 3×1 cell array

讯享网&#x27;Type1&#x27; &#x27;Type2&#x27; &#x27;Type1&#x27; 

c = 12.0000 23.9999 34.9999 d =

45 60 12 

e = 3×1 cell array

讯享网&#x27;Yes&#x27; &#x27;No&#x27; &#x27;No&#x27; 

=========================== 如果只想读取指定列的数据,如只读取第1、3、5列,则在输入格式中将不需要读取的列的百分号后加一个*即可 例如:[a c e]=textread(’shuju.txt‘,’%s%*s%f%*d%s‘) 文件操作 对文件进行操作,需要对文件建立一个文件标识(fileID),文件标识为一个正整数,fileID=1为标准输出,fileID=2为标准错误,其他均为临时标识,打开时创立,关闭时消失,当文件打开错误,fileID=-1 matlab中文件分为二进制文件和格式化文件(文本文件) FID=fopen(’文件名‘) 打开文件并将该文件名赋给一个变量,以表示文件标识 FID=fopen(’文件名‘,’打开方式‘) 打开方式包括:’r‘读出,’w‘,删除现有内容后重新写入,文件不存在的时候自动创建,’a‘在现有的数据后面添加新数据,文件不存在的时候自动创建。后面带个加号表示可读写均可以,如’r+‘,’w+‘,’a+‘:不指明打开方式,则默认为r。 [FID MESSAGE]=fopen(’文件名‘) MESSAGE代表出错信息 打开文件的默认方式为二进制方式,在打开方式后面加个b,如’wb‘,’r+b‘,如果要以文本形式打开,在打开方式后面加个t,例如’rt‘,’w+t‘ fclose(FID) 关闭指定文件标识的文件 fclose(a) a为列向量,关闭列向量中相应的文件标识的文件 fclose(’all‘) 关闭所有打开的文件 二进制文件输入输出函数 count=fwrite(FID,A) 对指定文件标识写入数据A,并且指定写入数据的精度,不指定精度时,默认为’uint8‘,将写入数据的数量赋值给count 【例】 &gt;&gt;fid=fopen(’a.dat‘,’w‘); &gt;&gt;x=magic(5); &gt;&gt;count=fwrite(3,x) count =

25 

&gt;&gt;fclose(3) ans =

讯享网 0 

====================== [A,count]=fread(fid,size) 读取指定文件标识中,指定大小的数据,赋值给A,size=n,读取n个元素到一个列向量中,=inf 读取所有元素,=[M N] 以列的方向读取元素直至填满M*N的矩阵。读取元素后,将读取的元素数量赋值给count

【例】接着上面的例写

&gt;&gt;fid=fopen(’a.dat‘,’r‘); &gt;&gt;A=read(fid,[2 3]) A =

17 4 11 23 10 24 

=================== 注意:读取数据结束后,若继续读取,会从上一次读取的结束的位置向后读取 如本例,再次运行A=read(fid,[2 3]),返回的结果为 A=

讯享网5 12 1 6 18 7 

若需要重新开始,必须先关闭文件再打开。下面的fscanf类似。

格式化函数 fprintf(fid,format,val) 将数据以设定的格式写入指定的文件中。fid为文件标识,val为需要写入文件的数据,format格式如下所示 %d 整数 %e 实数:科学计算法形式 %f 实数:小数形式 %g 由系统自动选取上述两种格式之一 %s 输出字符串 【例】 A=magic(5); fid=fopen(’a.txt‘,’w‘); fprintf(fid,’%0.3f ‘,A); fclose(fid); =========== 运行一下======== 打开a.txt文件,里面的内容如下所示:

17.000 23.000 4.000 10.000 11.000 24.000 5.000 6.000 12.000 18.000 1.000 7.000 13.000 19.000 25.000 8.000 14.000 20.000 21.000 2.000 15.000 16.000 22.000 3.000 9.000

A=fscanf(fid,format) [A,court]=fscanf(fid,format,sizw) %s 读取单一的字符串数据(忽略空格) %c 读取单一个任意类型的字符,包括空格,换行符等 %Nc 读取N个字符 %d 读取整型值(忽略空格) %e,%f,%g 科学计数法形式,浮点形式,由系统自动选取上述两种格式之一,读取一个小数(忽略空格) %i 读取一个有符号的数(忽略空格) %a 读取一个字符串,字符串可以被空格或其他类似于换行符的特殊符号隔开

【例】

a.text内容为: 1.1 2.2 3.3 4.4

5.5 6.6 7.7 8.8

fid=fopen(’a.txt‘,’rt‘); [z,count]=fscanf(fid,’%d.%d‘,inf)

fclose(fid);

小讯
上一篇 2025-04-19 22:09
下一篇 2025-05-07 09:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/203855.html