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

采纳的回答

Guillaume
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
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 CenterFile Exchange 中查找有关 Whos 的更多信息

产品


版本

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by