簡體   English   中英

Matlab:我可以在函數定義中訪問工作區變量嗎?

[英]Matlab: Can I access workspace variables in function definition?

我想找到最小化的常數a1,b1

\\ sum_ {k = 1} ^ {n} | a_1 x_k + b_1-y_k |

所以我寫了下面的matlab代碼( nlp.m ):

function NLP
x0 = ones(2, 1);
[a1b1, sum1] = fmincon(@objfun, x0, [], [], [], [], [], [], [])

function sum1 = objfun(a1b1)
sum1 = sum(abs(a1b1(1) * x + a1b1(2) - y));

在工作區中創建的xy n向量

但是,當我運行nlp.m時,出現以下錯誤:

>> nlp
Undefined function or variable 'x'.
...

似乎我無法訪問工作空間中定義的變量。 那么我該如何處理呢?

您可以直接從腳本而非函數訪問基本工作區中的變量。 要將這些變量傳遞給目標函數,請參見http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html

因此,您可以將功能更改為使用如下腳本:

% NLP - script
x0 = ones(2, 1);
f = @(a1b1)objfun(a1b1,x,y);
[a1b1, sum1] = fmincon(@f, x0)

並在單獨的函數中定義目標函數:

function sum1 = objfun(a1b1, x, y)
sum1 = sum(abs(a1b1(1) * x + a1b1(2) - y));

另一種選擇是將基本工作空間保存到一個文件,然后將此文件加載到您的main函數中。 在這種情況下,您可以像這樣更新功能:

function nlp
% save workspace variable to file
evalin('base','save(''ws.mat'',''x'',''y'');')
x0 = ones(2, 1);
s=load('ws.mat');
x=s.x;y=s.y;
f = @(a1b1)objfun(a1b1, x, y);
[a1b1, sum1] = fmincon(@f, x0);

function sum1 = objfun(a1b1, x, y)
sum1 = sum(abs(a1b1(1) * x + a1b1(2) - y));

暫無
暫無

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

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