20-matlab全排列-函數調用


matlab中global的用法

Matlab 中子函數不傳參直接調用主函數global變量方法  
在一個m文件里要調用一個函數(自定義的),但是我希望這個函數能利用並修改workspace中的變量(m文件中的),可是函數的變量全是局部的,無法修改工作區的變量,該怎么辦?

 

同時在“函數(自定義的)”和m文件中需要使用修改的變量申明為全局變量就可以了。就是變量前面加GLABAL
例如:
main.m
clc;clear

global Mat1

Mat1=5;
b=add(3);

子函數 add.m
function sum=add(x)
global Mat1;
sum=Mat1+x;

輸出結果: b=8

使用golbal的優點:

1 傳遞大數據的參數
  如果通過函數傳參數的方式的話,系統會浪費過多的時間在復制數據的時間上,如果采用global的方式共享數據的話代碼的效率會大大提高

2 過多的常量需要傳遞
  如果每個量都作為函數函數的參數傳遞的話,代碼參數列表就很長,如果采用global的話代碼的可讀性提高,函數調用也方便
---------------------
全排列函數:1到4的全排列

y_quanpailei.m:
function y_quanpailei(ct)
    global ans1 a visit;
    if ct == 4
        a
        ans1 = ans1 + 1;
        return
    end
    for i = 1:4
        if visit(i) == 0
            a(ct+1) = i;
            visit(i) = 1;
            y_quanpailei(ct + 1);
            visit(i) = 0;
        end
    end
end

 test.m

clc;
clear;
global ans1  a  visit;
ans1 = 0;
a = zeros(1,4);
visit = zeros(1,4);
y_quanpailei(0)
ans1

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM