Note:

- Although the document is very comprehensive, this article is mainly for quick completion in one day, so please forgive me for the shortcomings.
- The code is based on matlab terminal called by vscode/py 3.6

# Basic mathematical operation and matrix operation

## Basic grammar

### variable

- No declaration required
- Assign a value to a variable with =

#### Variable name

- Variable names are case sensitive (I don't know if it's because of windows)
- Variable names can only be [0~9,a~z,A~z,] And the variable name cannot start with a number
- Reserved variables are not suitable for variable names
- Use the iskeyword command to view program keywords, which are not allowed to be used as variable names

variable | significance |
---|---|

ans | The result of the previous sentence operation |

i,j | Complex operator, (note here) |

Inf | infinite |

eps | Floating point relative precision, i.e. the distance from 1.0 to the next floating point number (the value is 2.2204e-16) |

NaN | Non numeric |

pi | PI |

Variable names should not override built-in function names

In MATLAB, the calling priority of variable is higher than that of function, so the variable name should not overwrite the built-in function

For example:

cos = 'changqingaas'; cos(8) % disp(['ans is ', num2str(ans)]) clear; % If a function is overwritten by a variable name,Then call clear <Variable name>You can unbind the variable name on the function name cos(8) % disp(['ans is ', num2str(ans)])

Note: clear is a dangerous command, because if no parameters are added after the command, it means to clear all variables in the current workspace

Output: ans = 'n' ans = -0.1455

#### Variable type

logical,char,numeric,cell,struct and their array or matrix

##### Display format of numeric variables

Numeric variable, which is stored in the form of double by default

You can change the display format of numeric variables through format < Display Format >

### MATLAB command line

- Use end of line; Suppress output:
- Use after one line of command; Suppress the output, otherwise the operation result will be displayed on the terminal

- |Command | function | operation result| | -—- | --------------- | --------------- | |clc | clear the output of the terminal || |Clear | clear all variables in the current workspace by default || |who | displays all variables in the workspace in a simplified format | your variables are: ans | |whos | display all variables in the workspace in complex format | name size bytes class attributes ans 1x1 8 double | |which | view the location of the source code file of the built-in function. Combined with the edit command, you can view the source code of the built-in function|

## Use MATLAB for digital operation

### Calculate mathematical expressions using MATLAB

- After the mathematical expression is calculated, its value is stored in the variable ans
- log indicates ln
- exp(x) means e^x

### MATLAB built-in mathematical function

- MATLAB built-in arithmetic operation function
- Basic operation:
- Plus: +, sum,cumsum,movsum
- Minus: -, diff
- Multiply by:. *, *, prod,cumprod
- Except:. /,. \, /\
- Power: ^^

- Modular operation: mod,rem,idivide,ceil,fix,floor,round

- Basic operation:
- MATLAB built-in trigonometric operation function
- Sine: sin,sind,sinpi,asin,asind,sinh,asinh
- Cosine: cos,cosd,cospi,acos,acosd,cosh,acosh
- Tangent: tan,tand,atan,atand,atan2,atan2d,tanh,atanh
- Cosecant: csc,cscd,acsc,acscd,csch,acsch
- Secant: sec,secd,asec,asecd,sech,asech
- cot,cotd,acot,acotd,coth,acoth
- Bevel: hypot
- Conversion: deg2rad,rad2deg,cart2pol,cart2sph,pol2cart,sph2cart

- Built in exponential logarithm function of MATLAB:
- exp,expm1,log,log10,log1p,log2,nextpow2,nthroot,pow2,reallog,realpow,realsqrt,sqr

- Complex functions built in MATLAB:
- abs,angle,complex,conj,cplxpair,i,imag,isreal,j,real,sign,unwrap

## Matrix operation using MATLAB

### Definition matrix

#### Input matrix to terminal

In MATLAB, use [] to enclose the matrix content to be input, use spaces or commas to separate variables in the line, and use; Separate each line

#### Create vectors using colon operators

Using colon operator: you can create a long vector with the following syntax:

For example:

#### Define special matrix

command | Results obtained |
---|---|

eye(n) | Get an n × Identity matrix of n |

zeros(n1, n2) | Get an n1 × All zero matrix of N 2 |

ones(n1, n2) | Get an n1 × All 1 matrix of N 2 |

diag(vector) | Get a diagonal matrix with the content in the vector vector as the diagonal |

### Index of matrix

- The matrix in MATLAB is stored in column order And the index subscript starts from 1
- There are two indexing methods for matrices: one-dimensional indexing and two-dimensional indexing For a general matrix, the index order is as follows: \ begin{bmatrix} 1 or (1,1) & 4 or (1,2) & 7 or (1,3) \ \ 2 or (2,1) & 5 or (2,2) & 8 or (2,3) \ \ 3 or (3,1) & 6 or (3,2) & 9 or (3,3) \ end {bMatrix}
- The index of matrix can use colon:, which means to select all rows or columns
- The index of the matrix can be one or two vectors, representing all rows or columns in the selected vector| The result of the original matrix | index | ------------------------------------------------------------------------------------------------------| \ begin {bmatrix} 1 & 2 & 3 \ 4 & 5 & 6\ 7 & 8 & 9 \end{bmatrix}\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6\ 7 & 8 & 9 \end{bmatrix}\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6\ 7 & 8 & 9 \end{bmatrix}\begin{bmatrix} 1 & 4 \ 7 & 2\end{bmatrix}\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6\ 7 & 8 & 9 \end{bmatrix}\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6\ 7 & 8 & 9 \end {bmatrix}\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \end{bmatrix}\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6\ 7 & 8 & 9 \end{bmatrix}\begin{bmatrix} 1 & 2 \ 7 & 8 \end{bmatrix}

### Matrix operation

#### Operator of operation matrix

operator | operation | form | example |
---|---|---|---|

+ | Matrix and vector addition | A+b | [6 3] + 2 = [8 5] |

- | Matrix and vector subtraction | A-b | [6 3] - 2 = [4 1] |

+ | The matrix is added to the corresponding position of the matrix | A+B | [6 3] + [4 8] = [10 11] |

- | The matrix is subtracted from the corresponding position of the matrix | A-B | [6 3] - [4 8] = [2 -5] |

* | Matrix Matrix Multiplication | A*B | [6 3] * [4 8]' = 48 |

.* | The matrix is multiplied by the corresponding position of the matrix | A.*B | [6 3] * [4 8] = [24 24] |

/ | Matrix and matrix right division (equivalent to A*inv(B)) | A/B | [6 3] / [4 8] = 0.6 |

\ | Matrix and matrix left division (equivalent to inv(A)*B) | A\B | [6 3] / [4 8] = [0.06667 1.3333; 0 0] |

