MATLAB中一些有趣函数
logo(MATLAB的logo),earthmap(地球仪),travel(旅行商问题),penny,fifteen(小游戏),teapotdemo(茶壶)
clear 清空工作区 clc清空命令行窗口
预定义变量名:pi ans eps
eps==eps(1) 0.5+eps(x)界限
虚数单位:i 无穷大:inf Inf 表示非数的变量:NaN,nan
switch语句
% price=input('the money:');
% switch true
% case price<10
% disp('m');
% case (price>10)&(price<=100)
% disp('n');
% case(price>100)&(price<=100000000000)
% disp('w');
% end
% pause(2);
% disp('逛街去');
% quit;
% disp('51zxw');
% name=input('请输入您的姓名:','s');
% switch name
% case 'zhang'
% disp(['你是自学网的学员,你叫',name]);
% case 'li'
% disp(['你是自学网的学员,你叫',name]);
% case 'wang'
% disp(['你是自学网的学员,你叫',name]);
% end
% b=input('the num:');
% switch b
% case 1
% disp('星期一');
% case 2
% disp('星期二');
% case 3
% disp('星期三');
% end
plot,ploy3,polar绘制图像
%% 绘制正弦
x=-2*pi:0.01:2*pi;
y=sin(x);y1=cos(x);
plot(x,y,'r--')%红色正弦虚线显示曲线
hold on%图形保持
plot(x,y1,'b-')%蓝色余弦直线显示曲线
xlabel('正弦函数')%分行表示
%% X是一个向量
% X=2:3:30;
% plot(X)
%%X是一个矩阵
X=[2 5 9;7 8 1;9 6 3;];
%% plot(x,y),x,y为向量
% x=[1 5 9 3];
% y=[4 2 6 9];
% plot(x,y)
%% x,y均为矩阵
% A=[1 2 6;3 10 9;];
% B=[5 7 2;12 9 3;];
% plot(A,B)
%% 复数
% x是一个复数,横坐标为实部,纵坐标为虚部
% plot([5+3*1i,3+8*1i])
t=0:0.01:1;
rho=2*sin(t*2*pi)+6*(t*2*pi*2*pi);
sita=t*2*pi;
phi=log(1+t*2*pi).*t*2*pi;
x=rho.*sin(sita).*cos(phi);
y=rho.*sin(sita).*sin(phi);
z=rho.*cos(sita);
plot3(x,y,z,'b--');//plot3三维绘图函数
% sita=[0 0.2];
% r=[0 10];
% % polar(sita,r)
% polar(sita,r,'b--')
% k=2;n=3;
% sita=0:0.1:2*pi;
% rho=k*sin(n*sita);
% polar(sita,rho,'r:')%极坐标函数图像
矩阵
矩阵的三种输入
A=[1 2 3;4 5 6;7 8 9;];
B=[1 2 3
4 5 6
7 8 9];
C=[1,2,3;
4,5,6;
7,8,9;];
%% 建立系数矩阵
A=[1,2,1;2,-1,2;1,3,-2;];
b=[6;2;5;];
%% 建立增广矩阵
B=[A,b]
B1=[A b]%增加一列
b1=b';
C=[A;b1]
%% 获取一个矩阵的大小
%size()函数
% A=[1,2,1;2,-1,2;1,3,-2;3,7,9;];
% [a,b]=size(A)%a为行数,b位列数
% [~,b]=size(A)%只返回列数
% c=size(A,1)%返回的就是行数
% c=size(A,2)%返回的就是列数
%% 矩阵大小的改变
% A=[1,2,1;2,-1,2;1,3,-2;3,7,9;];
% B=reshape(A,3,4)
%reshape可更改矩阵的大小,但更改前后元素的个数是不变的
%% 矩阵的索引
%下标索引
% A=magic(100);
% b=A(56,71)%寻找第56行71列的数据
% A(56,71)=1;%第56行71列的数据改为1
%绝对序号索引
% A=magic(3);%3*3的矩阵
% c=sub2ind(size(A),2,2);%将第二行第二列的数输出
% [m,n]=ind2sub(size(A),5);%将绝对序号为5的数的下标输出,m为行数,n位列数
%size函数
% [m,~]=size(A);%只输出行数
% m=size(A,1);%输出行数
% n=size(A,2);%输出列数
%冒号索引
% A=magic(10);
% b=A(3:2:7,3:7);%读取第3,5,7行,3到7列的数据
% c=A(:,1)%读取第一列所有行的所有元素
%浮点数的增广矩阵的书写:与一般矩阵的书写相同,数据默认存储时都以double存储
%浮点数:单精度的浮点数single
%整型:无符号整型和有符号整型
%有符号整型 int8 int16 int32 int64
%int8表示范围:intmin() intmax(),[-128,127] -2^7--2^7-1
%无符号整型:uint8,uint16,uint32 uint64
%uint8表示范围:[0,255] 0--268-1
%uint64表示范围:[0,1.844674407370955e+19] 0--2^64-1
%圆整函数ceil,floor,round,fix
%利用数值类型圆整 int8:类似于round函数,uint8:如果是小于0的数,则圆整到0,若大于0,则四舍五入的方法圆整
if选择语句
% A=[2,3;4,5;];
% B=[2 4 6;9 7 6;0 7 3;];
% if size(A,1)>size(B,1)
% disp('A的行大于B的行');
% elseif size(A,1)>size(B,1)
% disp('A的行小于B的行');
% else
% disp('A的行等于B的行');
% end
while语句
%while(判断条件)
%语句
%end
% a=input('请输入一个数');
% while(a>2)
% a=a-1;
% end
% b=input('请输入成绩:');
% while 1
% flag=0;
% if b>90
% disp('成绩优秀!');
% flag=1;
% end
% if flag==1
% break;%终止循环
% end
% b=input('请输入成绩:');
% end
for循环
% x1=[1 2 3 4 5 6];
% y1=[5 7 8 9 4 3];
% x2=[5 2 6 4 1 6];
% y2=[3 7 9 2 4 0];
% for i=1:size(x1,2)%计算点的距离
% d(i)=sqrt((x1(i)-x2(i))^2+(y1(i)-y2(i))^2)
% end
% k=1;
% for i=1:2:size(x1,2)
% d(i)=sqrt((x1(i)-x2(i))^2+(y1(i)-y2(i))^2);
% k=k+1;%算第一对点,第三对点,第五对点的距离,矩阵不会扩充
% end
% k=1;
% for i=size(x1,2):-1:1%计算点的距离
% s(k)=sqrt((x1(i)-x2(i))^2+(y1(i)-y2(i))^2)
% k=k+1;
% end
% k=1;
% for i=[2,3,5,6]%计算特定点的距离
% s(k)=sqrt((x1(i)-x2(i))^2+(y1(i)-y2(i))^2)
% k=k+1;
% end
函数与子函数
a=[2 3 8 6];
result=main_a(a);
另一个文件中编写主函数
function result=main_a(a)
b=a(1);
c=a(2);
d=a(3);
e=a(4);
add_result=add_1(b,c,d,e);
sub_result=sub_1(b,c,d,e);
mul_result=mul_1(b,c,d,e);
div_result=div_1(b,c,d,e);
result=add_result+sub_result+mul_result+div_result;
%子函数
function add_result=add_1(b,c,d,e)
add_result=b+c+d+e;
function sub_result=sub_1(b,c,d,e)
sub_result=b-c-d-e;
function mul_result=mul_1(b,c,d,e)
mul_result=b*c*d*e;
function div_result=div_1(b,c,d,e)
div_result=b/(c*d*e);
解线性方程组
function result=my_det(A)
%my_det行列式的计算
%my_det(A)
if nargin==0 %记录是输入变量的个数
error('您的输入是空的');
end
if size(A,1)~=size(A,2) || isempty(A)||isscalar(A)%标量 %是否为方阵,空矩阵,标量
warning('请输入方阵');
return;
end
if iszero(A)==0 %判断0行0列
result=0;
return;
end
%% 子函数
function b=iszero(A)
m=size(A,1);
for k=1:m
if A(:,k)==0||A(k,:)==0
b=0;
return;
end
end
行列式的计算函数
function result=my_det(A)
%my_det行列式的计算
%my_det(A)
if nargin==0 %记录是输入变量的个数
error('您的输入是空的');
end
if size(A,1)~=size(A,2) || isempty(A)||isscalar(A)%标量 %是否为方阵,空矩阵,标量
warning('请输入方阵');
return;
end
if iszero(A)==0
result=0;
return;
end
k=1;
row=size(A,1);%
while row~=1
m=size(A);
V=find(A(:,1)~=0);
n=size(V);
for h=2:n
A(V(h),:)=A(V(h),:)+A(V(1),:)*(-A(V(h),1)/A(V(1),1));
end
re(k)=(-2*rem(V(1)+1,2)+1)*A(V(1),1);
k=k+1;
A(V(1),:)=[];
A(:,1)=[];
row=size(A);
end
result=prod(re)*A;
%% 子函数
function b=iszero(A)
m=size(A,1);
for k=1:m
if (A(:,k)==0)||(A(k,:)==0)
b=0;
return;
end
end
b=1;
%解线性方程组的解--克莱姆法则
%det函数求一个方阵的行列式的值
%x1+2*x2+x3=6
%2*x1-x2+2*x3=2
%x1+3*x2-2*x3=5
D=[1 2 1;2 -1 2;1 3 -2;]
D1=[6 2 1;2 -1 2;5 3 -2;]
D2=[1 6 1;2 2 2;1 5 -2;]
D3=[1 2 6;2 -1 2;1 3 5;]
% x1=det(D1)/det(D)
% x2=det(D2)/det(D)
% x3=det(D3)/det(D)
x11=my_det(D1)/my_det(D)
x21=my_det(D2)/my_det(D)
x31=my_det(D3)/my_det(D) %my_det为自己编写的det函数
rref函数求解方程组,未知量的个数需要与方程组相同
A=[1 2 1;2 -1 2;1 3 -2]
b=[6;2;5]
B=[A,b]
[a,c]=rref(B)
%x1+2*x2+x3=6
%2*x1-x2+2*x3=2
%x1+3*x2-2*x3=5
%1+2^4+3^4+4^4+......+n^4用多项式表示
%提示:原式=a1*n+a2*n^2+a3*n^3+a4*n^4+a5*n^5
A=[1 1 1 1 1 1;
2 4 8 16 32 1+2^4;
3 9 27 81 243 1+2^4+3^4;
4 16 64 256 1024 1+2^4+3^4+4^4;
5 25 125 625 3125 1+2^4+3^4+4^4+5^4]
d=rref(A);
x1=d(1,6);x2=d(2,6);x3=d(3,6);x4=d(4,6);x5=d(5,6);
e=1+2^4+3^4+4^4+5^4+6^4%验证
f=x1*6+x2*6^2+x3*6^3+x4*6^4+x5*6^5%验证
%特殊矩阵-quan0矩阵 zeros()
%B=zeros(1,5)
% tic%通常和toc共用,计算两者之间语句花费时间
% for m=1:1000
% for n=1:1000
% a(m,n)=m+n;
% end
% end %上下两者所花费的时间不同,上花费时间相对下花费时间较长,下面程序A已开辟较大内存
% toc
% tic%通常和toc共用,计算两者之间语句花费时间
% A=zeros(1000,1000);
% for m=1:1000
% for n=1:1000
% A(m,n)=m+n;
% end
% end
% toc
A=zeros(1000,1000,'single');%每个元素占四个字节