您的位置 首页 新闻

Matlab基础语法(三)

本文主要包括以下内容 数据类型 文件输入输出 数据类型 7.1 Introduction to Data Types The Limitation of Computers Rea…

本文主要包括以下内容

数据类型

文件输入输出

数据类型

7.1 Introduction to Data Types

The Limitation of Computers Real numbers in mathematics: Can be infinitely large Have infinitely fine resolution Computers: Finite memory Upper limit on the largest number that can be represented Lower limit on the absolute value of any non-zero number The set of values that can be represented by a MATLAB variable is finite.

Data Types MATLAB: many different data types A data type is defined by: Set of values Set of operations that can be performed on those values MATLAB: All elements of a given array must be of the same type Elementary type Type of a MATLAB array is defined by Number of dimensions Size in each dimension Elementary type to check data type: class(x) x = 23; class(x) = double — default data type for all numerical data in matlab (incl. complex numbers) whos: check type & size of every variables class(double) = char — character class(3<4) = logical Numerical Types double Default type in MATLAB Floating point representation Example: 12.34 = 1234 * 10-2 Mantissa and exponent 64 bits (8 bytes) single 32-bit floating point Integer types Signed (both negative & non-negative numbers), unsigned (only non-negative numbers) 8-, 16-, 32-, 64-bit long Range of Values Inf: “Infinity” — x/0 NaN: “Not-a-Number” — 0/0 Useful functions Type check: class isa >> isa(x,’double’) Range check: intmax, intmin realmax, realmin >> intmax(’uint32’) Conversion: Name of function = name of desired data type int8(x), uint32(x), double(x), etc. Operators Arithmetic operators Operands of the same data type: No problem Different data types: “mixed-mode arithmetic” Many rules and restrictions Relational operators Different data types are always allowed Result is always of logical type Conversion In MATLAB >> k = uint8(500) k = 255 >> k = uint8(256) k = 255 >> k = uint8(-1) k = 0 若赋值超出变量范围,则会自动变为最接近变量范围的值(clipping) Range Check in MATLAB >> intmax(‘uint8’) ans = 255 >> intmin(‘uint8’) ans = 0 >> intmin(‘int32’) ans = -2147483648 >> realmax(‘double’) ans = 1.7977e+308 >> realmin(‘single’) ans = 1.1755e-38

7.2 Strings

In MATLAB: char(x)输出ASCII里第x位的符号(e.g. function char_codes) Strings和数集一样可以用length

>> MOOC_title = ‘MATLAB for Smarties’; >> length(MOOC_title) ans = 19 >> MOOC_title(1) ans = M String functions findstr: >> MOOC_title = ‘MATLAB for Smarties’; >> strfind(MOOC_title,’LAB’) ans = 4 输出的是第一个字母的位置 case sensitive >> strfind(MOOC_title,’r’) ans = 10 15 多次出现的话会输出多个值 strcmp: >> MOOC_title = ‘MATLAB for Smarties’; >> lang = ‘MATLAB’; >> strcmp(MOOC_title, lang) ans = 0 Meaning two strings are not the same. case sensitive >> strcmp(MOOC_title(1:6), lang) ans = 1 strcmpi: to compare while ignore case >> strcmpi(MOOC_title(1:6), ‘Matlab’) ans = 1 str2num (num2str): >> pi_number = 3.1416 pi_number = 3.1416 >> pi_digits = ‘3.1416’ pi_digits = 3.1416 >> str2num(pi_digits) ans = 3.1416 sprintf: 与fprintf一样,除了有一个输出值可以赋予变量(变量类型为string/char)

7.3 Structs

Structs

An array must be homogeneous: It cannot contain elements of multiple types. A struct can be heterogeneous: It can contain multiple types.

A struct is different from an array: fields, not elements field names, not indices Fields in the same struct can have different types. Versatility inside: A field of a struct can contain another struct. Structs can hold arrays, and arrays can hold structs. Struct functions

Create a struct >> account.number = 1234567 account = number: 1234567 >> account.balance = 5000 account = number: 1234567 balance: 5000 >> account.owner.name = ‘Joe Smith’ account = number: 1234567 balance: 5000 owner: [1×1 struct] >> account.owner.email = ‘[email protected]’ account = number: 1234567 balance: 5000 owner: [1×1 struct] Create another struct with the same name — 和原先的有一样的field,原先的自动变成(1);只限于一级子类别,对account.owner.后面的类别没影响 >> account(2).number = 7654321 account = 1×2 struct array with fields: number balance owner isfield: 输出真或假(有或无) >> account(1:2).owner ans = name: ‘Joe Smith’ email: ‘[email protected]’ ans = name: ‘Jane Farmer’ age: 23 >> isfield(account(2).owner,’age’) ans = 1 >> isfield(account(1).owner,’age’) ans = 0 rmfield: remove field >> account(1).owner = rmfield(account(2).owner,’age’); >> account(1).owner ans = name: ‘Jane Farmer’ struct: >> course = struct(‘Area’, ‘CS’, ‘number’, 103, ‘title’, ‘Introductory Programming for Engineers and Scientists’) course = Area: ‘CS’ number: 103 title: ‘Introductory Programming for Engineers and Scientists’

