Windows安装Octave

http://wiki.octave.org/Octave_for_Microsoft_Windows

基本操作(Basic Operations)

octave:1> PS1('>> ');
>>
>> path
>> pause
>> clear ; close all; clc
>> fprintf(['test print %%s : %s \n' ...
'test print %%d : %d \n' ...
'test print %%g : %g \n' ...
'test print %%f : %f \n' ...
], 'String', 10, 2.33553e-11, 0.12345678);
test print %s : String
test print %d : 10
test print %g : 2.33553e-11
test print %f : 0.123457
>>
>> 1+2
ans = 3
>> 5*8
ans = 40
>> 1/2
ans = 0.50000
>> 2^6
ans = 64
>> 2^3
ans = 8
>> 1 == 2 % false
ans = 0
>> 1 == 1 % true
ans = 1
>> 1 ~= 2 % true
ans = 1
>> 1 ~= 2 % true
ans = 1
>> 1 ~= 1 % false
ans = 0
>> 1 ~= 1 % false not equal
ans = 0
>> 1 && 0
ans = 0
>> 1 && 0 % AND
ans = 0
>> 1 || 0 % or
ans = 1
>> xor(1,0)
ans = 1
>> xor(1,0) % yi or
ans = 1
>> PS1('>> ');
>> a=3
a = 3
>> a=4;
>> a
a = 4
>> c=(3>=4)
c = 0
>> c
c = 0
>> a=pi
a = 3.1416
>> a=pi;
>> a
a = 3.1416
>> b=e;
>> b
b = 2.7183
>> disp(a);
3.1416
>> disp(sprintf('2 decimals: %0.2f', a))
2 decimals: 3.14
>> disp(sprintf('10 decimals: %0.10f', a))
10 decimals: 3.1415926536
>> disp(sprintf('10 decimals: %0.10f', b))
10 decimals: 2.7182818285
>> format long
>> a
a = 3.141592653589793
>> b
b = 2.718281828459045
>> format short
>> a
a = 3.1416
>> b
b = 2.7183
>> A = [1 2; 3 4; 5 6];
>> A
A = 1 2
3 4
5 6 >> A
A = 1 2
3 4
5 6 >> v=[1 2 3];
>> v =[1; 2; 3]
v = 1
2
3 >> v=1:0.1:2;
>> v
v = Columns 1 through 7: 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 Columns 8 through 11: 1.7000 1.8000 1.9000 2.0000 >> v=1:6;
>> v
v = 1 2 3 4 5 6 >> ones(2,3)
ans = 1 1 1
1 1 1 >> 2 * ones(2,3)
ans = 2 2 2
2 2 2 >> w=ones(1,3)
w = 1 1 1 >> w=zeros(1,3)
w = 0 0 0 >> w=rand(1,3)
w = 0.066378 0.828597 0.569681 >> rand(3,3)
ans = 0.2443954 0.3866398 0.2332407
0.6611382 0.6353541 0.0066938
0.2465706 0.2734220 0.6748704 >> rand(3,3)
ans = 0.71983 0.47680 0.30126
0.19673 0.29252 0.57751
0.99891 0.57380 0.31022 >> rand(3,3)
ans = 0.26842 0.82579 0.22678
0.63709 0.67602 0.11723
0.83274 0.48216 0.26778 >> rand(3,3)
ans = 0.790568 0.666798 0.084361
0.343994 0.482338 0.860989
0.908285 0.967817 0.935013 >> randn(1,3) % gaosi fenbu
ans = -0.098394 -0.147581 0.085802 >> randn(1,3) % gaosi fenbu
ans = 1.10694 -1.99933 -0.17373 >> w= -6 + sqrt(10) * (randn(1,10000));
>> hist(w)
>> hist(w,50)
>>
>> I = eye(4)
I = Diagonal Matrix 1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1 >> help eye
>> help help

移动数据(Moving Data Around)

