Undefined function or variable
1 次查看(过去 30 天)
显示 更早的评论
Dear All,
I am trying to estimate parameters using non-linear least squares. The version of Matlab I am using is R2018a.
My function is stored in a file myfun.m and has the following lines of code.
function F = myfun(x)
F = (y - (1 + x(1)*(x(2)/0.002))*X1 - (1-x(1)^2)*(x(2)/x(3))*X2 - x(4)*X3)
My dataset is a matrix read in as column vectors which includes the column vectors y, X1,X2, and X3 are stored in a file in a data file.
Both the data file and the file containing the code are in this directory: 'D:\Users\Srinivasan Rangan'
When I type pwd, the above directory is displayed as the current directory.
Before estimating the function, I open the dataset and I see all the variables of the dataset under the workspace panel on the right hand side of the screen.
However, when I try to estimate the parameters of the function using
x = lsqnonlin(myfun,x0)
I get the following error message:
undefined function or variable 'y'.
Error in myfun (line 2)
F = (y - (1 + x(1)*(x(2)/0.002))*X1 - (1-x(1)^2)*(x(2)/x(3))*X2 - x(4)*X3)
I do see y as loaded in the right hand panel under workspace.
How can I fix this error and perform my estimation?
Thanks, Srinivasan
0 个评论
采纳的回答
Guillaume
2018-7-15
Function can't see the variables in your main workspace. You have to pass any variable you want to use to the function.
Change your function to:
function F = myfun(x, y, X)
F = (y - (1 + x(1)*(x(2)/0.002))*X(:,1) - (1-x(1)^2)*(x(2)/x(3))*X(:, 2) - x(4)*X(:,3));
end
Then change the lsqnonlin call to:
X = [X1, X2, X3]; %numbered variables are bad. Use arrays instead
x = lsqnonlin(@(x) myfun(x, y, X), x0);
A better name than X would be better. One that has meaning.
更多回答(1 个)
Walter Roberson
2018-7-15
y exists in your base workspace, but not in the workspace of your function.
You can either pass y to the function as a parameter, or you can define myfun as an anonymous function after you load y.
https://www.mathworks.com/help/matlab/math/parameterizing-functions.html
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Whos 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!