0%

Python零散知识

range范围问题

  • range(1,10):包含1,但是不包含10

算术运算

指数 **
取整 //

sys.exit()

使用sys.exit()可以提前结束程序,使用时先导入sys

None

与java中null相对应的是none

print

print的返回值是None

print默认换行,想要不换行。使用如下:
print(‘不换行’.end=’’)

类似地,使用sep关键字参数,可以替换默认的分割字符串(空格)

global

Python中可以使用global声明一个全局变量

异常处理

错误可以由try和except语句来处理。那些可能出错的语句被放在try子句中。如果发生错误,程序执行就转到接下来的except子句开始处。

需要注意的是
,一旦执行跳到except子句的代码,就不会回到try子句。它会继续照常向下执行。

列表

列表是一个值,它包含多个字构成的序列。术语“列表”指的是列表本身(它作为一个值,可以保存在变量中,或者传递给函数,而不是指列表之内的那些值)

  • 切片
    包含第一个下标但是不包括第二个下标

  • 列表连接和复制
    像字符串一样,+用于列表连接,*用于列表复制

  • del语句用于删除

  • 多重赋值技巧
    -w661

  • 用index()方法在列表中查找值
    返回下标

  • append和insert
    前者将值添加到末尾,insert添加到指定位置

  • remove方法从列表中删除值
    如果该值在列表中出现多次,只删除第一次出现的值

  • 逆向排序
    spam.sort(reverse=True)
    其中spam是一个列表

注意
不能对既有数字又有字符串值的列表排序

sort方法对字符串排序是,使用的是“ASCII”字符顺序

  • 列表和字符串的区别
    列表是可变的,字符串是不可变的。

    元组和列表的区别

    元组符号: ()
    元组也是不可变的。
    元组不能让他的值被修改、添加和删除

注意
如果元组中只有一个值,你可以在括号内该值后面跟上一个逗号,表明这种情况,否则,Python会认为你只是在一个普通括号内输入了一个值

受用list()和tuple()函数来转换类型

前者是列表,后者是元组

列表的引用

-w623

续行符 ‘\’

在行末使用\可以将一条指令写成多行

矩阵的分析与处理

矩阵的行列式

在Matlab中,求方阵A的行列式值的函数是det函数;
调用格式:
B=det(A)
(其中A是矩阵,B是行列式值的结果)

矩阵的秩与迹

矩阵的秩

B=rank(A)

矩阵的迹

B=trace(A)

矩阵的逆与伪逆

矩阵的逆

B=inv(A)

矩阵的伪逆

B=pinv(A)

  • 说明:如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆 矩阵,但可以找到一个与A的转置矩阵A T 同型的矩阵B,使得 AꞏBꞏA=A BꞏAꞏB=B
    此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。

线性方程的求解

看图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
% Test 1
% (1)生成一个空矩阵A
A = []
% 对A进行赋值,取值为5行5列的单位矩阵
A = eye(5)
% 将矩阵A存储在硬盘上的Matlab数据文件A.mat中
save A.mat A

%(2) 利用函数xlsread读取硬盘上电子表格
% data.xls中的第一个工作表区域中
% A2:C5的区域的数据(自行敲入),并赋值给矩阵
% B,然后利用命令保存矩阵B到硬盘上的B.mat文件中。

B =xlsread('data1.xlsx', 1, 'A2:C5')
save B.mat B