7.4 Cells

Pointers

How to store a page of text? Each line should be a separate string Cannot use an array of chars: Each line would have to have the same length A vector of objects with each referring to one line

Pointer

Each variable (scalar, vector, array, etc.) is stored in the computer memory. Each memory location has a unique address. A pointer is a variable that stores an address. MATLAB calls a pointer a “cell”.

Cells

MATLAB has a restrictive pointer model Strict rules on what can be done with cells Harder to make mistakes But it is a powerful way to store heterogeneous data Cell arrays Used more frequently than structs

New syntax:

To access the data a cell points to, use: { }

若令c2 = c1,改变c1中的元素,c2的元素不会同步变化——c2中的元素只是c1元素的copy

Cell functions,作为参数传入函数中,发生改变,原cell指向的不变。

文件输入输出

8.1 File Input / Output

File Input / Output

File:

Area in permanent storage (disk drive)

Stores information

Managed by the operating system

Can be copied or moved

Can be accessed by programs

File Input/Output (I/O)

Data exchange between programs and computers

Data exchange between the physical world and computers

Saving your work so you can continue with it later

MATLAB can handle

Mat-files and M-files AND text, binary, and Excel files

>> pwd: print the directory of current folder >> ls: print all files in the current folder >> cd(x): change current folder – 可以是完整的路径,也可以输入子文件夹的名字,也可以用cd(‘..’)回到母文件夹,cd(‘../..’)回到再上一级文件夹 >> mkdir(‘new_folder’): make a new folder >> rmdir(‘new_folder’): remove a new folder >> save: 保存工作区内容到matlab.mat >> load: 载入matlab.mat >> save my_data_file data s a: 可以自己设定储存的名字(my_data_file)和保存的变量(data s a)

8.2 Excel Files

Excel files

Microsoft Excel® is a widely used data-analysis tool

Many other programs support reading and writing Excel files

MATLAB does too with two built-in functions

xlsread

xlswrite

Reading Excel files

>> [num,txt,raw] = xlsread(‘Nashville_climate.xlsx’); num: smaller than the size of spreadsheet, incl. NaN (Not a Number) >> [~, text] = xlsread(‘Nashville_climate_data.xlsx’): ignores the numerical data, only keep the text data >> [~,~, everything] = xlsread(‘Nashville_climate_data.xlsx’): ignores the numerical & text, only show the whole file >> num = xlsread(‘Nashville_climate_data.xlsx’,1,’D15’): 得到表中的第一个sheet里D15的内容 ‘D15’可以换成’D15:E17’用来输出一个区域的值(左上角/右下角)

8.3 Text Files

Text files

Text files contain characters

They use an encoding scheme: ASCII or ◦ Any one of many other schemes MATLAB takes care of encoding and decoding Before using a text file, we need to open it Once done with the file, we need to close it

Opening text files

Opening: fid = fopen(filename, permission) — fid = file identifier

Closing: fclose(fid)

fid: Unique file identifier for accessing file

Permission: what we want to do with the file— read, write, overwrite, append, etc.

例子: write_temp_precip_txt Reading text files One line at a time type prints a text file in the command window Let’s re-implement it: function view_text_file(filename) fid = fopen(filename,’rt’); if fid < 0 error('error opening file %s ', filename); end % Read file as a set of strings, one string per line: oneline = fgets(fid); while ischar(oneline) fprintf('%s',oneline) % display one line oneline = fgets(fid); end fprintf(' '); fclose(fid); Reading lines into string variables is easy Parsing these strings to get numerical data is much harder Not covered Binary files are more suited for numerical data 8.4 Binary Files Binary files Binary file = “not a text file” Many different ways to represent numbers All we need to know are their types. Binary files need to be Opened with fopen Closed with fclose Writing binary files Data type is important Example: write a double array into a binary file function write_array_bin(A,filename) fid = fopen(filename,'w+'); if fid < 0 error('error opening file %s ', filename); end fwrite(fid,A,'double'); fclose(fid); Reading binary files Example: read a double array from a binary file function A = read_bin_file(filename,data_type) fid = fopen(filename,'r'); if fid < 0 error('error opening file %s ',filename); end A = fread(fid,inf,data_type); fclose(fid); Inf - open all the file 如果纯粹的用fwrite和fread,会使format改变,变成一个向量而无矩阵等,这种时候就要将格式信息也加进去—— write_dims_array_bin(A,filename) & A = read_dims_array_bin(filename)

本文来自网络,不代表Xnewv立场,转载请注明出处:https://xnewv.com/2141.html

为您推荐

联系我们

联系我们

18873343099

在线咨询: QQ交谈

邮箱: [email protected]

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部