./ | Right division of matrix and corresponding position of matrix | A./B | [6 3] ./ [4 8] = [1.5 0.375] |

.\ | Left division of matrix and corresponding position of matrix | A.\B | [6 3] .\ [4 8] = [0.6667 2.6667] |

^ | Matrix and vector power | A^b | [1 2; 3 4]^3 = [37 54; 81 118] |

.^ | Matrix and matrix corresponding position power | A.^B | [1 2; 3 4].^[1 2; 3 4] = [1 4; 27 256] |

#### Function of operation matrix

For the following matrix

A=\begin{bmatrix} 1 & 2 & 3 \\ 0 & 5 & 6 \\ 7 & 0 & 9 \end{bmatrix}

Operate to demonstrate common functions of the operation matrix

For the above functions, all parameters are optional except the first parameter

# Structured programming and function definition

## Structured programming

### Process control statements and logical operators

Process control statement | effect |
---|---|

if, elseif, else | if clause is true, execute the statement |

switch, case, otherwise | Judge which clause to execute according to the content of the switch statement |

while | Repeat the clause until the condition in while is false |

for | Execute clause a fixed number of times |

try, catch | Execute the clause and catch exceptions during execution |

break | Jump out of loop |

continue | Go directly to the next cycle |

end | End clause |

pause | Suspend program |

return | Return to the calling function |

All the above loops and conditional statements should be closed with end at the end

MATLAB also has the following logical operators:

operator | significance | ||
---|---|---|---|

== | be equal to | ||

~= | Not equal to | ||

&& | And (support logic short circuit) | ||

` | ` | Or (support logic short circuit) |

#### Example of process control statement

##### if statement:

if condition1 statement1 elseif condition2 statement2 else statement3 end

##### switch Statements

switch expression case value1 statement1 case value2 statement2 otherwise statement end

##### while statement

while expression statement end

##### for statement

for variable = start:increment:end commands end

##### break statement

x = 2; k = 0; error = inf; error_threshold = 1e-32; while error > error_threshold if k > 100 break end x = x - sin(x) / cos(x); error = abs(x - pi); k = k + 1; end

#### Try to pre allocate memory space when using circular statements

### Problems needing attention when writing scripts

#### A statement should be added at the beginning of the script to empty the workspace

At the beginning of each script, the following statement should be added to empty the workspace cache and traces of previous program operation:

clear all % Clear variables in workspace memory close all % Close the image drawn by the previous program clc % Output of the program at the terminal before emptying

#### Semicolon shall be added after operation and assignment statement; Suppress output

Semicolons should be added to all operations and assignment statements; Suppress the output. If you need to output a variable to the terminal, you should call the disp method

#### Use ellipsis Splicing multiline statements

In MATLAB, ellipsis Multiple lines of statements can be spliced into one line, and the flexible use of this statement can improve the readability of the code

## function

Similar to scripts, functions can be stored in function names m file can also be defined in memory in the form of function handle

### View built-in functions

We can use the which command to view the location of the source code file of the built-in function. Combined with the edit command, we can view the source code of the built-in function

Run the following statement to open the source file of MATLAB's built-in mean function:

edit(which('mean.m'))

### In function name m file form definition function

The format of the function defined in the MATLAB file is as follows:

function [Output variable name] = Function name(Enter variable name) % Documentation of functions function code

- Function is a keyword that declares that a function is saved in the file
- Input variables and output variables are not necessary. Functions can have neither input variables nor output variables
- Function name should be the same as m file name is the same and does not contain special characters (preferably Chinese)

#### MATLAB built-in function parameters

Function parameters | significance |
---|---|

imputname | Enter a list of variable names |

mfilename | Function source code file name |

nargin | Number of input variables |

nargout | Number of output variables |

varargin | Variable length input parameter list |

varargout | Variable length output parameter list |

MATLAB does not provide syntax for specifying default parameter values and function overloading in other high-level languages, but the flexible use of the above built-in function parameters can realize specifying default parameter values and method overloading to a certain extent:

#### MATLAB function definition example 1

The surface program is used to calculate the displacement in the free fall movement: x = x_{0} + v_{0}t + \frac{1}{2} g t^2

function x = freebody(x0,v0,t) % calculation of free falling % x0: initial displacement in m % v0: initial velocity in m/sec % t: the elapsed time in sec % x: the depth of falling in m x = x0 + v0.*t + 1/2*9.8*t.*t;

This function demonstrates a MATLAB programming skill: try to use it when calculating multiplication* Not *, because the former is available not only when the parameter t is scalar, but also when the variable t is vector or matrix

freebody(0, 0, 2) % Get 19.6000 freebody(0, 0, [0 1 2 3]) % obtain [0 4.9000 19.6000 44.1000] freebody(0, 0, [0 1; 2 3]) % obtain [0 4.9000; 19.6000 44.1000]

#### MATLAB function definition example 2

The following function realizes the conversion from Fahrenheit temperature to Celsius temperature. This function can identify the number of input samples to be converted. When the number of input samples to be converted is 0, exit the function

function F2C() while 1 F_degree = input('tempreature in Fahrenheit: ', 's'); F_degree = str2num(F_degree); if isempty(F_degree) return end C_degree = (F_degree-32)*5/9; disp(['tempreature in Celsius: ' num2str(C_degree)]) end

### Define a function as a function handle

We can also define a function in the form of a function handle, which is closer to the mathematical function definition. Its syntax is as follows:

Function handle = @(Input variable) Output variable

This method can be called directly through the function handle

f = @(x) exp(-2*x); x = 0:0.1:2; plot(x, f(x));

# Data type and file reading and writing

## data type

The main data types in MATLAB are as follows:

### Numeric type

The numerical types supported by MATLAB are shown in the following table:

value type | describe |
---|---|

double | Double precision floating point number |

single | Single-precision floating-point |

int8 | 8-bit signed integer |

int16 | 16 bit signed integer |

int32 | 32-bit signed integer |

int64 | 64 bit signed integer |

uint8 | 8-bit unsigned integer |

uint16 | 16 bit unsigned integer |

uint32 | 32-bit unsigned integer |

uint64 | 64 bit unsigned integer |

The value type of. double can be converted to the value type of other variables in MATLAB by default

n = 3; class(n) n = int8(3); class(n)

Output:

ans = 'double' ans = 'int8'

### String type (char)

In MATLAB, the string type is defined by a pair of single quotation marks' wrapping a text Standard ASCII characters can be converted to corresponding ASCII codes

s1 = 'h'; uint16(s1) % Get 104

Strings are stored in memory in the form of character matrix, which can be indexed and assigned:

str1 = 'hello'; str2 = 'world'; str3 = [str1 str2]; size(str3) % obtain [1 10] str4 = [str1; str2]; size(str4) % obtain [2 5]

str = 'aardvark'; 'a' == str % obtain [1 1 0 0 0 1 0 0] str(str == 'a') = 'Z' % obtain 'ZZrdvZrk'

### Structure

In MATLAB, the structure is a key value pair

#### Basic use of structure

- Similar to most programming languages, MATLAB uses To access fields in the structure:

student.name = 'John Doe'; student.id = 'jdo2@sfu.ca'; student.number = 301073268; student.grade = [100, 75, 73; ... 95, 91, 85.5; ... 100, 98, 72]; student

Using subscript expressions on the structure list can expand or reduce the structure list

student.name = 'John Doe'; student.id = 'jdo2@sfu.ca'; student.number = 301073268; student.grade = [100, 75, 73; 95, 91, 85.5; 100, 98, 72]; student student(2).name = 'Ann Lane'; student(2).id = 'aln4@sfu.ca'; student(2).number = 301078853; student(2).grade = [95 100 90; 95 82 97; 100 85 100]; student(1) = [] % delete student First item in the list

Structures can be cascaded, that is, the value of fields in structures can also be structures:

A = struct('data', [3 4 7; 8 0 1], ... 'nest', struct('testnum', 'Test 1', ... 'xdata', [4 2 8], ... 'ydata', [7 1 6])); A(2).data = [9 3 2; 7 6 5]; A(2).nest.testnum = 'Test 2'; A(2).nest.xdata = [3 4 2]; A(2).nest.ydata = [5 0 9]; A

#### Common functions of structures

function | effect |
---|---|

struct | Create structure |

struct2cell | Convert structure to cell array |

cell2struct | Convert a cell array to a structure |

isstruct | Judge whether a variable is a structure |

structfun | Apply a function to each field of the structure |

fieldnames | Gets all field names of the structure |

isfield | Determine whether the structure contains a field |

getfield | Gets the value of a field in the structure |

setfield | Assign a value to a field in the structure |

rmfield | Delete a field in a structure |

orderfields | Sort structure fields |

### Cell array

In MATLAB, cell array is a data structure that can accommodate different types of elements, similar to the list in Python language

#### Basic use of cell array

Use {} to define a cell array like a matrix:

A = { [1 4 3; 0 5 8; 7 2 9] 'Anne Smith' ;... 3+7i -pi:pi:pi}

A(1,1)={[1 4 3; 0 5 8; 7 2 9]}; A(1,2)={'Anne Smith'}; A(2,1)={3+7i}; A(2,2)={-pi:pi:pi};

A{1,1}=[1 4 3; 0 5 8; 7 2 9]; A{1,2}='Anne Smith'; A{2,1}=3+7i; A{2,2}=-pi:pi:pi; A

The above three methods are equivalent. The second method uses unit index assignment and the third method uses content index assignment

- There are two ways to access data in a cell array: the cell index () and the content index {}
Because the subset of cell array is still cell array, it is necessary to indicate whether we want to access a sub cell array or the content in the corresponding area of cell array in the use of indexer content
- Using the cell index (), we get an array of sub cells
- Using the content index {}, we get the content in the corresponding area of the cell array

- Using the cell index (), we get an array of sub cells

#### Common functions of cell array

### Common functions of cell array

function | effect |
---|---|

cell | Create a cell array |

iscell | Determine whether a variable is a cell array |

cell2mat | Convert cell array to matrix |

cell2struct | Convert cell array to structure |

mat2cell | Converts an array to a cell array of the specified size |

num2cell | Converts an array to a cell array of the same size |

struct2cell | Convert structure to cell array |

celldisp | Recursively displays the contents of a cell array |

cellplot | Drawing cell structure in the form of array |

cellfun | Apply a function to each cell of the cell array |

The mat2cell function can specify the size of each cell in the cell array during conversion

a = magic(3) b = num2cell(a) % obtain % [8] [1] [6] % [3] [5] [7] % [4] [9] [2] c = mat2cell(a, [1 2], [2, 1]) % obtain % [1x2 double] [6] % [2x2 double] [2x1 double]

#### High dimensional cell array

A three-dimensional cell array can have three dimensions: row, column and layer When indexing cellular arrays, the order of priority from high to low is: row → column → layer

Using cat function, you can splice the cell array on the specified dimension

### Function for judging variable data type

The following functions can judge the type of variables:

function | effect |
---|---|

isinteger | Judge whether the input parameter is an integer array |

islogical | Judge whether the input parameter is a logical quantity array |

isnumeric | Judge whether the input parameter is a numeric array |

isreal | Judge whether the input parameter is a real array |

ischar | Judge whether the input parameter is a character array |

iscell | Judge whether the input parameter is a cell array |

isfloat | Determine whether the input array is a floating-point array |

ishandle | Determines whether the input array is a valid graphic handle |

isempty | Determine whether the input array is empty |

isprime | Determines which array elements are prime |

isnan | Determine which array elements are NaN |

isinf | Determines which array elements are Inf |

isequal | Determine whether the arrays are equal |

## File reading and writing

The supported file types are as follows:

Document content | Extension | Functions to read files | Function to write to file |
---|---|---|---|

MATLAB data | *.mat | load | save |

Excel table | *.xls,*.xlsx | xlsread | xlswrite |

Space delimited numbers | *.txt | load | save |

### Read and write data in MATLAB format

The data in MATLAB workspace can be expressed in * The mat format is saved in a file Use the save function to save the data into the file, and use the load function to read the data from the file

- save
The syntax of the function is as follows:
- save(filename,variables) saves the variables into a file in binary form
- save(filename,variables,'-ascii') saves the variables to a file as text

- load
The syntax of the function is as follows:
- load(filename) reads data from a binary file
- load(filename,'-ascii') reads data from a text file

The parameters filename and variables are in string format. If the variables parameter is not specified, all variables in the current workspace will be stored in the file

Complex data formats, such as struct and cell, do not support storage in binary format

### Reading and writing Excel tables

You can use xlsread and xlsworte functions to read and write Excel data. The syntax is as follows:

Syntax for reading Excel files: [num,txt,raw] = xlsread(filename,sheet,xlRange)

Score = xlsread('04Score.xlsx') Score = xlsread('04Score.xlsx', 'B2:D4') [Score Header] = xlsread('04Score.xlsx')

Syntax for writing Excel: xlswrite(filename,A,sheet,xlRange)

M = mean(Score); xlswrite('04Score.xlsx', M, 1, 'E2:E4'); xlswrite('04Score.xlsx', {'Mean'}, 1, 'E1');

# Basic drawing

## Drawing and decoration of drawing lines

### Use the plot() function to draw lines