% (3) 利用load实现将数据文件A.mat 和 B.mat
% 载入到内存中,然后将A、B两个变量保存到MATLAB数据文件AB.mat中
load A.mat
load B.mat
save AB.mat A B
  • Test 3

    • 将大些字母转换为小写的两种方法
      1
      2
      3
      4
      5
      6
      7
      8
      9
      % 创建由数值和大小写字母构成的字符
      str = 'gfAFHSKFHsag354346'
      % 将大写字母转换为小写字母
      str = lower(str) % first

      % second
      % upper = find(str >='A' & str <= 'Z');
      % str(upper) = str(upper) + 32;
      % new = char(str)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      % 创建由数值和大小写字母构成的字符
      str = 'gfAFHSKFHsag354346'
      % 将大写字母转换为小写字母
      str = lower(str)

      upper = find(str >='0' & str <= '9');
      str(upper) = 0;
      str = char(str);
      % 去掉尾部的空格
      str = deblank(str)

      % 在str的前面添加'New strings: '形成一个新的字符串
      add = 'New strings: ';
      newStr = ([add, str])
      % 统计字符串的字符数
      strSize = size(newStr)
  • Test 4

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    % 1 结构数组
    course=struct('courseName',{'Matlab程序设计','Java程序设计','线性代数','高等数学','大学物理'},'score',{2,2,2,2,2},'degreeOfDifficulty',{'difficult','difficult','difficult','medium','difficult'})
    % 新添教师姓名
    course(1).teacherName = '肖老师';
    course(2).teacherName = '龙老师';
    course(3).teacherName = '全老师';
    course(4).teacherName = '宋老师';
    course(5).teacherName = '王老师';
    % 显示course
    course
    % 删除难易信息
    course(1).degreeOfDifficulty = [];
    course(2).degreeOfDifficulty = [];
    course(3).degreeOfDifficulty = [];
    course(4).degreeOfDifficulty = [];
    course(5).degreeOfDifficulty = [];
    % 显示course
    course

    % 2 创建元胞数组

    course=cell(6,3);
    % 设置第一栏
    course(1,1)={'courseName'};
    course(1,2)={'score'};
    course(1,3)={'degreeOfDifficulty'};

    % 填写courseName信息
    course(2,1)={'Matlab程序设计'};
    course(3,1)={'Java程序设计'};
    course(4,1)={'线性代数'};
    course(5,1)={'高等数学'};
    course(6,1)={'大学物理'};

    % 填写score信息
    course(2,2)={2};
    course(3,2)={2};
    course(4,2)={2};
    course(5,2)={2};
    course(6,2)={2};

    % 填写degreeOfDifficulty信息
    course(2,3)={'difficult'};
    course(3,3)={'difficult'};
    course(4,3)={'difficult'};
    course(5,3)={'medium'};
    course(6,3)={'difficult'};

    % 添加第四个信息教师姓名
    course(1,4)={'teacherName'};
    course(2,4) = {'肖老师'};
    course(3,4)={'龙老师'};
    course(4,4)={'全老师'};
    course(5,4)={'宋老师'};
    course(6,4)={'王老师'};

    % 删除难易程度信息
    course(1,3)={[]};
    course(2,3)={[]};
    course(3,3)={[]};
    course(4,3)={[]};
    course(5,3)={[]};
    course(6,3)={[]};

    % 显示course
    course
  • Test 5

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    % 创建系数矩阵
    numbers=[1 -1 1;2 1 1;1 -1 -2];

    % 行列式
    A=det(numbers)

    % 迹
    B=trace(numbers)

    % 秩
    C=rank(numbers)

    % 逆
    D=inv(numbers)

    % 求解方程组
    b=[1 2 4];
    x=inv(A)*b
  • Test 6

    1
    2
    3
    4
    5
    6
    % Test 6
    A = [-10000:10000];
    num=find(A>1000 & mod(A,17)==0);
    Size=size(A(num))
    All=A(num);
    B=All(end-9:end)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
% 简答与编程三 数据可视化
% Test 1
% 分别绘图
% sin(x)
x1=linspace(0,4*pi,2000);
plot(x1,sin(x1))

% cos(x)
x2=linspace(-pi,3*pi,2000);
plot(x2,cos(x2))

% tan(x)
x3=linspace(0,4*pi,2000);
plot(x3,tan(x3))

% 绘制在一幅图中
subplot(131);
plot(x1,sin(x1))
subplot(132);
plot(x2,cos(x2))
subplot(133);
plot(x3,tan(x3))



% Test 2
% sin(x)
x1=linspace(0,4*pi,2000);
plot(x1,sin(x1),'k')
axis auto;
hold on;

% cos(x)
x2=linspace(-pi,3*pi,2000);
plot(x2,cos(x2),'--g*','linewidth',3)
hold on;

% tan(x)
x3=linspace(0,4*pi,2000);
plot(x3,tan(x3),'-.ro','linewidth',2);

% 图例标注
legend('sin(x)','cos(x)','tan(x)','4');

% Test3
x=linspace(-3,3,49);
y=linspace(-3,3,49);
[xx,yy]=meshgrid(x,y); %确定作图的范围
zz=xx.^2/8-yy.^2/3;

% 使用mesh函数
mesh(xx,yy,zz)

% 使用surf函数
surf(xx,yy,zz)


% Test4

% sin(x)
x1=linspace(0,4*pi,2000);
p1=plot(x1,sin(x1));
hold on;
% cos(x)
x2=linspace(-pi,3*pi,2000);
p2=plot(x2,cos(x2));

% 获取图形句柄并修改曲线属性
h1=findobj(p1);
set(h1,'color','r')
set(h1,'linewidth',2)
h2=findobj(p2);
set(h2,'color','g','linestyle','--')

% 简答与编程五 程序设计
% Test 01
% swith
score1 = input('Please enter your score1:');
switch score1
case num2cell(90:100)
disp('A')
case num2cell(80:89)
disp('B')
case num2cell(70:79)
disp('C')
case num2cell(60:69)
disp('D')
case num2cell(0:59)
disp('E')
otherwise
error('Inputting Error!')
end


