Azzera filtri
Azzera filtri

error in embedded matlab function

6 visualizzazioni (ultimi 30 giorni)
studentU
studentU il 28 Apr 2015
Commentato: studentU il 30 Apr 2015
hi, i have 3 function.m, i use it to develop embedded matlab-function , But it generates this error:
>> Undefined function or method 'fnct1' for input arguments of type'double'
what is the causes? and how can i resolve this error? thanks.

Risposte (3)

pfb
pfb il 28 Apr 2015
Modificato: pfb il 28 Apr 2015
Matlab is complaining because it cannot find fnct1. This is the typical answer you get when you use a function that does not exist. Just type
nonexistentfunction(42.0)
I assume that fnct1 is the name of one of your functions.
Where and how do you define that function?
You mention .m files. Is the fnct1.m file in your working directory, or anywhere in matlab known path?
  4 Commenti
studentU
studentU il 29 Apr 2015
it's just that program content is too long ...!
so:
%%funct1.m
function [az, el, de, ho] = fnct1 (ta, tm, tj, th, ti, ts, lo, la, orl, al, ut)
%%...
az = ta + tm;
el = th + ti + tj;
de = lo- ts;
ho = la+orl-ut *al ;
end
%%funct2.m
function [in] = fnct2 (el, az, the paragraph, from, ho)
syms in
in=solve('[sin(la)*sin(de)+cos(hor)]*cos(in)-[cos(al)*sin(de)*cos(la)+cos(de)*sin(al)*sin(hor)]*sin(in)=1');
end
%%funct3.m
function [or] = fnct3 (el, az, in)
syms or
or = solve ('[cos (in) * sin (el) - [sin (b) * cos (e) * cos (az)] * cos (or) - [sin (az) * sin (in) * cos (e)] * sin (or) = 1 ');
end
%%in blocks embedded matlab-function,
function [Cor, Cin] = fnct4 (ta, tm, tj, th, ti, ts, lo, orl,la, al, ut)
coder.extrinsic('fminbnd');
coder.extrinsic('matlabfunction');
coder.extrinsic('fcnt1')
coder.extrinsic('fcnt2')
coder.extrinsic('fcnt3')
[az, el, de, ho] = fnct1 (ta, tm, tj, th, ti, ts, lo, la, orl, al, ut)
fin=matlabfunction(fnct1);
Imin=degtorad(0);
Imax=degtorad(90);
Cin = fminbnd(fin, Imin, Imax)
fori=matlabfunction(fcnt3);%hundl function
Omin=degtorad(-90);
Omax=degtorad(90);
Cor = fminbnd(fori, Omin, Omax)
end
the function.m is save in the working repertory, and i simulate just the matlab function block. i hope that is clear now! thanks for ure coordination.
pfb
pfb il 29 Apr 2015
Modificato: pfb il 29 Apr 2015
Uhm, I see that you define fnct1 (in fnct1.m, if I get it right) but then you feed 'fcnt1' into coder.extrinsic.
Same bunch of letters, different order :)
You mistyped "fcnt1" instead of "fnct1".
I guess that's why matlab is complaining.

Accedi per commentare.


studentU
studentU il 29 Apr 2015
Modificato: studentU il 29 Apr 2015
i'm sorry, i was wrong, but it generate the sme error!!!!
  1 Commento
pfb
pfb il 29 Apr 2015
you should pay more attention if you want other people's help.
Why did you answer your own question instead of my comment now? This produces even more confusion!
Are you sure there are no typos in the argument of coder.extrinsic? Are you sure that you used the single quotes?
I'm not sure of anything now, since what you pasted is not really your code...

Accedi per commentare.


studentU
studentU il 29 Apr 2015
Modificato: studentU il 30 Apr 2015
Here it is my program with some reduction but the point is that, I just tried to simplify your understanding, but it appears that I commit typos ....
%%funct1.m
function [az, el, de, ho] = fnct1 (ta, tm, tj, th, ti, ts, lo, la, orl, al, ut)
%%...
az = ta + tm; el = th + ti + tj; de = lo- ts; ho = la+orl-ut *al ;
end
%% funct2.m
function [in] = fnct2 (el, az, the paragraph, from, ho)
syms in
in=solve('[sin(la)*sin(de)+cos(hor)]*cos(in)- [cos(al)*sin(de)*cos(la)+cos(de)*sin(al)*sin(hor)]*sin(in)=1');
end
%% funct3.m
function [or] = fnct3 (el, az, in)
syms or
or = solve ('cos (in) * sin (el) - [sin (b) * cos (e) * cos (az)] * cos (or) -
[sin (az) * sin (in) * cos (e)] * sin (or) = 1 ');
end
%%in blocks embedded matlab-function,
function [Cor, Cin] = fnct4 (ta, tm, tj, th, ti, ts, lo, orl,la, al, ut)
coder.extrinsic('fminbnd');
coder.extrinsic('matlabfunction');
coder.extrinsic('fnct1')
coder.extrinsic('fnct2')
coder.extrinsic('fnct3')
[az, el, de, ho] = fnct1 (ta, tm, tj, th, ti, ts, lo, la, orl, al, ut)
fin=matlabfunction(fnct1);
Imin=degtorad(0);
Imax=degtorad(90);
Cin = fminbnd(fin, Imin, Imax)
fori=matlabfunction(fcnt3);%hundl function
Omin=degtorad(-90);
Omax=degtorad(90);
Cor = fminbnd(fori, Omin, Omax)
end
thank's for your patience
  4 Commenti
pfb
pfb il 30 Apr 2015
Not easy to single out the error, given your sloppy way of presenting things. For instance, the line you pasted above
%%funct1.m function [az, el, de, ho] = fnct1 (ta, tm, tj, th, ti, ts, lo, la, orl, al, ut) %%...
looks like you commented the first line the code of your function. That would turn it into a script. Or even give you errors because of the "end".
But I do not know, because you do not bother to be clear.
studentU
studentU il 30 Apr 2015
for lack of space, I have a concern to past the comments correctly. but be sure that typos do not occur in the program.

Accedi per commentare.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by