Matlab学习笔记

 Matlab学习笔记

%表注释
disp('显示文字')
";"表示不可见
clear去掉变量
clear all去掉所有变量
x=linspace(0, 3, 100);
[f, v] = poly2fv({x1, x2, x3}, {y1, y2, y3});
isempty(a)判断矩阵元素为空
请问矩阵中的 NaN如何读取.
a=[NaN, 2; 3, NaN];
b=find(isnan(a));
a(b) = anyother number



=========================================================================
图形完成後,我们可用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范

围:

axis([0, 6, -1.2, 1.2]);

此外,MATLAB也可对图形加上各种注解与处理:

xlabel('Input Value'); % x轴注解

ylabel('Function Value'); % y轴注解

title('Two Trigonometric Functions'); % 图形标题

legend('y = sin(x)','y = cos(x)'); % 图形注解

grid on; % 显示格线

我们可用subplot来同时画出数个小图形於同一个视窗之中:

subplot(2,2,1); plot(x, sin(x));

subplot(2,2,2); plot(x, cos(x));

subplot(2,2,3); plot(x, sinh(x));

subplot(2,2,4); plot(x, cosh(x));

MATLAB还有其他各种二维绘图函数,以适合不同的应用,详见下表。
============================================================================
小整理:plot绘图函数的叁数

字元 颜色 字元 图线型态

y 黄色 . 点

k 黑色 o 圆

w 白色 x x

b 蓝色 + +

g 绿色 * *

r 红色 - 实线

c 亮青色 : 点线

m 锰紫色 -. 点虚线

   -- 虚线

====================================================
若要画出多条曲线,只需将座标对依次放入plot函数即可:

plot(x, sin(x), x, cos(x));

若要改变颜色,在座标对後面加上相关字串即可:

plot(x, sin(x), 'c', x, cos(x), 'g');

若要同时改变颜色及图线型态(Line style),也是在座标对後面加上相

关字串即可:

plot(x, sin(x), 'co', x, cos(x), 'g*');

====================================================
下表即为MATLAB常用到的永久常数。
小整理:MATLAB的永久常数
i或j:基本虚数单位(即)
eps:系统的浮点(Floating-point)精确度
inf:无限大, 例如1/0
nan或NaN:非数值(Not a number),例如0/0
pi:圆周率 p(= 3.1415926...)
realmax:系统所能表示的最大数值
realmin:系统所能表示的最小数值
nargin: 函数的输入引数个数
nargin: 函数的输出引数个数
===============================================
小整理:适用於向量的常用函数有:
min(x): 向量x的元素的最小值
max(x): 向量x的元素的最大值
mean(x): 向量x的元素的平均值
median(x): 向量x的元素的中位数
std(x): 向量x的元素的标准差
diff(x): 向量x的相邻元素的差
sort(x): 对向量x的元素进行排序(Sorting)
length(x): 向量x的元素个数
norm(x): 向量x的欧氏(Euclidean)长度
sum(x): 向量x的元素总和
prod(x): 向量x的元素总乘积
cumsum(x): 向量x的累计元素总和
cumprod(x): 向量x的累计元素总乘积
dot(x, y): 向量x和y的内积
cross(x, y): 向量x和y的外积
(大部份的向量函数也可适用於矩阵,详见下述。)
===============================================

==========*  如何用MATLAB随机生成封闭曲线?==========
把[xmin, xmax], [ymin, ymax]这个矩形划分成若干个小方格,问
题就变成了,在此二维网格里,从某一初始点(x_N0, y_N0)出发,
遵照规则:下一个点必须是(x_(N0+1,+0,-1), x_(N0+1,+0,-1));
满足约束:①曲线最终回到起始点,②曲线的长度固定,③曲线中
不能有两个相同的点存在。
看起来有点像animate分类器啊...
不过有一个问题,曲线应该是连续的,这里只能用离散的方法来处
理,因此生成的曲线跟划分出的小方格的大小有关。



--
用matlab解决画曲线之类的问题不能用这个
象是图形学中或者有点象链码的思路。我们不是在屏幕上逐点画线,
其实只需要交给matlab一组坐标,matlab可以把它画得很漂亮。

我在新闻组comp.soft-sys.matlab上提问,已经有了解答。
基本思想是
(1) 用极坐标表示曲线(r(t), theta(t))
(2) 先生成一组基本点,其theta(t)从0均匀变化到2pi,
     r(t)随机。
(3) 然后用样条插值使曲线光滑
(4) 最后可以用仿射变换(affine)使曲线满足预定要求

我把最后我的代码列出来,后面包括使用弧长参数重新参数化
计算切向量和曲率的部分.
function qiuxian()

N=1000;
n=15;
nonrandbit=1;
randbit=1;
t=linspace(0,2*pi,n);
tt=linspace(0,2*pi,N);

r=nonrandbit+randbit*rand(size(t));
%r=nonrandbit+randbit*ones(size(t));
r(end)=r(1);
rr=spline(t,[0 r 0],tt);

x=rr.*cos(tt);
y=rr.*sin(tt);


% then use arclength parameterization
s = zeros(N,1);
s(1) = 0;
s(2:N) = sqrt(diff(x).^2+diff(y).^2);
s = cumsum(s);
% L == s(N) == sum(sqrt(diff(x).^2+diff(y).^2));

% interpolation again
cs = spline(s, [x;y]);
ss = linspace(s(1),s(N),N);
ds = (s(N)-s(1))/N;
curve = ppval(cs,ss);
curve = curve';
xx = curve( :,1);
yy = curve( :,2);

% now we obtain unit speed tangent vector v
tangent = zeros(N,2);
tangent(2:N,: ) = diff(curve)./ds;
tangent(1,: ) = tangent(N,: );

% and normal vector
normal = zeros(N,2);
normal(2:N,: ) = diff(tangent)./ds;
normal(1,: ) = normal(N,: );

% display
close all
figure
subplot(2,2,1)
plot(x,y);  % orignal curve

subplot(2,2,2)
plot(xx,yy); % reparametrized curve
hold on   % with tangent vector
quiver(xx(1:20:N),yy(1:20:N),tangent(1:20:N,1),tangent(1:20:N,2),0.5);

subplot(2,2,3)
plot(xx,yy);
hold on % with normal vector
quiver(xx(1:20:N),yy(1:20:N),normal(1:20:N,1),normal(1:20:N,2),0.5);

subplot(2,2,4)
% compute speed and curvature
speed = sqrt(tangent( :,1).^2 + tangent( :,2).^2); % should be unit
plot(speed)
hold on
curvature = sqrt(normal( :,1).^2 + normal( :,2).^2); % sign?
plot(curvature)
=================================

你可能感兴趣的:(vector,function,matlab,图形,sorting,plot)