% if
score2 = input('Please enter your score2:');
if (score2 >= 90 & score2 <= 100)
disp('A')
elseif (score2 >= 80 & score2 <= 89)
disp('B')
elseif (score2 >= 70 & score2 <= 79)
disp('C')
elseif (score2 >= 60 & score2 <= 69)
disp('D')
elseif (score2 >= 0 & score2 <= 59)
disp('E')
else
error('Inputting Error!')
end

% Test 02
% 数值计算:计算出0-1000之间所有是4的倍数的整数的和
% for循环
s1=0;
for i = 0:4:1000
s1=s1+i;

end
s1

% while 循环
num=0;
s2=0;
while num<=1000
s2=s2+num;
num=num+4;
end
s2
% 不使用循环语句
s3=sum(0:4:1000)
% 显然s1,s2,s3的值都是相等的

% 符号计算
% 计算出 1+1/2^2+1/3^2+...+1/k^2+...的前10项和

% for 循环
s4=0;
for j = 1:10
s4=s4+1/j^2;
end
s4
% while 循环
s5 = 0;
num1=1;
while num1<=10
s5=s5+1/num1^2;
num1=num1+1;
end
s5
% 不使用循环语句
syms k
s6=symsum(1/k^2,1,10)

% Test 02'!!!!
% for 循环
s1= 0;
for i = 0:10000001;
s1=s1+0.2^i;

end
s1

% while循环
num=0;
s2=0;
while num<=1000000
s2=s2+0.2^num;
num=num+1;
end
s2

% 很显然s1和s2是相等的。

% Test 03
function [] = Test(varargin)
% Test 给定不同的输入绘画出不同的图形
% 当没有输入量时,画出单位圆
% 当输入量是大于2的整数N时,绘制正N边形并在图片名中反映显示多边形的真实边数
% 当输入量是"非自然数数"时,给出"出错提示"。
% Author:雷博闻
% Time: 2020/03/25
if nargin == 0
angle=0:pi/360:2*pi;
figure(1);
plot(1*sin(angle),1*cos(angle));
axis tight
axis equal

elseif nargin ==1
a = varargin{1};
if a > 2 & rem(a,1)==0
pgon=nsidedpoly(a);
figure(1);
plot(pgon)
title(['正',num2str(a),'边形'])
axis equal
axis tight

elseif a<0 | (a>=0 & rem(a,1)~=0)
error('请输入一个自然数!')
else
error('超出范围')
end

end

% Test 04
n=[2:100];
number=0;
tem=0;
sum=0;
for i=1:length(n)-1
tem=n(i)*n(i+1)-1;
for j=2:floor(tem/2)
if rem(tem,j)~=0
if j==floor(tem/2)
disp([num2str(n(i)),'和',num2str(n(i + 1)),'是一对亲密数'])
number=number+1;
sum=sum+tem;
end
else
break;
end
end
end

number
sum

% 简答与编程5 数值计算
% Test1
function [] =Test
A = [27 6 -1;6 15 2;1 1 54];
b = [85;5;110];

% LU 分解法
[L,U] = lu(A);
X = U\(L\b)

% 雅可比迭代法
[x1,n1]=jacobi(A,b, [0;0;0],1.0e-3)

% G-S迭代法
[x2,n2]=gauseidel(A,b, [0;0;0],1.0e-3)

function [y,n] = jacobi(A,b,x0,ep)
% 雅可比迭代法算法
D = diag(diag(A));
L = -tril(A,-1);
U=-triu(A,1);
B=D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0) >= ep
x0=y;
y=B*x0+f;
n=n+1;
end

function [y,n]=gauseidel(A,b,x0,ep)
D = diag(diag(A));
L = -tril(A,-1);
U=-triu(A,1);
B=(D-L)\U;
f=(D-L)\b;
y=B*x0+f;
n=1;
while norm(y-x0) >= ep
x0=y;
y=B*x0+f;
n=n+1;
end

% Test 2


function [] = Test()
% 主函数
% solve 命令求解
syms x
answer=solve(x.^3 - 3*x+1);
vpa(answer)

% 实现逐步搜索法求方程的解
tic
X=StepSearch(-10,10,0.001,0.0001)
toc
% 实现二分法
tic
[k1,x1,wuca1,yx1]=erfen(-2,-1,0.0001);
x1
[k2,x2,wuca2,yx2]=erfen(0,1,0.0001);
x2
[k3,x3,wuca3,yx3]=erfen(1,2,0.0001);
x3
toc

