簡體   English   中英

如何在MATLAB中調用for循環中的函數?

[英]How to call a function in a for loop in MATLAB?

我想在循環中調用(執行)一個m文件(函數),如下所示:

global m, r
m = 2;
for n = 2:10;
  for r1 = 0:n-m;
    r2 = n-m-r1;
    r = [r1,r2];   
    [Call the function here?????????]
  end
end

這是功能:

function main
  x0 = [-0.5403,0.5471];
  fsolve(@fcn,x0)

function z = fcn(X)
  rand('twister',5409);
  global m, r
  a = rand(m,1);
  for i = 1:m
    sm(i) = 0.0;
    for l = m-i+1:m
      sm(i) = sm(i)+r(l);
    end
    s = 1.0/(i+sm(i));
    g(i) = (a(i))^s;     
  end
  prod = 1.0;
  for k = 1:m
    prod = prod * g(m+1-k);
    u(k) = 1.0-prod;
    x(k) = (sqrt(3)/pi)*log(u(k)/(1-u(k)));
  end
  sum = 0;
  sum1 = 0;
  sum2 = 0;
  for j = 1:m
    sum = sum+(r(j)+2)*(1/(1+exp((-pi/sqrt(3))*((x(j)-X(1))/X(2)))));
    sum1 = sum1+(r(j)+2)*((x(j)-X(1))/X(2))*(1/(1+exp((-pi/sqrt(3))*((x(j)-X(1))/X(2)))));
    sum2 = sum2+(x(j)-X(1))/X(2);
  end
  z(1) = pi/(X(2)*sqrt(3))*(-m+sum);
  z(2) =(-1/X(2))*(m+(pi/sqrt(3))*(sum2-sum1));

非常感謝您的幫助。

函數mainfcn應保存在名為“main.m”的文件中。 您必須確保此文件位於當前工作目錄中或MATLAB路徑上的某個位置 (如Amro的注釋中所述),以便MATLAB可以訪問它。 由於main不需要輸入參數且沒有輸出參數,因此您可以通過以下任何一種方式調用它:

main
main;
main()
main();

如果你有一個Main.m功能

的main.m

function out = main(in)
% blah blah blah

你可以調用這個函數

in = 2;
out = main(in)

這有意義嗎?

我個人會在沒有main()部分的情況下創建你的函數。

用你的函數fcn創建一個名為fcn.m的文件,確保它在你的工作目錄或matlab路徑中,然后在你的循環中調用它。

addpath(genpath('/the/path/to/your/function/');
global m, r
m = 2;
for n = 2:10;
  for r1 = 0:n-m;
    r2 = n-m-r1;
    r = [r1,r2];   
    z=fcn(r)
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM