matlab基础向1-6:基础语法

1.软件中如何运行代码?

命令行直接写代码,回车执行,也可以在文件里编写代码,比如有文件hello.m,点击“Run”直接运行或者在命令行窗口里输入“hello+回车”运行。

 

2.清空命令行

clc+回车

 

3.数据类型

没有数据类型,也不需要声明变量,直接赋值,在赋值的时候就定义了。比如:

a=10;
fprintf('a = %d\n',a);
b=15.12600;
fprintf( 'b = %g, b = %f, b = %.2f\n',b,b,b);
disp(a);
disp(b);
disp('hello');
c=10
d=11.2
e=16.78888

输出:

a = 10
b = 15.126, b = 15.126000, b = 15.13
10

15.1260

hello

c = 

    10

d = 

    11.2000

e = 

    16.7889

由此推测:%d是整型,%g是去掉多余的0,%f是输出6位小数,%.2f是四舍五入保留2位小数。disp()类似C语言的puts(),如果是输出小数disp()默认保留4位小数,有换行功能。如果语句后面不加分号,会默认输出这个变量。如果是小数,默认四舍五入保留4位小数,不会去掉尾部0。

测试大数:

f=123456789
g=1234567891
h=1234567899876543211
i=9223372036854775807%longlong范围
fprintf('f=%d\n',f);
fprintf('g=%d\n',g);
fprintf('h=%d\n',h);
fprintf('i=%d\n',i);
disp(f);
disp(g);
disp(h);
disp(i);

输出:

f =

123456789

g =

1.2346e+09

h =

9.1235e+18

i =

9.2234e+18

f=123456789
g=1234567891
h=1234567899876543211
i=9.223372e+18
123456789

1.2346e+09

9.1235e+18

9.2234e+18

由此推测:对于整数,disp只能精确输出9位,有十位数 就用四位小数的科学计数法表示,fprintf可以精确表示到17位数,19位数有个分界值,往前可以表示出19位,往后只能用科学计数法表示。但是用19位数表示时个位和十位不准确。

 

5.输入语法

a = input('please input a:');
b = input('');
disp(a);
disp(b);

input语法,不能输入字符型,并且括号内必须要有单引号。

 

6.次方和对数

5^3表示5的3次方

log(32)默认表示底数是e,log2(32)表示底数是2,log10(100)表示底数是10,必须要加括号,不能是其他底数,2和10前不能有空格。

如果想表示别的底数,用换底公式。loga(b) = ( log (b) ) / ( log (a) )

 

7.向量vector(数组)

比如x=[ 1,2,3 ];或者x=[1 2 3];//空格或者分号都可以,维度相同才能相加减。

二维向量/矩阵不同行用分号隔开

a=[ 1,2;3 4];

b=[ 5 6;7 8];

a*b:前者行*后者列。(要求:前者行 = 后者列)

a.*b:对应相乘。(要求维度相同)

 

8.自带求和函数

sum(a);

a表示数组名,一维直接求和,二维竖着求和。

 

a=[1 2 3 4];
b=[11  100; 9  2];
c=[1000 1000];
sum(a);
sum(b);
c+sum(a)
c+sum(b)

 

输出:

1010 1010

1020 1102

 

 

9.单行注释

% a=15;

 

10.while循环

 

t=3
while t>0
    fprintf('hello\n');
    t=t-1;
end

 

相比C语言

没有大括号,结尾有个end,不需要加分号。

循环条件没有小括号。

没有t--。

没有t-=1。

 

 

11.for循环

 

for i=1:1:5  %等于 i=1:5
    fprintf('i=%d hello\n',i);
end
for i=5:-1:1
    fprintf('i=%d facai\n',i);
end

 

循环变量起始值:每次加的值:小于等于的数

相当于C语言的for(int i=1;i<=5;i++)

注意matlab中间是冒号隔开。养成良好习惯,中间默认的1最好写上。

 

 

12.if语句

 

for i=1:1:3
    if i==1
        fprintf('facai111\n');
    elseif i==3
        fprintf('facai333\n');
    else
        fprintf('facai222\n');
    end
end

 

没有大括号,并且else的执行语句后需要加一个end,elseif之间没有空格。

 

13.不等于

i~=0

 

14.取模(mod)和取余(rem)

 

mod(13,4) = 1
rem(13,4) = 1

mod(-13,-4) = -1
rem(-13,-4) = -1

mod(-13,4) = 3
rem(-13,4) = -1
mod(13,-4) = -3
rem(13,-4) = 1

个人推测:

前四条可以默认是常规操作,参数两个都是负数则结果也变为负数。看着像是C语言的%

其他的可以这样表示: 被除数 = 除数*k  +  ans

通过调整k使得除数*k更大或者更小

mod(-13,4) = 3

负数 = 更小 + ans  -13 = 4*(-4) + 3
rem(-13,4) = -1   

负数 = 更大 + ans  -13 = 4*(-3) + (-1)
mod(13,-4) = -3

正数 = 更大 + ans   13 = (-4)*(-4) + (-3)
rem(13,-4) = 1

正数 = 更小 + ans   13 = (-4)*(-3) + 1

 

15.自写函数

模板:

function 返回值名 = 自写函数名(参数) 

  正文

  返回值名;%如果没有可以不写

end

如果没有返回值或者参数,则是:

function 自写函数名()

  正文

end

可以在命令行里直接调用自写函数,自写函数的文件名最好和自写函数名一样,如果有两个相同的自写函数,系统默认调用先保存的。同一个文件夹里的自写函数直接调用,不需要声明啥的。

 

16.continue和break

作用和C语言一样,记得加end。

 

17.corr(求相关系数矩阵)

求矩阵的相关系数,比如矩阵A是35行8列的矩阵,每一列是一种指标,求指标之间的相关系数矩阵,则用X=corr(A);X是8行8列的矩阵,斜对称并且对称轴X(i,i)=1;

posted @ 2019-07-16 01:26  守林鸟  阅读(871)  评论(0编辑  收藏  举报