1. 程式人生 > >MATLAB---初識例項1

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');%每個元素佔四個位元組