In MATLAB, the plot() function is used to draw the plot line, and its syntax is:

plot(x,y,LineSpec)

LineSpec: line setting of drawing line. Three setting characters of specified line type, mark symbol and color form a string. The setting characters are not distinguished in order For details, please refer to Official documents.

Linetype symbol | Linetype setter | sign | Marker setter | colour | Color setter |
---|---|---|---|---|---|

- | Solid line (default) | o | circle | y | yellow |

-- | Dotted line |
| plus | m | magenta |

: | Point line | * | asterisk | c | Turquoise blue |

-. | Dotted line | . | spot | r | gules |

x | Cross sign | g | green | ||

s | square | b | blue | ||

d | diamond | w | white | ||

^ | Upper triangle | k | black | ||

v | Lower triangle | ||||

> | Right triangle | ||||

< | Left triangle | ||||

p | Pentagonal | ||||

h | hexagon |

Note: the drawing method of matplotlib in Python is almost the same as here

### Decorative drawing line

Use the legend() function to add a legend to the picture

Use the legend (label1,..., labeln) function to add a legend to the picture

x=0:0.5:4*pi; y=sin(x); h=cos(x); w=1./(1+exp(-x)); g=(1/(2*pi*2)^0.5).*exp((-1.*(x-2*pi).^2)./(2*2^2)); plot(x,y,'bd-' ,x,h,'gp:',x,w,'ro-' ,x,g,'c^-'); % Draw multiple lines legend('sin(x)','cos(x)','Sigmoid','Gauss function'); % Add legend

Use title() and * label() to add a title and label to the picture

x = 0:0.1:2*pi; y1 = sin(x); y2 = exp(-x); plot(x, y1, '--*', x, y2, ':o'); xlabel('t = 0 to 2\pi'); ylabel('values of sin(t) and e^{-x}') title('Function Plots of sin(t) and e^{-x}'); legend('sin(t)','e^{-x}');

Use text() and annotation() to annotate the picture

x = linspace(0,3); y = x.^2.*sin(x); plot(x,y); line([2,2],[0,2^2*sin(2)]); str = '$$ \int_{0}^{2} x^2\sin(x) dx $$'; text(0.25,2.5,str,'Interpreter','latex'); annotation('arrow','X',[0.32,0.5],'Y',[0.6,0.4]);

### Control axes, borders and grids

command | effect |
---|---|

grid on/off | Set mesh visibility |

box on/off | Set border visibility |

axis on/off | Set axis visibility |

axis normal | Restore the default behavior and set the properties of frame aspect ratio mode and data aspect ratio mode to automatic |

axis square | Use coordinate axes of the same length to adjust the increment between data units accordingly |

axis equal | Use the same data unit length along each axis |

axis tight | Set the axis range to be equivalent to the data range, so that the axis frame closely surrounds the data |

The following example demonstrates the effect of the axis command:

t = 0:0.1:2*pi; x = 3*cos(t); y = sin(t); subplot(2, 2, 1); plot(x, y); axis normal subplot(2, 2, 2); plot(x, y); axis square subplot(2, 2, 3); plot(x, y); axis equal subplot(2, 2, 4); plot(x, y); axis equal tight

## Draw multiple lines

### Draw multiple lines on one image

By default, each execution of the plot() function will clear the result of the last drawing, and multiple executions of plot() will only retain the last drawing

We can use hold on and hold off commands to control the refresh of the drawing area, so that multiple drawing results can be retained in the drawing area at the same time

hold on % Lift the brush,Start drawing a set of pictures plot(cos(0:pi/20:2*pi)); plot(sin(0:pi/20:2*pi)); hold off % Put down the brush,The group of pictures has been drawn

### Draw multiple images in one window

subplot

## Operation of drawing objects

In MATLAB, graphics are stored in memory in the form of objects, which can be operated by obtaining their graphic handles

### Get graph handle

A graphics handle is essentially a floating point number that uniquely identifies a graphics object The following functions are used to get the graphics handle

Function | Purpose |
---|---|

gca() | Gets the handle of the current axis |

gcf() | Gets the handle of the current image |

allchild(handle_list) | Gets handles to all child objects of the object |

ancestor(h,type) | Gets the ancestor node of the object's nearest type |

delete(h) | Delete an object |

findall(handle_list) | Gets the descendants of the object |

All drawing functions also return a handle to the drawing object

### Manipulate drawing attributes through drawing handles

Use get() and set() functions to access and modify the properties of graphic objects visit Official documents You can view the properties of all drawing objects

- set(H,Name,Value)
- v = get(h,propertyName)

The following two examples demonstrate the use of graphic handles to manipulate graphic objects:

Change axis properties:

% First picture set(gca, 'FontSize', 25); % Second picture set(gca, 'XTick', 0:pi/2:2*pi); set(gca, 'XTickLabel', 0:90:360); % The third picture set(gca, 'FontName', 'symbol'); set(gca, 'XTickLabel', {'0', 'p/2', 'p', '3p/2', '2p'});

Change Linetype

h = plot(x,y); set(h, 'LineStyle','-.', ... 'LineWidth', 7.0, ... 'Color', 'g');

### Save drawing to file

Use the saveas(fig,filename) command to save graphic objects to a file, where fig is the graphic handle and filname is the file name

saveas(gcf, 'myfigure.png')

# Draw advanced charts

## Two dimensional chart

### Line chart

function | Graphic description |
---|---|

loglog() | Both x-axis and y-axis take logarithmic coordinates |

semilogx() | The x-axis takes logarithmic coordinates and the y-axis takes linear coordinates |

semilogy() | The x-axis takes linear coordinates and the y-axis takes logarithmic coordinates |

plotyy() | Linear coordinate system with two sets of y axes |

ploar() | Polar coordinate system |

#### Logarithmic coordinate system line

The following example demonstrates a logarithmic coordinate system line:

x = logspace(-1,1,100); y = x.^2; subplot(2,2,1); plot(x,y); title('Plot'); subplot(2,2,2); semilogx(x,y); title('Semilogx'); subplot(2,2,3); semilogy(x,y); title('Semilogy'); subplot(2,2,4); loglog(x, y); title('Loglog');

Logarithmic coordinate system can be added with grid to distinguish linear coordinate system from logarithmic coordinate system

set(gca, 'XGrid','on');

#### Double y-axis line

The return value of plotyy() is an array [ax,hlines1,hlines2], where:

- ax is a vector that holds handles to objects in two coordinate systems
- hlines1 and hlines2 are handles to two lines respectively

x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); [AX,H1,H2] = plotyy(x,y1,x,y2); set(get(AX(1),'Ylabel'),'String','Left Y-axis') set(get(AX(2),'Ylabel'),'String','Right Y-axis') title('Labeling plotyy'); set(H1,'LineStyle','--'); set(H2,'LineStyle',':');