>>  A = [1 2; 3 4; 5 6]
A = 1 2
3 4
5 6 >> size(A)
ans = 3 2 >> size(A, 1)
ans = 3
>> size(A, 2)
ans = 2
>> size(A, 3)
ans = 1
>> v = [1 2 3 4]
v = 1 2 3 4 >> length(v)
ans = 4
>> length(A)
ans = 3 >> load featuresX.dat
>> load ('priceY.dat')
>> who
Variables in the current scope: A ans featuresX priceY v >> whos
Variables in the current scope: Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x2 48 double
ans 1x23 23 char
featuresX 3x1 24 double
priceY 3x1 24 double
v 1x4 32 double Total is 39 elements using 151 bytes >> priceY
priceY = 1000
2000
3000 >> featuresX
featuresX = 1234
5678
1235 >> clear featuresX
>>
>> whos
Variables in the current scope: Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x2 48 double
ans 1x23 23 char
priceY 3x1 24 double
v 1x4 32 double Total is 36 elements using 127 bytes >> clear
>> whos
>> load ('priceY.dat')
>> v = priceY(2:3)
v = 2000
3000 >> save hello.mat v;
>> clear
>> whos
>> load hello.mat
>> whos
Variables in the current scope: Attr Name Size Bytes Class
==== ==== ==== ===== =====
v 2x1 16 double Total is 2 elements using 16 bytes >> v
v = 2000
3000 >> save hello.txt -ascii % save as text (ASCII)
>> A = [1 2;3 4;5 6]
A = 1 2
3 4
5 6 >> A(3,2)
ans = 6
>>
>> A(2,:) % ":" means every element along that row/column
ans = 3 4 >> A(:,2)
ans = 2
4
6 >> A([1 3], :)
ans = 1 2
5 6 >> A
A = 1 2
3 4
5 6 >> A([1 2 3], :)
ans = 1 2
3 4
5 6 >> A(:,2) = [10; 20; 30]
A = 1 10
3 20
5 30 >> A = [A, [100; 101; 102]] % append another column vector to right
A = 1 10 100
3 20 101
5 30 102 >> A = [A; [100 101 102]] % append another column vector to right
A = 1 10 100
3 20 101
5 30 102
100 101 102 >> A(:)
ans = 1
3
5
100
10
20
30
101
100
101
102
102 >> A = [1 2;3 4;5 6]
A = 1 2
3 4
5 6 >> B = [11 12; 13 14; 15 16]
B = 11 12
13 14
15 16 >> C = [A B]
C = 1 2 11 12
3 4 13 14
5 6 15 16 >> [B A]
ans = 11 12 1 2
13 14 3 4
15 16 5 6 >> [A B C]
ans = 1 2 11 12 1 2 11 12
3 4 13 14 3 4 13 14
5 6 15 16 5 6 15 16 >> [A; B]
ans = 1 2
3 4
5 6
11 12
13 14
15 16 >> [A, B]
ans = 1 2 11 12
3 4 13 14
5 6 15 16

计算数据(Computing on Data)

