Matlab 中while循環語句的用法
while語法:
while expression
statements
end
說明:while expression, statements, end 計算一個表達式,并在該表達式為 true 時在一個循環中重復執行一組語句。表達式的結果非空并且僅包含非零元素(邏輯值或實數值)時,該表達式為 true。否則,表達式為 false。
示例代碼如下:
function [sum] = summation(ratio, head, top)
sum = 0;
while (head <= top)
sum = sum + ratio ^ head;
head = head + 1;
end
end
假設ratio = 2,head = 0,top = 63
擴展資料:
Matlab控制流語句包括條件語句、循環和分支。
if, elseif, else 條件為 true 時執行語句。
for 用來重復指定次數的 for 循環。
parfor 并行循環。
switch, case, otherwise 執行多組語句中的一組。
try, catch 執行語句并捕獲產生的錯誤。
while 條件為 true 時重復執行的 while 循環。
break 終止執行 for 或 while 循環。
continue 將控制權傳遞給 for 或 while 循環的下一迭代。
end 終止代碼塊或指示最大數組索引。
pause 暫時停止執行 MATLAB。
return 將控制權返回給調用函數。
參考資料:
MathWorks文檔——while循環
matlab 如何使用循環語句
一、基本技術 ----------------------------------------------------- 1)MATLAB索引或引用(MATLAB Indexing or Referencing) 在MATLAB中有三種基本方法可以選取一個矩陣的子陣。
它們分別是 下標法,線性法和邏輯法(subscripted, linear, and logical)。 如果你已經熟悉這個內容,請跳過本節 1.1)下標法 非常簡單,看幾個例子就好。
A = 6:12; A([3,5]) ans = 8 10 A([3:2:end]) ans = 8 10 12 A = [11 14 17; 。 12 15 18; 。
13 16 19]; A(2:3,2) ans = 15 16 1.2)線性法 二維矩陣以列優先順序可以線性展開,可以通過現行展開后的元素序號 來訪問元素。 A = [11 14 17; 。
12 15 18; 。 13 16 19]; A(6) ans = 16 A([3,1,8]) ans = 13 11 18 A([3;1;8]) ans = 13 11 18 1.3)邏輯法 用一個和原矩陣具有相同尺寸的0-1矩陣,可以索引元素。
在某個 位置上為1表示選取元素,否則不選。得到的結果是一個向量。
A = 6:10; A(logical([0 0 1 0 1])) ans = 8 10 A = [1 2 3 4]; B = [1 0 0 1]; A(logical(B)) ans = 1 4 ----------------------------------------------------- 2)數組操作和矩陣操作(Array Operations vs. Matrix Operations) 對矩陣的元素一個一個孤立進行的操作稱作數組操作;而把矩陣視為 一個整體進行的運算則成為矩陣操作。MATLAB運算符*,/,,^都是矩陣 運算,而相應的數組操作則是.*, ./, ., .^ A=[1 0 ;0 1]; B=[0 1 ;1 0]; A*B % 矩陣乘法 ans = 0 1 1 0 A.*B % A和B對應項相乘 ans = 0 0 0 0 ------------------------------------------------------ 3)布朗數組操作(Boolean Array Operations) 對矩陣的比較運算是數組操作,也就是說,是對每個元素孤立進行的。
因此其結果就不是一個“真”或者“假”,而是一堆“真假”。這個 結果就是布朗數組。
D = [-0.2 1.0 1.5 3.0 -1.0 4.2 3.14]; D >= 0 ans = 0 1 1 1 0 1 1 如果想選出D中的正元素: D = D(D>0) D = 1.0000 1.5000 3.0000 4.2000 3.1400 除此之外,MATLAB運算中會出現NaN,Inf,-Inf。對它們的比較參見下例 Inf==Inf返回真 InfNaN==NaN返回假 同時,可以用isinf,isnan判斷,用法可以顧名思義。
在比較兩個矩陣大小時,矩陣必須具有相同的尺寸,否則會報錯。這是 你用的上size和isequal,isequalwithequalnans(R13及以后)。
------------------------------------------------------ 4)從向量構建矩陣(Constructing Matrices from Vectors) 在MATLAB中創建常數矩陣非常簡單,大家經常使用的是: A = ones(5,5)*10 但你是否知道,這個乘法是不必要的? A = 10; A = A(ones(5,5)) A = 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 類似的例子還有: v = (1:5)'; n = 3; M = v(:,ones(n,1)) M = 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 事實上,上述過程還有一種更加容易理解的實現方法: A = repmat(10,[5 5]); M = repmat([1:5]', [1,3]); 其中repmat的含義是把一個矩陣重復平鋪,生成較大矩陣。 更多詳細情況,參見函數repmat和meshgrid。
----------------------------------------------------- 5)相關函數列表(Utility Functions) ones 全1矩陣 zeros 全0矩陣 reshape 修改矩陣形狀 repmat 矩陣平鋪 meshgrid 3維plot需要用到的X-Y網格矩陣 ndgrid n維plot需要用到的X-Y-Z。網格矩陣 filter 一維數字濾波器,當數組元素前后相關時特別有用。
cumsum 數組元素的逐步累計 cumprod 數組元素的逐步累計 eye 單位矩陣 diag 生成對角矩陣或者求矩陣對角線 spdiags 稀疏對角矩陣 gallery 不同類型矩陣庫 pascal Pascal 矩陣 hankel Hankel 矩陣 toeplitz Toeplitz 矩陣 ========================================================== 二、擴充的例子 ------------------------------------------------------ 6)作用于兩個向量的矩陣函數 假設我們要計算兩個變量的函數F F(x,y) = x*exp(-x^2 - y^2) 我們有一系列x值,保存在x向量中,同時我們還有一系列y值。 我們要對向量x上的每個點和向量y上的每個點計算F值。
換句話 說,我們要計算對于給定向量x和y的所確定的網格上的F值。 使用meshgrid,我們可以復制x和y來建立合適的輸入向量。
然后 可以使用第2節中的方法來計算這個函數。 x = (-2:.2:2); y = (-1.5:.2:1.5)'; [X,Y] = meshgrid(x, y); F = X .* exp(-X.^2 - Y.^2); 如果函數F具有某些性質,你甚至可以不用meshgrid,比如 F(x,y) = x*y ,則可以直接用向量外積 x = (-2:2); y = (-1.5:.5:1.5); x'*y 在用兩個向量建立矩陣時,在有些情況下,稀疏矩陣可以更加有 效地利用存儲空間,并實現有效的算法。
我們將在第8節中以一個 實例來進行更詳細地討論. -------------------------------------------------------- 7)排序、設置和計數(Ordering, Setting, and Counting Operations) 在迄今為止討論過的例子中,對向量中一個元素的計算都是獨立 于同一向量的其他元素的。但是,在許多應用中,你要做的計算 則可能與其它元素密切相關。
例如,假設你用一個向量x來表示一 個集合。不觀察向量的其他元素,你并不知道某個元素是不是一 個冗余元素,并應該被去掉。
如何在不使用循環語句的情況下刪除 冗余元素,至少在現在,并不是一個明顯可以解決的問題。 解決這類問題需要相當的智巧。
以下介紹一些可用的基本工具 max 最大元素 min 最小元素 sort 遞增排序 unique 尋找集合中。
Matlab for 循環語句
沒仔細研究你那個擬合函數的用法。
不過像這種需要分段處理數據的情況很多,有種在 matlab 里很常用的技巧感覺你可以學學:
假設原始數據(xdata)是一列 100 個數,你需要一次處理 13 個,那么下面這段代碼先將這 100 數“折疊”成一個 13 行的矩陣(x)。 我這個例子里是折疊成 13 * 8 的矩陣了。
因為 100 不能整除 13,所以會在最后補零。如果你不需要補零,而是把最后的零頭扔掉,那么就把
ncol = ceil(nxdata/n);改成
ncol = fix(nxdata/n);最后就可以在循環里一列一列的處理數據了。我這個例子只是 y(:,i) = x(:,i) 而已,你的情況應該就是調用你自已寫的擬合函數。
最后再用
y = y(:);把數據還原成一維的。
如果你需要把之前補零的值刪掉也可以在還原成一維的時候去掉。
以下是一個小例子,仔細研究一下就能學會這個小技巧了。
xdata = (1:100).';
nxdata = length(xdata);
nrow = 13; % 假設你需要一次處理 13 個數據
ncol = ceil(nxdata/nrow);
x = zeros(nrow, ncol, 'like', xdata);
size(x)
x(1:nxdata) = xdata(:);
y = zeros(nrow, ncol, 'like', xdata);
for i = 1:ncol
y(:,i) = x(:,i);
end
y = y(:);如果你在處理數據之前,能保證折疊之后是整除的,即無需補零。還用我這個小例子,比如需要折疊成 10 行,也可以用 reshape(xdata, 10, [])。[] 是讓 matlab 自己算整除后是多少列。如:
x2 = reshape(xdata, 10, []);
size(x2)
matlab中有循環語句嗎
有,但是不是用方括號將下標括起來,而是用圓括號;并且下標不是從0開始,而是從1開始的。
下面是一個操作例子,假設數組v中保存有 從 1到100的整數,要求用for循環語句來求這些元素的和,
并將結果保留于sum中,則操作如下:
>> v=1:100
v =
Columns 1 through 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Columns 26 through 50
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
Columns 51 through 75
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
Columns 76 through 100
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
>> sum=0;
>> for i=1:100
sum = sum + v(i);
end
>> sum
sum =
5050
>>
轉載請注明出處華閱文章網 » matlab的循環語句