matlabの紛らわしい(または便利な)操作を時々整理して記録します

1.階乗

まだ古い方法、私は自分自身を呼びます

factorial=@(n) (n>1)*n*factorial(n-1)+(n==1)

2.変換スイッチの場合

論理演算の巧妙な使用

score=68
switch 1
    case 90<=score&&score<=100,disp('优秀');
    case 70<=score&&score<90,disp('良好');
    case 60<=score&&score<70,disp('一般');
    case score<60,disp('不及格');
end

3.ランダムな一次掃海マトリックスを生成します
rand_mat=rand(9,9);
[~,order]=sort(rand_mat(:));
mine=zeros(9,9);
mine(order(1:10))=1;

4.マトリックス内の要素0の行を削除します
A=[2 3 4 0;3 6 2 6;1 2 0 4;3 4 9 1];
A(sum(A(:,:)==0,2)~=0,:)=[]
%同理删除含有元素0的列:
%A(:,sum(A(:,:)==0,1)~=0)=[]


5.タイマーによって作成された小さなアニメーションが終了していないときは、右上隅から優雅に閉じる必要があります
set(gcf,'tag','co','CloseRequestFcn',@clo);
    function clo(~,~)
        stop(game)
        delete(findobj('tag','co'));
        clf
        close
    end 
%注:其中的stop(game)中的game是timer函数构造的实例名称。

6.画像を削除します
delete(findobj('type','line'))%删除类似于plot的线性图像
deletd(findobj('type','patch'))%删除类似于fill的填充图像

%当你只想删除部分图像时,不妨给他们加个'tag'
%例如plot(x,y,'tag','plotline')
%   delete(findobj('tag','plotline'));

7.MATLABフィッティング関数が無名関数に変換された後
x=[2 2.5 3 3.5 4 4.5 5 5.5 6];
y=[41 38 34 32 29 28 25 22 20];
p=polyfit(x,y,3)
f=matlabFunction(poly2sym(p))

8.画像の境界線を非表示にします
set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')

9.フィギュア上のマウスの位置を取得します
set(gcf,'WindowButtonMotionFcn',@getpos)
function getpos(~,~)
        xy=get(gca,'CurrentPoint');
        x=xy(1,1);y=xy(1,2);
    end

10.黒と白のプレイヤーが交代でチェスをしますか?
turn=0
while 条件
    turn=mod(turn+1,2);
    switch turn
        case: 1,下黑子;
        case: 0,下白子;
    end
end

11.行列の各行または列の最大値を取得します
A=[1 2 4;4 5 6;7 8 9];
max_A_rows=max(A,[],2)
max_A_cols=max(A,[],1)

12.行列を初期化するための0xnサイズの行列を作成します
mat=ones(1,n);
mat(1,:)=[];
%这样的初始化矩阵可以直接往后面并上新的元素

13.マトリックス内の存在しない要素または無限の要素を削除します
mat1=[nan,4,5];
mat1(isnan(mat1))=[];

mat2=[inf,6,7];
mat2(isinf(mat2))=[];

14.デフォルト値を設定します
function example(arg1,arg2,arg3)
    if nargin<2
        arg2='';
    end
    if nargin<3
        arg3='';
    end
end

15.厳密なロジックを使用して、MATLABで閉じることができない画像を閉じます(タスクプロセスマネージャーがオフにすることができます)
function bug
set(gcf,'tag','co','CloseRequestFcn',@draw)
    function draw(~,~)
        spy
    end
draw()
end

16.理解できる永久カレンダー(a、b、cはそれぞれ年、月、日)
function y=wannianli(a,b,c)
yue=[1 0 0;2 31 31;3 59 60;4 90 91;5 120 121;6 151 152;7 181 182;8 212 213;9 243 244;10 273 274;11 304 305;12 334 335];
y=mod(((a-1)*365+floor((a-1)/4)-floor((a-1)/100)+floor((a-1)/400)+yue(yue(:,1)==b,3-((~mod(a,4)==0)||((mod(a,100)==0)&&(~mod(a,400)==0))))+c+7),7);
end

17.複雑な行列の転置
a=a(:).'
%来源:https://www.cnblogs.com/hgyzm/p/10298100.html

18.既知の隣接行列を持つ到達可能な行列を見つけます
function P=dgraf(A)
n=size(A,1);
P=A;
for i=2:n
    P=P+A^i;
end
P(P~=0)=1;
end
%来源:《图论算法及matlab实现》
%      北京航空航天大学出版社

19.役に立たないプログラム
function nothing=nothing(nothing),end

20.クリックした画像のシリアル番号を確認します

画像が画像で作成されている場合は、その画像に「ButtonDownFcn」を設定し、@ clickOnPicなどのコールバックを設定できます。

PicHdl(i)=image([xMin xMax],[yMin yMax],picName,'tag',num2str(i),'ButtonDownFcn',@clickOnPic);

次に、clickOnPicの最初の入力にオブジェクトとして名前を付け、そのタグ値を取得します

function clickOnPic(object,~)
	picId=object.Tag;
end

詳細な使用法については、Lianliankanプログラムまたは私が作成したPlants vs.Zombiesプログラムを参照してください。


21.魔法の画像

超超超短、超超超魔法、私はずっと前にそれを知っていました、そしてソースを見つけるのは少し難しいです

mat=eye(40);
plot(fft(mat)); axis equal

ここに画像の説明を挿入します


22.RGBカラーと16進数のカラー変換

RGBカラー-> 16進カラー

function string=ten2sixteen(num)
            %the num should be a 1x3 Integer mat limited in [0 255]
            exchange_list={
    
    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
            string='#';
            for ii=1:3
                temp_num=num(ii);
                string(1+ii*2-1)=exchange_list{
    
    (temp_num-mod(temp_num,16))/16+1};
                string(1+ii*2)=exchange_list{
    
    mod(temp_num,16)+1};
            end
        end

16進数の色-> RGBカラー

function num=sixteen2ten(string)
        exchange_list='0123456789ABCDEF#';
        ismember(string,exchange_list)
        num=zeros(1,3);
        if all(ismember(string,exchange_list))
            for ii=1:3
                tempCoe1=find(ismember(exchange_list,string(ii*2))==1)-1;
                tempCoe2=find(ismember(exchange_list,string(ii*2+1))==1)-1;
                num(ii)=16*tempCoe1+tempCoe2;
            end
        else
            num=nan;
        end
        end 

おすすめ

転載: blog.csdn.net/slandarer/article/details/104082465