matlab问题:a=[1,1]; for k=3:100, a(k)=a(k-1)+a(k-2); end

matlab问题:a=[1,1]; for k=3:100, a(k)=a(k-1)+a(k-2); end,第1张

a=[1,1];定义了一个1x2的数组,定义数组时数据成员之间可以用逗号隔开或者是直接空格。当数据成员间使用分号隔开时,表示换行。利用a=[1,1;1,1;1,1];定义的是一个3x1的数组,数组有三行,每行有三个数据成员。

for  k=3:100

a(k)=a(k-1)+a(k-2);

end

这是一个循环,在Matlab中循环的形式有三种,for,while,dowhile。这是最常用的for循环。与c++不同,循环条件无需加括号。for k=3:100 表示循环从k=2一直循环到k=100,也就是说a(k)=a(k-1)+a(k-2)表示对a(3)到a(100)进行了赋值,例如a(3)=a(2)+a(1);也就是一共有98个循环步,

a(3)=a(2)+a(1);

a(4)=a(3)+a(2);

a(100)=a(99)+a(98);

for语句的调用格式是

FOR variable = expr, statement, , statement END

其中expr是一个数组,variable依次从数组的第一个成员到最后一个成员进行取值,每次取值进行一次循环,也就是运行 statement的内容。3:100定义的是一个数组3,4,5,699,100的数组,循环过程k依次对这个数组取值。

Matlab的数组不像c++里面是预定义固定的,而是在运行过程中可变的,a=[1,1];定义了一个1x2的数组,但是由于在运行过程中有调用到a(3)到a(100)这些都是没有预定义的范围,但是由于Matlab本身这种特性,因此数组本身是可以扩充的,甚至可以改变数据类型。

MATLAB基本的使用方法
1 读取图像:用imread函数读取图像文件,文件格式可以是TIFF、JPEG、GIF、BMP、PNG等。比如
2 >> f = imread('chestxrayjpg');
读进来的图像数据被保存在变量f中。尾部的分号用来抑制输出。如果是彩色的,可以用rgb2gray转换成灰度图:
>> f = rgb2gray(f);
然后可以用size函数看图像的大小
>> size(f)
如果f是灰度图像,则可以用下面的命令把这个图像的大小赋给变量M和N
>> [M, N] = size(f);
用whos命令查看变量的属性
>> whos f
3 显示图像:用imshow显示图像
4 imshow(f, G)
其中f是图像矩阵,G是像素的灰度级,G可以省略。比如
>> imshow(f, [100 200])
图像上所有小于等于100的数值都会显示成黑色,所有大于等于200的数值都会显示成白色。pixval命令可以用来查看图像上光标所指位置的像素值。
pixval
例如
>> f = imread('rose_512tif');
>> whos f
>> imshow(f)
如果要同时显示两幅图像,可以用figure命令,比如
>> figure, imshow(g)
用逗号可以分割一行中的多个命令。imshow的第二个参数用一个空的中括号:
>> imshow(h, [])
可以使动态范围比较窄的图像显示更清楚。
5 写图像。用imwrite写图像
6 imwrite(f, 'filename')
文件名必须包括指明格式的扩展名。也可以增加第三个参数,显式指明文件的格式。比如
>> imwrite(f, 'patient10_run1tif', 'tif')
也可以写成
>> imwrite(f, 'patient10_run1tif')
还可以有其他参数,比如jepg图像还有质量参数:
>> imwrite(f, 'filenamejpg', 'quality', q)
q是0到100之间的一个整数。对比不同质量的图像效果。用imfinfo命令可以查看一个图像的格式信息,比如
>> imfinfo bubbles25jpg
可以把图像信息保存到变量中
>> K = imfinfo('bubbles25jpg');
>> image_bytes = KWidth KHeight KBitDepth / 8;
>> compressed_btyes = KFileSize;
>> compression_ratio = image_bytes / compressed_bytes
7 数据类型。MATLAB的数据类型包括:
8 double 双精度浮点
9 uint8 无符号8位整数
10 uint16 无符号16位整数
11 uint32 无符号32位整数
12 int8 有符号8位整数
13 int16 有符号16位整数
14 int32 有符号32位整数
15 single 单精度
16 char 字符
17 logical 逻辑型(二值)
数据类型转换
B = data_class_name(A)
比如
>> C = [14 15]
>> D = uint8(C)
图像类型分为:
Intensity image 灰度图
Binary image 二值图
Indexed image 索引图
RGB image 彩色图
在灰度图中每个像素可以是整型、浮点型或者逻辑型。图像类型的像素类型可以转换
function to from
im2uint8 uint8 logical,uint8,uint16,double
im2uint16 uint16 logical,uint8,uint16,double
mat2gray double double
im2double double logical,uint8,uint16,double
im2bw logical uint8,uint16,double
比如
g = mat2gray(A, [Amin, Amax]);
g = mat2gray(A);
g = im2double(h);
g = im2bw(f, T)
其中A是浮点型的图像,Amin和Amax是浮点数的范围,h和f是任意类型的图像,T是分割的阈值。
18 数组(向量)索引:创建向量(数组):
19 >> v = [1 3 5 7 9 11 13]
用小括号对向量进行索引(取数组中的某个元素):
>> v(2)
转置(将行向量通过转置变成列向量):
>> w = v'
取向量其中的一部分:
>> v(1:3) 第1个到第3个
>> v(2:4)
>> v(3:end) 第3个到最后一个
>> v(1:end)
>> v(:) 全部
>> v(1:2:end) 第1个到最后一个,每次增加2
>> v(end:-2:1) 最后一个到第1个,每次减2
其中end总是表示最后一个。
>> x = linspace(1, 5, 10)
>> v([1 4 5])
linspace函数产生一个范围内的平均分布。
20 矩阵索引:创建矩阵
21 >> A = [1 2 3; 4 5 6; 7 8 9]
取矩阵中的一个元素
>> A(2, 3)
取矩阵中的一行或者一列
>> C3 = A(:, 3)
>> R2 = A(2, :)
取矩阵中某些行某些列
>> T2 = A(1:2, 1:3)
对矩阵中某些元素进行赋值:
>> B = A;
>> B(:, 3) = 0
用end表示最后一行或者最后一列:
>> A(end, end) 最后一行最后一列
>> A(end, end-2) 最后一行倒数第三列
>> A(2:end, end:-2:1) 第2行到最后一行,最后一列到第一列,每次减2

在32 bits版本的Matlab中,变量只能占12GB大小,这是被Windows本身所限制的。如果你的变量不是很大,你又设了很大的虚拟记忆体,还是出现out of memory的问题,那可能是由是没有连续的空间让变量储存导致的,即你有足够的记忆体,但却没有足够“连续的”记忆体,此时可以用PACK命令。详情可参考:
>学习链接

可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};
也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};

与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他 *** 作基本一样。

我们知道矩阵及矩阵的删除可以通过[]实现:

元胞数组 *** 作类似但和其赋值一样有区别,区别就在于{}和()

a={1,2,3};

a{1}=[];%并不能删除第一个cell单元,只是变成空值

a(1)=[];%删除第一个单元

a(:)=[];%一次性删除所有cell单元


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10371057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存