### Statistical chart

function | Graphic description |
---|---|

hist() | histogram |

bar() | Two dimensional histogram |

pie() | Pie chart |

stairs() | Stairs |

stem() | Needle diagram |

#### histogram

#### Histogram

Use bar() and bar3() functions to draw two-dimensional and three-dimensional histograms respectively

x = [1 2 5 4 8]; y = [x;1:5]; subplot(1,3,1); bar(x); title('A bargraph of vector x'); subplot(1,3,2); bar(y); title('A bargraph of vector y'); subplot(1,3,3); bar3(y); title('A 3D bargraph');

hist is mainly used to view the frequency distribution of variables, while bar is mainly used to view the statistical results of discrete quantities

Using the barh() function, you can draw a histogram arranged vertically

x = [1 2 5 4 8]; y = [x;1:5]; barh(y); title('Horizontal');

Passing the 'stack' parameter to bar() allows the histogram to be drawn in the form of a stack

x = [1 2 5 4 8]; y = [x;1:5]; bar(y,'stacked'); title('Stacked');

#### Pie chart

pie() and pie3() can be used to draw 2D and 3D pie charts A bool vector is passed in to indicate whether each sector is offset

a = [10 5 20 30]; subplot(1,3,1); pie(a); subplot(1,3,2); pie(a, [0,0,0,1]); subplot(1,3,3); pie3(a, [0,0,0,1]);

#### Ladder and needle charts: drawing discrete digital sequences

The stairs() and stem() functions are used to draw a ladder graph and a needle graph, respectively, to represent discrete digital sequences

x = linspace(0, 4*pi, 40); y = sin(x); subplot(1,2,1); stairs(y); subplot(1,2,2); stem(y);

## Three dimensional chart

#### Convert 2D to 3D

In MATLAB, all graphs are three-dimensional graphs, and two-dimensional graphs are just a projection of three-dimensional graphs Click the Rotate 3D button in the graphics window to drag and drop the mouse to view the 3D view of the graphics

#### Convert 3D to 2D

Use the imagesc() function to convert a three-dimensional view into a two-dimensional top view, and indicate the height by the color of the point

[x, y] = meshgrid(-3:.2:3,-3:.2:3); z = x.^2 + x.*y + y.^2; subplot(1, 2, 1) surf(x, y, z); subplot(1, 2, 2) imagesc(z);

Use the colorbar command to add the legend of the corresponding relationship between color and height on the generated two-dimensional map, and use the colormap command to change the color scheme For details, please refer to Official documents

### Drawing of three-dimensional drawing

#### Preparation before drawing 3D drawing

- Using meshgrid() to generate 2D mesh

The meshgrid() function expands the two input vectors by corresponding rows and columns to obtain two augmented matrices. The binary function can be applied to the matrix

x = -2:1:2; y = -2:1:2; [X,Y] = meshgrid(x,y) Z = X.^2 + Y.^2

#### Draw 3D lines

Use the plot3() function to draw a three-dimensional surface. The input should be three vectors

x=0:0.1:3*pi; z1=sin(x); z2=sin(2.*x); z3=sin(3.*x); y1=zeros(size(x)); y3=ones(size(x)); y2=y3./2; plot3(x,y1,z1,'r',x,y2,z2,'b',x,y3,z3,'g'); grid on; xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');

#### Draw 3D faces

mesh() and surf() commands can be used to draw 3D faces. The former does not fill the mesh, while the latter does

x = -3.5:0.2:3.5; y = -3.5:0.2:3.5; [X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2); subplot(1,2,1); mesh(X,Y,Z); subplot(1,2,2); surf(X,Y,Z);

#### Draw contours of 3D graphics

contour() and contour() functions can be used to draw contour lines of 3D graphics. The former does not fill the mesh, while the latter does

The details of the image can be changed by passing parameters or manipulating the graphics handle to the contour() function:

x = -3.5:0.2:3.5; y = -3.5:0.2:3.5; [X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2); subplot(1,3,1); contour(Z,[-.45:.05:.45]); axis square; subplot(1,3,2); [C,h] = contour(Z); clabel(C,h); axis square; subplot(1,3,3); contourf(Z); axis square;

Using meshc() and surfc() functions, you can draw the contour lines of 3D graphics

x = -3.5:0.2:3.5; y = -3.5:0.2:3.5; [X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2); subplot(1,2,1); meshc(X,Y,Z); subplot(1,2,2); surfc(X,Y,Z);

#### Draw 3D volume

Use the patch() function to draw a three - dimensional volume

v = [0 0 0; 1 0 0 ; 1 1 0; 0 1 0; 0.25 0.25 1; 0.75 0.25 1; 0.75 0.75 1; 0.25 0.75 1]; f = [1 2 3 4; 5 6 7 8; 1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8]; subplot(1,2,1); patch('Vertices', v, 'Faces', f, 'FaceVertexCData', hsv(6), 'FaceColor', 'flat'); view(3); axis square tight; grid on; subplot(1,2,2); patch('Vertices', v, 'Faces', f, 'FaceVertexCData', hsv(8), 'FaceColor','interp'); view(3); axis square tight; grid on

### Perspective and lighting of three-dimensional drawings

#### Adjust Perspective

The view() function can be used to adjust the viewing angle. The view() function accepts two floating-point parameters, representing two azimuth azimuth and elevation

sphere(50); shading flat; material shiny; axis vis3d off; view(-45,20);

# Symbolic operation

## Create symbolic variable

### Create symbolic numbers

Use the sym function to create symbolic numbers Using symbolic numbers can accurately save irrational numbers without error

sym(1/3) % Get 1/3 1/3 % Get 0.3333

Saving irrational numbers as symbolic numbers can avoid the error of converting them to floating-point numbers:

sin(sym(pi)) % Get 0 sin(pi) % Get 1.2246e-16

### Create symbolic variable

sym and syms can be used to create symbolic variables. The difference is:

sym can only create one symbolic variable at a time, while syms can create multiple symbolic variables at a time

syms a % sym The command can only create one symbolic variable syms b c d % syms Command can create multiple symbolic variables

If the specified symbolic variable already exists, sym will not keep its original value, but syms will clear its value

syms x y f = x+y; % Implicitly create symbolic variables f sym f % Do not empty variables f Original value,Namely f = x + y

syms x y f = x+y; % Implicitly create symbolic variables f syms f % Empty variable f Original value,Namely f = f

Using sym, you can create a symbolic variable matrix

A = sym('a', [2 5]) % Create a 2*5 Symbolic variable matrix whos

The output is as follows:

