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
