MATLAB---初识实例1

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');%每个元素占四个字节
 

猜你喜欢

转载自blog.csdn.net/weixin_42107106/article/details/82823363
今日推荐