function y = funs(x)

y = x.^3 - 3 * x + 1;


function r=StepSearch(a,b,h,tol)
% 逐步搜索法算法
X=a:h:b;n=(b-a)/h+1;m=0;
Y=funs(X);
X(n+1)=X(n);Y(n+1)=Y(n);
k=2;
while(k<=n)
sk=Y(k)*Y(k-1);
if sk<=0
m=m+1;
if(abs(Y(k))<abs(Y(k-1)))
r(m)=X(k);
k=k+1;
else
r(m)=X(k-1);
end
else
xielv=(Y(k+1)-Y(k))* (Y(k)-Y(k-1));
if (abs(Y(k))<tol)&( xielv<=0)
m=m+1;r(m)=X(k);
end
end
k=k+1;

end




function [k,x,wuca,yx]=erfen(a,b,abtol)
% 二分法算法
a(1)=a; b(1)=b;

ya=funs(a(1)); yb=funs(b(1)); %程序中调用的fun.m为函数

if ya* yb>0

disp('注意:ya*yb>0,请重新调整区间端点a和b.'), return
end
max1=-1+ceil((log(b-a)- log(abtol))/log(2)); %ceil是向正方向取整
for k=1:max1+1

ya=funs(a); b; yb=funs(b); x=(a+b)/2;

yx=funs(x); wuca=abs(b-a)/2; k=k-1;
[k,a,b,x,wuca,ya,yb,yx];

if yx == 0
a=x;b=x;
elseif yb*yx>0
b=x;yb=yx;
else
a=x;ya=yx;

end
if b-a<abtol,return,end
end
k=max1;x;wuca;yx=funs(x);

% 简答与编程5 数值计算
% Test3
x=linspace(-5,5,10); % 已知数据点的x坐标
y=1./(1+x.^2); % 已知数据点y坐标
x0=linspace(-5,5,10); % 已知数据点x坐标
y0=1./(1+x0.^2); % 已知数据点y坐标
x1=linspace(-5,5,10);
y1=interp1(x,y,x1,'linear'); % 线性插值
y2=interp1(x,y,x1,'spline'); % 三次样条插值
y3=interp1(x,y,x1,'pchip'); % 三次Hermite插值
y4=interp1(x,y,x1,'nearest'); % 最邻近插值

% 作图
figure(1)
plot(x0,y0,'-',x,y,'og',x1,y1,'*r');
legend('被插值曲线','已知离散数据点','线性插值数据点 ','location','NorthWest');
title('interp with linear')
figure(2)
plot(x0,y0,'-',x,y,'og',x1,y4,'hr');
legend('被插值曲线','已知离散数据点','线性插值数据点 ','location','NorthWest');
title('interp with cubic')
figure(3)
plot(x0,y0,'-',x,y,'og',x1,y2,'sr');
legend('被插值曲线','已知离散数据点','线性插值数据点 ','location','NorthWest');
title('interp with spline')
figure(4)
plot(x0,y0,'-',x,y,'og',x1,y3,'dr');
legend('被插值曲线','已知离散数据点','线性插值数据点 ','location','NorthWest');
title('interp with pchip')

% 简答与编程5 数值计算
% Test4
x=1.23;
h=[0.1,0.01,0.001,0.0001];
x1=x+h;
x2=x-h;
y = 7.*x.*(sin(3.*x)+cos(3.*x));
y1= 7.*x1.*(sin(3.*x1)+cos(3.*x1));
y2=7.*x2.*(sin(3.*x2)+cos(3.*x2));
yCS=(y1-y2)./(2*h) % 差商数值求导
syms x;
f=7.*x.*(sin(3.*x)+cos(3.*x));
dy=diff(f,x); % 理论导数符号表达式
dyl=eval(subs(dy,x,1.23)) ;% 理论导数
detF=yCS-dyl % 差商求导误差

% Test 05

h=(exp(1)-1)/20;
x=1:h:exp(1);
y=2.*x.^3.*log(5*x);
z1=sum(y(1:20))*h;
z2=sum(y(2:21)*h);
z=(z1+z2)/2,z3=trapz(y)*h,z3h=trapz(x,y)

简答与编程六 符号计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
%  简答与编程六 符号计算
% Test 1
% 展开成傅立叶级数
l=1/2;
syms x n;
f=1-x^2;
a0=int(f*cos(0),-l,l)/l
an=int(f*cos(n*pi*x/l),-l,l)/l
bn=int(f*sin(n*pi*x/l),-l,l)/l

% 简答与编程六 符号计算
% Test 2
x = sym('x');
y = sym('y');
z = sym('z');
[xx,yy,zz]=solve(x-y^2+z==10,x+y-5*z==0,2*x-4*y+z==0',x,y,z);

% Test3
%%输入信号
t=0:1e-3:20;%时域信号的时间范围
x=sin(t)+sin(1.5*t+1)+5*cos(0.5*t)+2*randn(size(t));%时域信号x
w=[0:1e-2:2];%想要观察的频率范围
%%预定义
y=w;
a=w;
j=sqrt(-1);
%%计算频点
for i=1:length(w)
f=trapz(t,x.*exp(-j*w(i)*t));
y(i)=abs(f);
a(i)=angle(f);
end
%%输出
subplot(3,1,1),
plot(t,x)
subplot(3,1,2),
plot(w,y)
subplot(3,1,3),
plot(w,a)

% Test 04
% f1

s1=taylor(1/(5+cos(x)),x,5)

% f2
s2=taylor(exp(x* sin(x)),x,12)
% Test 05
% (1)求展开式,并求方程的根。
syms x;
f=(x^2+x)*(x-1);
g=x^2+2*x+1;
a=expand(f+g)
solve(f+g,x)
% (2)求 f(x)/g(x)的商式和余式
p1=sym2poly(f);
p2=sym2poly(g);
[Q,r]=deconv(p1,p2); % 其中Q是商式系数,r是余式系数
Qa=poly2sym(Q) % 商式
ra=poly2sym(r) % 余式
% Test 06
syms x y
f =x*y^2-y^3;
fx1=diff(f,x,1) % 对x的1阶
fx2=diff(f,x,2) % 对x的2阶

fy1=diff(f,y,1) % 对y的1阶
fy2=diff(f,y,2) % 对y的2阶
% Test 07
syms x;
f = (1+x)^(1/x);
a=limit(f,x,0)
% Test 08
% (1)
syms a x;
f1=sin(a*x);
a1=int(f1,0,pi/2)
% (2)
f2=x/log(x);
a2=int(f2,2,3)

% Test09
syms x y z
y1=@(x) sqrt(x);
y2=@(x) x.^2;
z1=@(x,y) sqrt(x.*y);
z2=@(x,y) x.^2.*y;
fun=@(x,y,z) x.^2+y.^2+z.^2;
a=integral3(fun,1,2,y1,y2,z1,z2)

% Test 10
syms x;
g=x^3-6*x^2+11*x-6;
% (1)因式
a1=factor(g)
% (2)嵌套式
a2=horner(g)
simplify(a2)

GUI Test

function varargout = Test03(varargin)

gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @Test03_OpeningFcn, …
‘gui_OutputFcn’, @Test03_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
defaultanswers={‘5’};
answer=inputdlg(‘Enter your grade’,’Enter’,1,defaultanswers,’on’);
answer1=str2num(char(answer));
if answer1 >= 90 && answer1 <= 100
msgbox(“优秀”,’成绩分析’,’none’,’on’)
elseif answer1 >= 80 && answer1 <= 89
msgbox(“良好”,’成绩分析’,’none’,’on’)
elseif answer1 >= 70 && answer1 <= 79
msgbox(“中等”,’成绩分析’,’none’,’on’)
elseif answer1 >= 60 && answer1 <= 69
msgbox(“合格”,’成绩分析’,’help’,’on’)
else
msgbox(“不合格”,’Result’,’warn’,’on’)
end

% — Executes just before Test03 is made visible.
function Test03_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Test03 (see VARARGIN)

% Choose default command line output for Test03
handles.output = hObject;
ha=axes(‘units’,’normalized’,’pos’,[0 0 1 1]);

uistack(ha,’down’);

ii=imread(‘p1.jpg’);

%设置程序的背景图为p1.jpg

image(ii);

colormap gray

set(ha,’handlevisibility’,’off’,’visible’,’off’);

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Test03 wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = Test03_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes1

function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,’String’) returns contents of edit1 as text
% str2double(get(hObject,’String’)) returns contents of edit1 as a double

% — Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,’BackgroundColor’), get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end

function varargout = Test04(varargin)
% TEST04 MATLAB code for Test04.fig
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @Test04_OpeningFcn, …
‘gui_OutputFcn’, @Test04_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
users={‘123’,’321’;’456’,’789’};% 存储一系列账号和密码
[x,y]=size(users);
prompt={‘请输入账号:’,’请输入密码:’}
name=’输入’;
numlines=1;
defaultanswer={‘000’,’000’};
input=inputdlg(prompt,name,numlines,defaultanswer);
input1=str2num(char(input));
for i=1:x
if input1(1)==str2num(char(users(i,1)))
if input1(2)==str2num(char(users(i,2)))
msgbox(‘欢迎登录本系统’,’Welcome ‘,’none’)
break
else
msgbox(‘输入有误,请重新输入账号和密码’,’出错’,’error’)
break
end
else
msgbox(‘输入有误,请重新输入账号和密码’,’出错’,’error’)
break
end
end