A = [ a1_1, a1_2, a1_3, a1_4, a1_5] [ a2_1, a2_2, a2_3, a2_4, a2_5] Name Size Bytes Class Attributes A 2x5 112 sym

Using sym and syms together, you can quickly create a series of variables with subscripts

clear all syms(sym('a', [1 5])) whos

The output is as follows:

Name Size Bytes Class Attributes a1 1x1 8 sym a2 1x1 8 sym a3 1x1 8 sym a4 1x1 8 sym a5 1x1 8 sym

## Symbolic operation

### Simplification and substitution of symbolic expressions

#### Simplification of symbolic expressions

Use the simplify() function to simplify symbolic expressions

syms x a b c simplify(sin(x)^2 + cos(x)^2); % Get 1 simplify(exp(c*log(sqrt(a+b)))); % obtain (a + b)^(c/2)

The standard of expression simplification is uncertain. The following three functions simplify expressions according to different standards:

The expand() function expands the expression

syms x f = (x ^2- 1)*(x^4 + x^3 + x^2 + x + 1)*(x^4 - x^3 + x^2 - x + 1); expand(f); % obtain x^10 - 1

The factor() function can decompose a factor

syms x g = x^3 + 6*x^2 + 11*x + 6; factor(g); % obtain (x + 3)*(x + 2)*(x + 1)

The horner() function can change polynomials into nested forms

syms x h = x^5 + x^4 + x^3 + x^2 + x; horner(h); % obtain x*(x*(x*(x*(x + 1) + 1) + 1) + 1)

#### Substitution of symbolic expressions

Use the sub(expr, old, new) function to replace old in the symbolic expression expr with new

syms x y f = x^2*y + 5*x*sqrt(y); subs(f, x, 3); % Get 9*y + 15*y^(1/2)

### Find the analytical solution of the equation

Using solve(eqn,var) and solve(eqns,vars), the analytical solution of the equation can be obtained

#### Univariate solution of equation

Define an equation with = = and call the solve function to solve it (if the value to the right of the = = symbol is not specified, the default value to the right of the equation is 0.)

syms x eqn = x^3 - 6*x^2 == 6 - 11*x; solve(eqn); % obtain [1 2 3]

#### Solving multivariable equations

For multivariable equations, we need to specify which variable to solve

syms x y eqn = [6*x^2 - 6*x^2*y + x*y^2 - x*y + y^3 - y^2 == 0]; solve(eqn, y); % obtain [1, 2*x, -3*x]

#### Solving equations

The equations can be solved by passing the equations into the solve() function

syms u v eqns = [2*u + v == 0, u - v == 1]; S = solve(eqns,[u v]);

The solution of the equation can be indexed by variable name and can be substituted into other expressions

S.u; % Get 1/3 S.v; % obtain -2/3 subs(3*v + u, S); % obtain -3/5

### Symbolic calculus

#### Find the limit

Use the limit(expr, var, a) function to find the limit of the symbolic expression expr when the variable var approaches A. add the parameter 'left' or 'right' to specify the left limit or right limit

syms x; expr = 1/x; limit(expr,x,0); % obtain NaN limit(expr,x,0,'left'); % obtain-Inf limit(expr,x,0,'right'); % obtain Inf

#### differential

Using diff(expr, var, n) function, the n-order differential of symbolic expression expr to variable var can be obtained

syms a b c x; expr = a*x^2 + b*x + c; diff(expr, a); % obtain x^2 diff(expr, b); % obtain x diff(expr, x); % obtain b + 2*a*x diff(expr, x, 2); % Get 2*a

#### integral

Using the int(expr, var) function, the indefinite integral of the symbolic expression expr to the variable var can be obtained Use the int(expr, var, [a, b]) function to specify the upper and lower limits for definite integral. A and B can be symbolic expressions

syms x a b expr = -2*x/(1+x^2)^2; int(expr, x); % Get 1/(x^2 + 1) int(expr, x, [1, 2]); % obtain -0.3 int(expr, x, [1, Inf]); % obtain -0.5 int(expr, x, [a, b]); % Get 1/(b^2 + 1) - 1/(a^2 + 1)

For some functions, MATLAB can't find their integral. At this time, MATLAB will return an unresolved integral form