>> A = [1 2; 3 4; 5 6]
A = 1 2
3 4
5 6 >> B = [11 12; 13 14; 15 16]
B = 11 12
13 14
15 16 >> C = [1 1; 2 2]
C = 1 1
2 2 >> A * C
ans = 5 5
11 11
17 17 >> A .* B
ans = 11 24
39 56
75 96 >> 3 * A
ans = 3 6
9 12
15 18 >> A*3
ans = 3 6
9 12
15 18 >> A
A = 1 2
3 4
5 6 >> B
B = 11 12
13 14
15 16 >> A.^2
ans = 1 4
9 16
25 36 >> v = [1; 2; 3]
v = 1
2
3 >> 1./v
ans = 1.00000
0.50000
0.33333 >> 1./A
ans = 1.00000 0.50000
0.33333 0.25000
0.20000 0.16667 >> log(v)
ans = 0.00000
0.69315
1.09861 >> exp(v)
ans = 2.7183
7.3891
20.0855 >> abs(v)
ans = 1
2
3 >> abs([-1; 2; -3])
ans = 1
2
3 >> -v
ans = -1
-2
-3 >> -A
ans = -1 -2
-3 -4
-5 -6 >> -1*v
ans = -1
-2
-3 >> v+ones(length(v),1)
ans = 2
3
4 >> ones(length(v),1)
ans = 1
1
1 >> ones(length(v),2)
ans = 1 1
1 1
1 1 >> zeros(length(v),2)
ans = 0 0
0 0
0 0 >> v.+1
ans = 2
3
4 >> v.-1
ans = 0
1
2 >> 1.+v
ans = 2
3
4 >> v+1
ans = 2
3
4 >> v-1
ans = 0
1
2 >> A
A = 1 2
3 4
5 6 >> A'
ans = 1 3 5
2 4 6 >> A''
ans = 1 2
3 4
5 6 >> A''''
ans = 1 2
3 4
5 6 >> a = [1 15 2 0.5]
a = 1.00000 15.00000 2.00000 0.50000 >> val = max(a)
val = 15
>> [val, ind] = max(a)
val = 15
ind = 2
>> max(A)
ans = 5 6 >> a < 3
ans = 1 0 1 1 >> A < 3
ans = 1 1
0 0
0 0 >> find(a<3)
ans = 1 3 4 >> a
a = 1.00000 15.00000 2.00000 0.50000 >> magic(3)
ans = 8 1 6
3 5 7
4 9 2 >> magic(4)
ans = 16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1 >> magic(3)
ans = 8 1 6
3 5 7
4 9 2 >> magic(3)
ans = 8 1 6
3 5 7
4 9 2 >> magic(3)
ans = 8 1 6
3 5 7
4 9 2 >> magic(3)
ans = 8 1 6
3 5 7
4 9 2 >> [r,c] = find(A >= 7)
r = [](0x1)
c = [](0x1)
>> A
A = 1 2
3 4
5 6 >> A=magic(3)
A = 8 1 6
3 5 7
4 9 2 >> [r,c] = find(A >= 7)
r = 1
3
2 c = 1
2
3 >> [r,c] = find(A >= 2)
r = 1
2
3
2
3
1
2
3 c = 1
1
1
2
2
3
3
3 >> a
a = 1.00000 15.00000 2.00000 0.50000 >> sum(a)
ans = 18.500
>> prod(a)
ans = 15
>> floor(a)
ans = 1 15 2 0 >> ceil(a)
ans = 1 15 2 1 >> rand(3)
ans = 0.43298 0.41511 0.89855
0.21145 0.15275 0.96643
0.67367 0.31471 0.15306 >> max(rand(3), rand(3))
ans = 0.99326 0.98554 0.83527
0.78799 0.71117 0.92512
0.99326 0.98996 0.34543 >> A
A = 8 1 6
3 5 7
4 9 2 >> max(A, [], 1)
ans = 8 9 7 >> max(A, [], 2)
ans = 8
7
9 >> max(A)
ans = 8 9 7 >> max(max(A))
ans = 9
>> A(:)
ans = 8
3
4
1
5
9
6
7
2 >> max(A(:))
ans = 9
>>
>>
>>
>> A = magic(9)
A = 47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35 >> sum(A,1)
ans = 369 369 369 369 369 369 369 369 369 >> sum(A,2)
ans = 369
369
369
369
369
369
369
369
369 >> eye(9)
ans = Diagonal Matrix 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 >> A .* eye(9)
ans = 47 0 0 0 0 0 0 0 0
0 68 0 0 0 0 0 0 0
0 0 8 0 0 0 0 0 0
0 0 0 20 0 0 0 0 0
0 0 0 0 41 0 0 0 0
0 0 0 0 0 62 0 0 0
0 0 0 0 0 0 74 0 0
0 0 0 0 0 0 0 14 0
0 0 0 0 0 0 0 0 35 >> sum(A .* eye(9))
ans = 47 68 8 20 41 62 74 14 35 >> sum(sum(A .* eye(9)))
ans = 369
>> flipud(eye(9))
ans = Permutation Matrix 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 >> sum(sum(A .* flipud(eye(9))))
ans = 369
>>
>>
>>
>>
>> A = magic(3)
A = 8 1 6
3 5 7
4 9 2 >> pinv(A) % pseudoinverse
ans = 0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778 >> inv(A)
ans = 0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778 >> temp = pinv(A)
temp = 0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778 >> temp * A
ans = 1.00000 0.00000 -0.00000
-0.00000 1.00000 0.00000
0.00000 0.00000 1.00000 >> abs(temp * A)
ans = 1.00000 0.00000 0.00000
0.00000 1.00000 0.00000
0.00000 0.00000 1.00000

数据绘制(Plotting Data)

>>  t=[0:0.01:0.98];
>> t
t = Columns 1 through 11: 0.00000 0.01000 0.02000 0.03000 0.04000 0.05000 0.06000 0.07000 0.08000 0.09000 0.10000 Columns 12 through 22: 0.11000 0.12000 0.13000 0.14000 0.15000 0.16000 0.17000 0.18000 0.19000 0.20000 0.21000 Columns 23 through 33: 0.22000 0.23000 0.24000 0.25000 0.26000 0.27000 0.28000 0.29000 0.30000 0.31000 0.32000 Columns 34 through 44: 0.33000 0.34000 0.35000 0.36000 0.37000 0.38000 0.39000 0.40000 0.41000 0.42000 0.43000 Columns 45 through 55: 0.44000 0.45000 0.46000 0.47000 0.48000 0.49000 0.50000 0.51000 0.52000 0.53000 0.54000 Columns 56 through 66: 0.55000 0.56000 0.57000 0.58000 0.59000 0.60000 0.61000 0.62000 0.63000 0.64000 0.65000 Columns 67 through 77: 0.66000 0.67000 0.68000 0.69000 0.70000 0.71000 0.72000 0.73000 0.74000 0.75000 0.76000 Columns 78 through 88: 0.77000 0.78000 0.79000 0.80000 0.81000 0.82000 0.83000 0.84000 0.85000 0.86000 0.87000 Columns 89 through 99: 0.88000 0.89000 0.90000 0.91000 0.92000 0.93000 0.94000 0.95000 0.96000 0.97000 0.98000 >> y1=sin(2*pi*4*t);
>> plot(t,y1);
>> y2=cos(2*pi*4*t);
>> plot(t,y2); >> plot(t,y1);
>> hold on;
>> plot(t,y2,'r');
>> xlabel('time');
>> ylabel('value');
>> legend('sin','cos');
>> legend('cos','sin');
>> legend('sin','cos');
>> title('my plot'); >> print -dpng 'myPolt.png'
>> close >> figure(1); plot(t,y1);
>> figure(2); plot(t,y2,'r'); >> subplot(1,2,1);
>> plot(t,y1)
>> subplot(1,2,2)
>> plot(t,y2,'r')
>> title myPlot
>> axis([0.5 1 -1 1])
>> clf; >> A=magic(5);
>> imagesc(A);
>> imagesc(A), colorbar, colormap gray;
>> imagesc(magic(15)), colorbar, colormap gray;

控制语句:for,while,if语句(Control Statements)

>>  v=zeros(10,1)
v = 0
0
0
0
0
0
0
0
0
0 >> for i=1:10
> v(i) = 2^i;
> end
>> v
v = 2
4
8
16
32
64
128
256
512
1024 >> indices=1:10
indices = 1 2 3 4 5 6 7 8 9 10 >> for i=indices
> disp(i)
> end
1
2
3
4
5
6
7
8
9
10
>>
>> v
v = 2
4
8
16
32
64
128
256
512
1024 >> i=1
i = 1
>> while i <=5
> v(i) = 100;
> i = i +1;
> end;
>> v
v = 100
100
100
100
100
64
128
256
512
1024 >> i=1;
>> while true
> v(i)=999;
> i = i + 1;
> if i==6,
> break;
> end;
> end;
>> v
v = 999
999
999
999
999
64
128
256
512
1024 >> v(1)
ans = 999
>> v(1)=2;
>> if v(1)==1,
> disp('The value is one');
> elseif v(1) == 2,
> disp('The value is two');
> else
> disp('The value is not one or two');
> end;
The value is two

函数的定义和使用(Defining and using functions)

>>  function y = squareThisNumber(x);
> y = x^2;
> end;
>>
>> squareThisNumber(5)
ans = 25 >> % octave serch path (advanced/optional)
>> addpath('C:\users\'); >> % you can also put the function into the 'suareThisNumber.m' file under addpath
>> % then you can invoke this function use 'squareThisNumber(5)' >> function [y1,y2] = squareAndCubeThisNumber(x);
> y1 = x^2;
> y2 = x^3;
> end;
>> squareAndCubeThisNumber(3)
y1 = 9
y2 = 27
ans = 9
>> [a,b]=squareAndCubeThisNumber(3)
y1 = 9
y2 = 27
a = 9
b = 27
>> a
a = 9
>> b
b = 27 >> X = [1 1; 1 2; 1 3]
X = 1 1
1 2
1 3 >> y = [1; 2; 3]
y = 1
2
3 >> theta = [0;1]
theta = 0
1 >> function J = costFunctionJ(X, y, theta)
> % X is the "design matrix" containing out training examples.
> % y is the class labels
>
> m = size(X, 1); % number of traning examples
> predictions = X * theta; % predictions of hypothesis on all m examples
> sqrErrors = (predictions - y).^2; % squared errors
>
> J = 1/(2*m) * sum(sqrErrors);
> end;
>> j=costFunctionJ(X,y,theta)
j = 0 >> size(X,1)
ans = 3
>> X*theta
ans = 1
2
3 >> sum(X)
ans = 3 6 >> A = magic(9)
A = 47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35 >> sum(A,1)
ans = 369 369 369 369 369 369 369 369 369 >> sum(A,2)
ans = 369
369
369
369
369
369
369
369
369 >> sum(A)
ans = 369 369 369 369 369 369 369 369 369 >> sum(sum(A))
ans = 3321 >> theta=[0;0]
theta = 0
0 >> j=costFunctionJ(X,y,theta)
j = 2.3333
>> (1^2 + 2^2 + 3^2)/(2*3)
ans = 2.3333

Octave教程的更多相关文章

  1. 吴恩达《机器学习》课程笔记——第六章:Matlab/Octave教程

    上一篇  ※※※※※※※※  [回到目录]  ※※※※※※※※  下一篇 这一章的内容比较简单,主要是MATLAB的一些基础教程,如果之前没有学过matlab建议直接找一本相关书籍,边做边学,matl ...

  2. Ng第五课:Octave 教程(Octave Tutorial)

    5.1  基本操作 5.2  对数据进行灵活操作 5.3  计算数据 5.4  数据可视化 5.5  控制语句和函数 5.6  矢量化 官网安装:Installation 在线文档:http://ww ...

  3. 斯坦福第五课:Octave 教程(Octave Tutorial)

    5.1  基本操作 5.2  移动数据 5.3  计算数据 5.4  绘图数据 5.5  控制语句:for,while,if 语句 5.6  矢量化 5.7  工作和提交的编程练习 5.1 基本操作

  4. Octave入门

    Octave/Matlab Tutorial Octave/Matlab Tutorial Basic Operations 你现在已经掌握不少机器学习知识了 在这段视频中 我将教你一种编程语言 Oc ...

  5. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial

    Lecture 5 Octave教程 5.1 基本操作 Basic Operations 5.2 移动数据 Moving Data Around 5.3 计算数据 Computing on Data ...

  6. 吴恩达-coursera-机器学习-week2

    四.多变量线性回归(Linear Regression with Multiple Variables) 4.1 多维特征 4.2 多变量梯度下降 4.3 梯度下降法实践1-特征缩放 4.4 梯度下降 ...

  7. Machine Learning Note Phase 1( Done!)

    Machine Learning 这是第一份机器学习笔记,创建于2019年7月26日,完成于2019年8月2日. 该笔记包括如下部分: 引言(Introduction) 单变量线性回归(Linear ...

  8. matlab基础教程——根据Andrew Ng的machine learning整理

    matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...

  9. Ubuntu通过源代码编译安装Octave 4.0

    本教程/笔记,意在指导在Ubuntu及其它Linux系统上怎样通过源代码安装Octave. Octave简单介绍 Octave是GNU旗下取代matlab的数学工具软件,语法与matlab高度兼容.而 ...

随机推荐

  1. ubuntu下使用redshift开启护眼模式

    前面提到flux这东西在一些机器上并不能work,而且也找到了一些关于他不能work的线索(戳这里看原因).根据这些线索我们发现用flux不行了,得换用redshift,那好吧,我们就来装redshi ...

  2. WPF 快捷键

    原文:WPF 快捷键 <p><pre name="code" class="csharp"> 前台 <Window.Resourc ...

  3. spring+eureka+zuul

    最近在看一个关于spring+eureka+zuul的教学视频,终于明白了eureka是用于提供服务注册和发现的service,通过eureka各个service可以知道其他service,这样就隔离 ...

  4. win10系统使用Telnet命令时提示“telnet不是内部或外部命令”

    in10系统使用Telnet命令时提示“telnet不是内部或外部命令”问题的处理方案 win10系统使用的过程中很多用户会遇到使用Telnet命令时提示“telnet不是内部或外部命令”的问题,这样 ...

  5. 【Linux命令】EOF自定义终止符

    EOF自定义终止符用法 我们在脚本中经常会发现使用EOF的情况.EOF可以结合cat命令对内容进行追加.比如:执行脚本的时候,需要往一个文件里自动输入多行内容.如果是少数的几行内容,可以用echo命令 ...

  6. Mybatis技术内幕(一)——整体架构概览

    Mybatis技术内幕(一)--整体架构概览 Mybatis的整体架构分为三层,分别是基础支持层.核心处理层和接口层. 如图所示: 一.基础支持层 基础支持层包含整个Mybatis的基础模块,这些模块 ...

  7. 教妹学 Java:动态伴侣 Groovy

    ​ 00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没 ...

  8. netty ByteBuf与String相互转换

    String转为ByteBuf 1)使用String.getBytes(Charset),将String转为byte[]类型 2)使用Unpooled.wrappedBuffer(byte[]),将b ...

  9. 利用内存锁定技术防止CE修改

    利用内存锁定技术防止CE修改 通过这种在R3环利用的技术,我们可以来达到保护内存的目的,像VirtualProtect等函数来修改页属性根本无法修改. 而CE修改器推测应该使用VirtualProte ...

  10. 数据库之MySQL查询

    查询 创建数据库.数据表 -- 创建数据库 create database python_test1 charset=utf8; -- 使用数据库 use python_test1; -- stude ...