% — Executes just before Test04 is made visible.
function Test04_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Test04 (see VARARGIN)

% Choose default command line output for Test04
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Test04 wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = Test04_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

  • size(str)获取字符数组的大小
  • s1 = s([3, 4])得到子字符串
  • abs 和 double 都可以用来获取串数组所对应的ascii码数值数组。
  • char可把ascii码数组变位机串数组

第三章 Matlab数据可视化

二维数据可视化

二维数据可视化是将平面坐标上的数据点连接起来的平面图形。除直角坐标外,还可以采用对书坐标、极坐标

基本二维曲线绘制

plot函数
- plot(y)
y可以是向量
实数、矩阵或复数向量
- plot(x,y)
* 当x是向量,y是有一维与x同维的矩阵
* 当x为向量,y为矩阵;
* 当x、y均为矩阵时,使用plot(x,y):
此时,x、y是具有相同维数的矩阵;绘图时, 以x的列向量作为横坐标,以y对应的列向量作为纵坐标,当x、y具有n列时,同时绘制出n条曲线。

绘图辅助操作

绘图辅助操作实在plot函数的基础上增加颜色、线型等输入参数

字符串

字符串处理函数

字符串的构造

  • 创建字符数组
    • 用一对单引号来表示字符串
    • 字符串合并函数strcat来得到一个新的函数(对应Java中的concat) : 语法 : strcat(a, b)
      & 注意:strcat在合并字符串的同时会把字符串结尾的空格删除.
      & 要想保留这些空格,可以用矩阵合并符来实现字符串合并。
      例如: c = [a, b]
    • 构造二维字符串数组时,要注意保持二维字符数组的每一行具有相同的长度。
      & 当构造的多个字符串具有不同长度时,可以在字符串的尾部添加空格来强制实现字符串具有相同的长度。

Matlab零散知识

单位矩阵

  • 在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这样的矩阵被称为单位矩阵。

  • 它是一个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1,除此之外全部为0.根据单位矩阵的特点,任何矩阵与单位矩阵相乘都等于本身,而单位矩阵因此独特性在高等数学中也有广泛应用。

  • 在Matlab中单位矩阵用eye(n,m)生成

    变量的存取

    1 使用命令实现变量的存取(load:取,save:存)

  • 格式1
    load 文件名 变量名;
    save 文件名 变量名;
    例如:

    Matlab
    1
    save file1.mat A;
  • 格式2
    S = load(‘文件名’, ‘格式’, ‘变量名’)
    save(‘文件名’, ‘格式’, ‘变量名’)
    例如:

    Matlab
    1
    2
    3
    save('file1.mat', '-mat', 'A')
    save('file1.txt', '-ascii', 'A')
    save('file2.txt', '-ascii', 'tabs', 'A')
    • 其中格式有:
      • ‘-mat’ : 二进制格式
      • ‘-ascii’ : 8位文本格式
      • ‘-ascii’,’-tabs’: 以8位文本和table分隔符分割的格式

        2 使用交互式实现变量的存取

        即通过鼠标点击工作空间窗口来实现

对Excle文件的读取

例子:

1
2
num
=xlsread('data.xls','Sheet1','B3:F6')

进行Excel表格读取时请注意,关闭需要打开的工作表,否则进程占用,无法读取。
*进行Excel表格读取时请注意,数据范围那一项中间不能留有空格,即’A2:D4’ 而不是’A2 : D4’ *

类型转换问题

  • abs和double可以将字符转换为ascii码
  • number2str将数字转换为字符
  • char将ascii码转换为字符

    Matlab中步长的意思是:差值而不是间隔。例如:

    x[1:2:12] :结果就为 1 3 5 7 9 11

    数组距离问题:

    (end-10:end)之间有11个元素

    矩阵索引问题:

  • 无法对临时矩阵进行索引

    修改命令行错误:

    有时候我们输入表达式时会带有错误,当你按 ENTER 回车后才意识到,这时没必须重 新输入整行,只需使用方向键向上移动,修正错误,然后按回车重新输入,MATLAB 会修 正输出

    还可以在命令窗口中输入 quit 命令,这样也能关闭 MATLAB。

.x和x的区别:

  • 前者是矩阵中的元素相乘
  • 后者是两个矩阵相乘

绘画三维图形时,使用的meshgrid命令

命令文件和函数文件的区别和联系:

