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