syms x int(sin(sinh(x))); % An integral without solution,MATLAB return int(sin(sinh(x)),

#### Summation of series

Use symsum (expr, K, [a, b]) to calculate the sum of index k of series expr from a to B

syms k x symsum(k^2, k) % obtain k^3/3 - k^2/2 + k/6 symsum(k^2, k, [0 10]) % Get 385 symsum(x^k/factorial(k),k,1,Inf) % obtain exp(x) - 1

#### Taylor expansion

Use taylor(expr,var,a) to calculate the Taylor series of the expression expr at var=a

syms x taylor(exp(x)) % obtain x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1 taylor(sin(x)) % obtain x^5/120 - x^3/6 + x taylor(cos(x)) % obtain x^4/24 - x^2/2 + 1

## Draw image

You can draw images for symbolic expressions. The common drawing functions are as follows:

function | effect |
---|---|

fplot() | Draws a 2D line image of a symbolic expression |

fplot3() | Draws a 3D line image of a symbolic expression |

ezpolar() | Draw a polar marking image of a symbolic expression |

fmesh() | Draw mesh face image |

fsurf() | Draw a colored face image |

fcontour() | Draw contour image |

fimplicit() | Draw an image of implicit functional relationship |

The following example shows the drawing of two-dimensional and three-dimensional line images

subplot(1, 2, 1) syms x f = x^3 - 6*x^2 + 11*x - 6; fplot(f, x) subplot(1, 2, 2) syms t fplot3(t^2*sin(10*t), t^2*cos(10*t), t)

The following example demonstrates the rendering of 3D faces

syms x y fsurf(x^2 + y^2)

The following example demonstrates the drawing of implicit function relation image

syms x y eqn = (x^2 + y^2)^4 == (x^2 - y^2)^2; fimplicit(eqn, [-1 1])

# numerical calculation

## Numerical operation of polynomials

### Polynomial representation using MATLAB

#### Using vectors to represent polynomials

In MATLAB, polynomials can be represented by vectors. The elements in the vector are the coefficients of polynomials (descending order): the first is the coefficient of the highest order term of polynomials, and the last is the constant term

For example, polynomial: f(x) = x^3 - 2x - 5f(x)=x3−2x−5

It can be represented by vector p = [1 0 -2 -5]

#### Polynomial evaluation: polyval()

polyval(p, x) can be used to calculate the value of polynomial p at each point of X

a = [9,-5,3,7]; x = -2:0.01:5; f = polyval(a,x); plot(x,f);

#### Multiplication of Polynomials: conv()

Using conv(p1, p2) function, two vectors p1 and p2 can be convoluted and multiplied to calculate the multiplication of polynomials

For example, polynomial: f(x) = (x^2+1) (2x+7)f(x)=(x2+1)(2x+7)

The expanded polynomial can be obtained by using the conv() function:

p = conv([1 0 1], [2 7])

Get p = [2 7 2 7]

### Numerical operation of polynomials

#### Factorization of Polynomials: roots()

The roots(p) function can be used to factorize the polynomial p, that is, to find the root of the expression value of 0

p = roots([1 -3.5 2.75 2.125 -3.875 1.25])

Get p = [2 -1, 1+0.5i, 1-0.5i, 0.5], representing x^5 -3.5 x^4 +2.75 x^3 + 2.125 x^2 + -3.875 x+1.25 = (x-2)(x+1)(x-1-0.5i)(x-1+0.5i)(x-0.5)x5 − 3.5x4+2.75x3+2.125x2 + − 3.875x+1.25=(x − 2)(x+1)(x − 1 − 0.5i)(x − 1+0.5i)(x − 0.5)

#### Differential of Polynomials: polyder()

The derivative of polynomial can be calculated by using polyder(p) function

For example, take the derivative of the following polynomial: f(x) = 5x^4 - 2x^2 + 1f(x)=5x4−2x2+1

p = polyder([5 0 -2 0 1]);

Get P = [200 - 40], which means that the derivative f '(x) = 20 x^3 - 4xf' (x)=20x3 − 4x

#### Integral of polynomial: polynomial ()

The polynomial (p, k) function can be used to calculate the integral of polynomial p, and the constant term of the integral result is set to k

For example, take the derivative of the following polynomial: f(x) = 5x^4 - 2x^2 + 1f(x)=5x4−2x2+1

p = polyint([5 0 -2 0 1], 3)

Get p = [1 0 -0.6667 0 1 3], which means the calculated integral \ int f(x) dx = x^5 -0.6667x^3 + x + 3 ∫ f(x)dx=x5 − 0.6667x3+x+3

## Numerical operation of nonlinear expression

### Root finding of equation (system) (fsolve)

Use fsolve(fun, x0) to find the root of nonlinear equations. Fun is the function handle of the equation to be solved, and x0 is the initial value

Find the solution of equation 1.2x+x\sin(x)+0.3=01.2x+xsin(x)+0.3=0 near x=0x=0

f2 = @(x) (1.2*x+x*sin(x)+0.3); fsolve(f2,0) % obtain -0.3500

Solving equations \begin{aligned} \left\{ \begin{aligned} e^{-e^{-(x_1+x_2)}} - x_2(1+x_1^2) = 0 \\ x_1 \cos x_2 + x_2 \sin x_1 - \frac{1}{2} = 0 \end{aligned} \right. \end{aligned}⎩⎪⎨⎪⎧e−e−(x1+x2)−x2(1+x12)=0x1cosx2+x2sinx1−21=0

Set the initial value as [0, 0] [0,0]

fun = @(x) [exp(-exp(-(x(1)+x(2))))-x(2)*(1+x(1)^2)... x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5] x0 = [0,0]; x = fsolve(fun,x0) % obtain[0.3532 0.6061]

### Numerical differentiation

#### Difference: diff()

Use diff(X, n) to calculate the n-order difference of vector X, and N defaults to 1

x = [1 2 5 2 1]; diff(x); % obtain [1 3 -3 -1] diff(x,1); % obtain [1 3 -3 -1] diff(x,2); % obtain [2 -6 2]

#### Derivative: diff (y)/ diff(x)

Use the definition of derivative

You can calculate the approximate derivative of a function at a certain point

The following program calculates the values of the first and second derivatives of f(x) = x^3f(x)=x3

x = -2:0.005:2; y = x.^3; m = diff(y)./diff(x); % Calculate the first derivative m2 = diff(m)./diff(x(1:end-1)); % Calculate the second derivative plot(x,y,x(1:end-1),m,x(1:end-2),m2); xlabel('x'); ylabel('y'); legend('f(x) =x^3','f''(x)','f''''(x)', 4);

### numerical integration

#### Numerical integration principle

There are three common algorithms used to calculate numerical integration: rectangular method, trapezoidal method and parabola method. They treat the graphics of differential interval as rectangle, trapezoid and parabola respectively to calculate the area

The following three methods are used to calculate the integral of f(x) = 4x^3f(x)=4x3 in the interval (0,2) (0,2)

h = 0.05; x = 0:h:2; % Use the rectangular method to calculate the approximate integral midpoint = (x(1:end-1)+x(2:end))./2; y = 4*midpoint.^3; s = sum(h*y) % Get 15.9950 % The trapezoidal method is used to calculate the approximate integral trapezoid = (y(1:end-1)+y(2:end))/2; s = h*sum(trapezoid) % Get 15.2246 % Numerical integration using parabolic method s = h/3*(y(1)+2*sum(y(3:2:end-2))+4*sum(y(2:2:end))+y(end)) % Get 15.8240

#### Numerical integration function: integral()

integral(),integral2(),integral3() perform single, double and triple integrals of the function from xmin to xmax respectively

Their first parameter should be a function handle. The following example demonstrates their usage:

Calculate \ int_0^2 \frac{1}{x^3-2x-5}∫02x3−2x−51

f = @(x) 1./(x.^3-2*x-5); integral(f,0,2) % obtain -0.4605

Calculate \ int_0^\pi \int_\pi^{2\pi} (y\sin(x) + x \cos(y)) dx dy∫0π∫π2π(ysin(x)+xcos(y))dxdy

f = @(x,y) y.*sin(x)+x.*cos(y); integral2(f,pi,2*pi,0,pi) % obtain -9.8696

Calculate \ int_{-1}^1 \int_0^1 \int_0^\pi (y\sin(x) + z \cos(y)) dx dy dz∫−11∫01∫0π(ysin(x)+zcos(y))dxdydz

f = @(x,y,z) y.*sin(x)+z.*cos(y); integral3(f,0,pi,0,1,-1,1)

# Statistics and fitting

## Statistics

### Descriptive statistics

Descriptive statistics mainly studies the central tendency and Variation of data

#### Central trend

function | effect |
---|---|

mean() | Calculate average |

median() | Calculate median |

mode() | Calculate mode |

prctile(X,num) | What is the num% quantile of data X |

max() | Calculate maximum |

min() | Calculate minimum |

The following functions plot statistical charts:

function | effect |
---|---|

bar() | Draw bar chart |

stem() | Draw a needle chart |

area() | Draw fill map |

boxplot() | Draw box diagram |

x = 1:14; freqy = [1 0 1 0 4 0 1 0 3 1 0 0 1 1]; subplot(1,3,1); bar(x,freqy); xlim([0 15]); subplot(1,3,2); area(x,freqy); xlim([0 15]); subplot(1,3,3); stem(x,freqy); xlim([0 15]);

The box chart can highlight the quartile of the data

marks = [80 81 81 84 88 92 92 94 96 97]; boxplot(marks) % prctile(marks, [25 50 75]) % obtain [81 90 94]

#### Variation

##### Degree of dispersion

function | effect |
---|---|

std() | Standard deviation of calculated data |

var() | Calculate the variance of the data |

##### Skewness

function | effect |
---|---|

skewness() | Calculate the skewness of the data |

Skewness reflects the degree of symmetry of data

- When the data is biased to the left, its skewness is less than 0
- When the data is completely symmetrical, its skewness is equal to 0
- When the data is biased to the right, its skewness is greater than 0

X = randn([10 3]); % Structure 10*3 Matrix of X(X(:,1)<0, 1) = 0; % Skew the first column of data to the right X(X(:,3)>0, 3) = 0; % Shift the second column of data to the left boxplot(X, {'Right-skewed', 'Symmetric', 'Left-skewed'}); skewness(X); % obtain [0.5162 -0.7539 -1.1234]

##### Kurtosis

function | effect |
---|---|

kurtosis() | Calculate the kurtosis of the data |

Kurtosis represents the peak value of probability density distribution curve at the average value Intuitively, kurtosis reflects the sharpness of the peak

### Statistical inference

The core of inferential statistics is hypothesis testing The following functions are used for hypothesis testing

function | effect |
---|---|

ttest() | Conduct T-test |

ztest() | Perform Z-test |

ranksum() | Rank sum test |

signrank() | Sign rank test |

load examgrades x = grades(:,1); y = grades(:,2); [h,p] = ttest(x,y);

Executing the above procedure, we get [H P] = [0.9805], which means that we have no reason to refuse the same distribution of x and y under the default significance level (5%)

## fitting

### Polynomial fitting

#### Univariate polynomial fitting: polyfit()

The polyfit(x, y, n) function is used to fit the data X and Y polynomially

x = [-1.2 -0.5 0.3 0.9 1.8 2.6 3.0 3.5]; y = [-15.6 -8.5 2.2 4.5 6.6 8.2 8.9 10.0]; for i = 1:3 % Once respectively,secondary,Cubic fitting p = polyfit(x, y, i); xfit = x(1):0.1:x(end); yfit = polyval(p, xfit); subplot(1, 3, i); plot(x, y, 'ro', xfit, yfit); legend('Data points', 'Fitted curve', 'Location', 'southeast'); end

#### Multivariate linear fitting: regress()

Multiple linear regression is performed on data X and y using the register (y, x) function

load carsmall; y = MPG; x1 = Weight; x2 = Horsepower; % Import dataset X = [ones(length(x1),1) x1 x2]; % Build and expand X matrix b = regress(y,X); % Linear regression % The following is the drawing statement x1fit = min(x1):100:max(x1); x2fit = min(x2):10:max(x2); [X1FIT,X2FIT] = meshgrid(x1fit,x2fit); YFIT = b(1)+b(2)*X1FIT+b(3)*X2FIT; scatter3(x1,x2,y,'filled'); hold on; mesh(X1FIT,X2FIT,YFIT); hold off; xlabel('Weight'); ylabel('Horsepower'); zlabel('MPG'); view(50,10);

### Nonlinear fitting

For nonlinear fitting, curve fitting toolbox is needed Enter cftool() in the command window to open the curve fitting toolbox

## interpolation

### One dimensional interpolation

function | effect |
---|---|

interp1(x,v) or interp1(x,v,xq) | linear interpolation |

spline(x,v) or spline(x,v,xq) | Cubic spline interpolation |

pchip(x,v) or pchip(x,v,xq) | Cubic Hermite interpolation |

mkpp(breaks,coefs) | Generating piecewise polynomials |

ppval(pp,xq) | Calculate the interpolation results of piecewise polynomials |

The following examples demonstrate linear interpolation using interp1(x, v, xq) and cubic spline interpolation using spline(x, v, xq) The meaning of each parameter is as follows:

- x. V: sample points to be interpolated
- xq: query points. The function returns the interpolation results at these points

% Construction data x = linspace(0, 2*pi, 40); x_m = x; x_m([11:13, 28:30]) = NaN; y_m = sin(x_m); plot(x_m, y_m, 'ro', 'MarkerFaceColor', 'r'); hold on; % Linear interpolation of data m_i = ~isnan(x_m); y_i = interp1(x_m(m_i), y_m(m_i), x); plot(x,y_i, '-b'); hold on; % Cubic spline interpolation for data m_i = ~isnan(x_m); y_i = spline(x_m(m_i), y_m(m_i), x); plot(x,y_i, '-g'); legend('Original', 'Linear', 'Spline');

### Two dimensional interpolation

interp2() can be used for two-dimensional interpolation, and the interpolation algorithm can be specified by passing a string to its method parameter

method | explain | Continuity |
---|---|---|

'linear' | (default) the value inserted at the query point is based on the linear interpolation of the value at the grid point of the adjacent point in each dimension | C0 |

'spline' | The value inserted in the query point is based on the cubic interpolation of the value at the grid point of the adjacent point in each dimension Interpolation is based on cubic splines using non knot termination conditions | C2 |

'nearest' | The value inserted at the query point is the value closest to the sample grid point | Discontinuity |

'cubic' | The value inserted in the query point is based on the cubic interpolation of the value at the grid point of the adjacent point in each dimension Interpolation is based on cubic convolution | C1 |

'makima' | Modified Akima cubic Hermite interpolation The value inserted in the query point is based on the piecewise function of the polynomial with the largest degree of 3, which is calculated by using the values of adjacent grid points in each dimension To prevent overshoot, Akima formula has been improved | C1 |

% Build sample points xx = -2:.5:2; yy = -2:.5:3; [x,y] = meshgrid(xx,yy); xx_i = -2:.1:2; yy_i = -2:.1:3; [x_i,y_i] = meshgrid(xx_i,yy_i); z = x.*exp(-x.^2-y.^2); % linear interpolation subplot(1, 2, 1); z_i = interp2(xx,yy,z,x_i,y_i); surf(x_i,y_i,z_i); hold on; plot3(x,y,z+0.01,'ok','MarkerFaceColor','r'); hold on; % Cubic interpolation subplot(1, 2, 2); z_ic = interp2(xx,yy,z,x_i,y_i, 'spline'); surf(x_i,y_i,z_ic); hold on; plot3(x,y,z+0.01,'ok','MarkerFaceColor','r'); hold on;