(1)命令文件没有输入参数,也不返回输出参数,而函数文件可以带输入参数,也可以返回输出参数。 (2)命令文件对MATLAB工作空间中的变量进行操作,命令执行的结果返回到工作空间中,所产生的变量为全局变量,而函数文件中定义的变量为局部变量,不在工作空间中显示,当函数文件执行后,这些变量被清除。 (3)命令文件可以直接运行,而函数文件不能直接运行,要以函数调用的方式运行。

创建符号常量的意义:

可以避免精度损失的问题
例如计算机中1/3的值是0.3333333,但如果x=syms(‘1/3’),则x始终是1/3而不是0.33333

计算伴随矩阵

inv(A)*det(A)

将cell数组转化为矩阵

若cell中的元素为含有数字的字符串

str2num(char(answer));

若cell中的元素为数值型,则使用cell2amt

临时

prompt={‘请输入正弦函数的振幅:’,’请输入正弦函数的频率:’};
name=’输入’;
numlines=1;
defaultanswer={‘5’,’10’};
answer=inputdlg(prompt,name,numlines,defaultanswer);
answer1=str2num(char(answer));
amplitude=answer1(1);
frequency=answer1(2);
axes(handles.axes1);
x=0:pi/180:2pi;
y=amplitude
sin(frequency2pi);
plot(x,y)

Matalb矩阵元素的访问

通过下标来引用矩阵的元素

  • 先行后列
  • 下标越界时Matlab会自动扩展矩阵,为给定值的位置默认为零。

    通过序号来引用矩阵的元素

通过冒号表达式来或者子矩阵

  • 获得第n行所有元素
    * A(n,:)
  • 获得第n列的所有元素
    * A(:,n)
  • 获得第2到5行且3到4列中的元素
    * A(2 : 5;3 : 4)
  • 获得n到m行的所有元素
    * A(n : m, : )
  • 获得n到m列的所有元素
    * A(:,n : m)
    & 注意:end在Matlab中表示某一维的末尾下标

Java学习记录

用于记录那些零星的不成系统的需要注意的问题

next()和nextLine()的区别

next()特点:
1、一定要读取到有效字符后才可以结束输入,
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉,
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符.
next()不能得到带有空格的字符串

nextLine()特点:
1、以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白.

Java中字符串可以像整数一样交换顺序

为什么Math.sin(Math.PI)为什么不等于0?

解释:
1.常规代数里,是等于0,但是cpu运算的时候,只是近似等于0
2.计算机语言数值型数据都是二进制表达的,所以在进行浮点计算时候是很难精确的,Math.sin(Math.PI)是通过微积分计算公式计算出来的,会存在精度上面的误差结果是:1.2246063538223772e-16

综上,浮点数的运算,往往并不是我们期望的结果,可以通过Math.round() 函数来解决。

常见计算结果类型

Math,pow计算结果是小数
Math.log计算结果也是小数

如何利用Math.random生成各个范围的整数

* 以下这是阿里巴巴编码规范插件的提示 *
** 注意 Math.random() 这个方法返回是double类型,注意取值的范围[0,1)(能够取到零值,注意除零异常),如果想获取整数类型的随机数,不要将x放大10的若干倍然后取整,直接使用Random对象的nextInt或者nextLong方法. **

Unicode的问题

小技巧可以这样输出一个双引号:

System.out.println(‘“‘); // prints “

字符串操作之:concat用于java中字符串的拼接。

1
2
3
4
5
6
7
String s1 = 'Hello';

String s2 = " World!"

String s3 = s1.concat.(s2);
System.out.println(s3);
// Output:Hello world

记录怎样实现字符串的强制转换

Java中使用数组之前必须先定义和声明,不能不经过声明和定义就直接在方法中作为参数调用方法。

注意,在Java中只能有一个主类,它的名字和文件名相同,其他的类一定不能使用这个名字。

有关Unicode的问题

每个字符都有一个唯一的在十六进制数0到FFFF(即十进制的65535)之间的Unicode。分别用’\u0000’ 和 ‘\uFFFF’表示。

匿名数组——没有显式地引用变量。常用于给方法传递参数

printArray(new int[]{1, 3, 3})

调用方法时参数的传递:

  • 对于基本数据类型参数,传递的是实参的值

  • 对于数组类型参数,参数值是数组的引用,给方法传递的是这个引用。
    更好的说法是参数传递的是共享信息(pass-by-sharing)。即方法中的数组和传递的数组是一样的。所以,如果改变方法中的数组,将会看到方法外的数组也变化了。

  • 注意下列的区别:

    对于以上区别,可以将方法添加一个返回值,然后在mian方法中直接print方法调用,可以获得变量的改变。

可变长参数列表

-w736

