undefined function 'f'

2 ビュー (過去 30 日間)
Titas Chattopadhyay
Titas Chattopadhyay 2020 年 3 月 31 日
コメント済み: Ameer Hamza 2020 年 3 月 31 日
tmesh = linspace(0,pi/2,5);
solinit = bvpinit(tmesh, @f);
sol = bvp4c(@odefun, @bcfun, solinit);
plot(sol.x, sol.y, '-o');
FUNCTION
function dzdt = odefun(t,z)
dzdt = zeros(2,1);
dzdt = [z(2)+z(1)];
end
% boundary conditions
function res = bcfun(za, zb)
res = [za(1) zb(pi/2)-2]
end
% Initial guess
function g = f(t)
g = [sin(t) cos(t)];
end
error unrecognized function or variable 'f'
  3 件のコメント
Walter Roberson
Walter Roberson 2020 年 3 月 31 日
If you stored those three functions together in one file, and had the script in another file, then the script would only be able to see the first function inside the file of functions. Only the first function in a file of functions is visible to the outside normally; the rest are private implementations only for use by that function (typically)
Titas Chattopadhyay
Titas Chattopadhyay 2020 年 3 月 31 日
So, I have to make 3 function files for func ,bcs and ics. Right?

サインインしてコメントする。

採用された回答

Ameer Hamza
Ameer Hamza 2020 年 3 月 31 日
編集済み: Ameer Hamza 2020 年 3 月 31 日
Either write all the functions in one file like this. (Also note that I have made few changes in your code.)
tmesh = linspace(0,pi/2,5);
solinit = bvpinit(tmesh, @f);
sol = bvp4c(@odefun, @bcfun, solinit);
plot(sol.x, sol.y, '-o');
function dzdt = odefun(t,z)
dzdt = zeros(2,1);
dzdt = [z(2); z(1)]; % <----- This should be a 2x1 vector
end
% boundary conditions
function res = bcfun(za, zb)
res = [za(1); zb(2)-2]; % <---- boundary conditions are written like this, zb(pi/2) is invalid
end
% Initial guess
function g = f(t)
g = [sin(t) cos(t)];
end
Or create 4 files like this.
main_script:
tmesh = linspace(0,pi/2,5);
solinit = bvpinit(tmesh, @f);
sol = bvp4c(@odefun, @bcfun, solinit);
plot(sol.x, sol.y, '-o');
odefun.m:
function dzdt = odefun(t,z)
dzdt = zeros(2,1);
dzdt = [z(2); z(1)];
end
bcfun.m:
% boundary conditions
function res = bcfun(za, zb)
res = [za(1); zb(2)-2];
end
f.m:
% Initial guess
function g = f(t)
g = [sin(t) cos(t)];
end
  2 件のコメント
Titas Chattopadhyay
Titas Chattopadhyay 2020 年 3 月 31 日
Thank you so much.
Ameer Hamza
Ameer Hamza 2020 年 3 月 31 日
Glad to be of help.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by