Function definition not supported in this context. Create functions in code file.

12 ビュー (過去 30 日間)
Duc Tu Vu
Duc Tu Vu 2018 年 10 月 11 日
コメント済み: Adam 2021 年 12 月 8 日
Below is my code to solve the parallel plate capacitor problem.
clear all
x=linspace(1,20,10);
y=linspace(1,20,10);
[X,Y]=meshgrid(x,y);
C=delaunay(X(:),Y(:));
xy=[X(:) Y(:)];
Np=length(xy);
S=MatGlob(xy,C);
F=sparse(Np,1);
V0=1;
G=1e12;
for k=1:Np;
if x(k)==1
S(k,k)=S(k,k)+G;
F(k)=G*(-V0);
if x(k)==20
S(k,k)=S(k,k)+G;
F(k)=G*(+V0);
end
V=S\F;
figure
plot(xy,V,'*-')
title('potential(V)')
xlabel('postition(m)')
ylabel('postition(m)')
hold on
function S=MatGlob(xy,C)
Np=length(xy);
S=sparse(Np,Np);
Epsr=3.5;
Ne=size(C,1);
for k=1:Ne
N=C(k,:);
x1=xy(N(1),1);
x2=xy(N(2),1);
x3=xy(N(3),1);
y1=xy(N(1),2);
y2=xy(N(2),2);
y3=xy(N(3),2);
abc1=[1 x1 y1;1 x2 y2;1 x3 y3]\[1;0;0];
abc2=[1 x1 y1;1 x2 y2;1 x3 y3]\[0;1;0];
abc3=[1 x1 y1;1 x2 y2;1 x3 y3]\[0;0;1];
Grad=[abc1(2) abc2(2) abc3(2); abc1(3) abc2(3) abc3(3)];
Se=Epsr*(Grad'*Grad)*abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;
S(N,N)=S(N,N)+Se;
end
end
Yet, Matlab annouce the error as follows: "Function definition not supported in this context. Create functions in code file" Would you please help me to fix this error? Thank you in advance.
  5 件のコメント
Adam
Adam 2021 年 12 月 8 日
And you are getting the error about function definitions not being permitted in that context or some other problem?

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

採用された回答

Steven Lord
Steven Lord 2018 年 10 月 11 日
When I Smart Indent your code, I see that the function definition is inside both a for loop and an if statement. That is not allowed. That restriction is explicitly stated in the documentation listing the requirements for nested functions. While that restriction is not explicitly stated in the documentation for local functions in a script file, it holds for those functions as well. You can see this by hovering over the function keyword underlined in red (indicating a Code Analyzer error) in the Editor and asking for more details.
You also have one too few end keywords in the code you posted, though that may be the result of accidentally omitting the trailing end in your code when you copied and pasted it into Answers. When I add two end statements prior to the function definition and ran the code, I saw a plot but it threw an error as well. I recommend checking lines 6 and 7 of your code to make sure they're doing what you want them to do. As a hint, the size function may be of use to you.

その他の回答 (1 件)

Duc Tu Vu
Duc Tu Vu 2018 年 10 月 11 日
Thank all for the help. I have already solved this problem.
  5 件のコメント
Naireeta Deb
Naireeta Deb 2020 年 2 月 27 日
It doesn't work :/
Steven Lord
Steven Lord 2020 年 2 月 27 日
Without more information about what you're doing (and ideally a small example with which you can reproduce the error) it's unlikely we'll be able to give you a more specific suggestion than what I did in my comment immediately before yours.
Make sure you're using release R2016b or later and make sure you're not trying to define the function inside an if, for, while, etc. statement (and you're not trying to define it by typing "function myoutput = ..." at the prompt in the Command Window.)

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

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by