需要注意的是:

  • 只允许使用一个可变长度参数。
  • 可变长度参数仅被允许放置在参数列表的最后。
  • 不允许从方法中返回可变长度类型。

java.util.Arrays.sort:

java.util.Arrays.sort方法已重载,因此可以用于对除布尔值以外的任何原始类型的数组进行排序。这种排序方法不会创建新方法,元素将被排序到作为方法参数给出的数组中。

java.util.Arrays.toString

返回对象的字符串表示

java.util.Arrays.fill

填充数组

System.currentTimeMillis

用于获取当前已经经过了多少毫秒(开始时间是“那个”时间,大家都知道吧)

Random类基本用法

// 创建一个实例对象
Random random = new Random(1000);其中1000是seed,这个值最好是随机使得获取的伪随机数更加随机
int number = random.nextInt(1000); 其中的1000是bound,使用该语句可以获得一个在从零到bound(不包括)之间的伪随机数。

关于boolean类型

在java中boolean类型默认为false。
即如果不给定是true还是false,boolean类型变量的默认值是false。

判断字符是否是数字

使用:
Character.isDigit()

注意:只能判断单个字符,不能判断字符串,但是可以通过循环实现判断字符串是不是数字。

将字符串转换为大写

str.toUpperCase();

String-w947

如果查找的是字符串,返回的int值是字符串中第一个字符的索引
-w948

获取伪随机数

-w490

使用int强制转换char得到的是ascii码,即

(int)StringName.charAt(i)是行不通的。

二进制转十进制算法

-w1173

关于try-catch嵌套

-w714

十进制转二进制

-w574

一个关于try-catch嵌套的例子

``
public class Content0804 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print(“请输入一个整数: “);
while (true){
String line = in.nextLine();
try {
int num = Integer.parseInt(line);
System.out.println(Integer.toBinaryString(num));
break;
}catch (Exception e){
try {
new BigInteger(line);
System.out.println(“整数过大,请输入一个整数”);
}catch (Exception e1){
try {
new BigDecimal(line);
System.out.println(“输入的是一个小数,请输入一个整数”);
}catch (Exception e2){
System.out.println(“输入的是非法字符,请重新输入一个整数‚”);
}
}
}
}
}
}

``

如何同入理解API

https://www.zhihu.com/question/21430743

java jdk源码

https://gitee.com/huangtianyu/jdk-source

string.getBytes()

void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin)
已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过 getBytes() 方法,该方法使用平台的默认字符集。

System.getProperty()

这个函数可以获取到java JVM以及操作系统的一些参数

-w870

Interger类

-w860
-w559
##Interger.parseInt(String s, int radix)
-w710
意思是前一个字符形式的数字是后面这个radix进制的,然后输出的时候自动将这个radix进制的s数字转换为十进制的

关于StringBuilder

s1.substring(2)中给定的是start的下标,这种情况下默认为从开始值到最后的下标

关于protected和private的简单说明

-w643

即:
默认情况下,一个类可以访问同一个包中的,而外部的类无法访问它。

protected使其他包中的类无法访问该类,但是其他包中他的子类可以访问它。而同一个包中可以随意访问

private表示只有在该类中才能使用

Number

Number的compareTo(Integer)方法未定义

关于接口和抽象类的一些知识

接口中定义的方法都是公共的

##输出圆周率的方法

表示如下:

1
"\u03c0"

浅拷贝

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。 如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。

关于方法的递归调用

  1. 什么是递归调用

    • 例如:
      a(){
      a();}
  2. 递归调用是很耗费栈内存的,递归算法可以不用的时候尽量别用

  3. 递归调用而没有结束命令时,会出现以下的错误【注意,不是异常,是错误Error】:
    java.lang.StackOverflowError

    - 栈内存溢出错误
    - 错误发生无法挽回,只有一个结果,就是 JVM停止工作。
  4. 递归必须有结束条件,没有结束条件,是一定会发生栈内存溢出错误。

  5. 递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存错误,因为递归得太深了。

注意:
- 递归可以不使用尽量别用
- 但有些情况下该功能的实现必须依靠递归方 式。例如,目录拷贝。

应用:
- 递归用于计算求和

致命错误

Intellij中能编译但是java时找不到类:

这里说更清楚一点,应该在存放编译后的文件的目录下运行java程序,我这里是bin。src中存放的是.java文件,bin中存放的是.class文件。

更新:在idea中用终端运行java程序时,一定要在bin目录下使用packageName.ClassName运行,不能到具体的package中运行className!!!

使用nextLine时读区不了数据,原因如下:

-w1081

* 解决办法 *
String s = input.nextLine();之前添加如下代码:
input.nextLine();