problem with input arguments

6 ビュー (過去 30 日間)
Gianmario
Gianmario 2014 年 2 月 24 日
編集済み: Mischa Kim 2014 年 2 月 24 日
i have a problem with the inputs of the following function. Tempo and t_media_filtrata_t are both previously developed and they are declared in the worhspace but when i run the function it compares an error message that say that input (tempo or t_media_filtrata_t) argument is undefined. Someone can help me? thank you
function[x]=residuo(x_ini,tempo,t_media_filtrata_t)
prompt={'potenza immessa(W):','profondità del foro(m)','passo di campionamento(s)','velocità di Darcy(m/s)','resistenza termica(m*K/W)'};
dlg_title='Input';
num_lines=1;
def={'3000','100','60','5*10^-10','0.1'};
answer=inputdlg(prompt,dlg_title,num_lines,def);
Q=str2num(answer{1});
H=str2num(answer{2});
deltaT=str2num(answer{3});
q=str2num(answer{4});
Rb=str2num(answer{5});
r_bw=0.075;
ro=2500;
c=3000;
row=1000;
cw=4186;
for index=1:length(t_media_filtrata_t)
T_calcolata(index)= (Q/H)./(4.*pi.*sqrt(x_ini(1).*x_ini(1))).*exp( (row.*cw.*q.*r_bw)./ (2.*x_ini(1) )).*quad(@(phi) (exp(-phi-(((r_bw.^2)./x_ini(1)) + ((r_bw.^2)./x_ini(1))).*(((row.*cw.*q).^2)./(16.*x_ini(1).*phi))).*(1./phi)),0,(((row.*cw.*q).^2).*tempo(index))./(4.*ro.*c.*x_ini(1)))+x_ini(2)+((Q/H)*Rb);
end
misfit=(T_calcolata-t_media_filtrata_t).^2;
residuo= sqrt((sum(misfit))/length(tempo));
opt = optimset ( 'Display' , 'iter','MaxIter' ,20 );
[x, fval, exitflag, output] = fminsearch ( residuo,x_ini,opt )
figure;
plot(tempo,t_media_filtrata_t,tempo,T_calcolata,'r');
title('segnale misuratao e calcolato per inversione');
end
  2 件のコメント
Mischa Kim
Mischa Kim 2014 年 2 月 24 日
編集済み: Mischa Kim 2014 年 2 月 24 日
How and where from are you calling the function?
Gianmario
Gianmario 2014 年 2 月 24 日
from the command window: [x]=residuo([1.5, 18],tempo,t_media_filtrata_t)

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

回答 (3 件)

Iain
Iain 2014 年 2 月 24 日
You need to supply those arguments to the function, by calling it like:
tempo_var_with_silly_long_name = 5; %use the real value, not what I've just came up with
t_media_filtrata_t = 42; %use the real value, not what I've just came up with
x_ini = 0;
x=residuo(x_ini, tempo_var_with_silly_long_name ,t_media_filtrata_t);
  2 件のコメント
Gianmario
Gianmario 2014 年 2 月 24 日
but both inputs are linear matrix developed by other function. In the previously function i put them into output. Not a nested but two distinct function
function [x,y]=first_function(a,b)
end
function [z]=second_function(x,y)
end
Iain
Iain 2014 年 2 月 24 日
Check that the variables exist before calling residio?

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


Image Analyst
Image Analyst 2014 年 2 月 24 日
It's a function that requires inputs so you can't just type F5 or click the green "run" triangle. You need to supply values for those inputs.

Mischa Kim
Mischa Kim 2014 年 2 月 24 日
編集済み: Mischa Kim 2014 年 2 月 24 日
If you execute the which command in the command window do you get
which tempo
tempo is a variable.
which t_media_filtrata_t
t_media_filtrata_t is a variable.
If not, then the variables are not declared in the workspace. In other words, if the variables are outputs of other functions, they need to be specified accordingly. E.g.
[tempo, t_media_filtrata_t] = my_func(arg1, arg2)
now you can call
[x] = residuo([1.5, 18],tempo,t_media_filtrata_t)
  2 件のコメント
Gianmario
Gianmario 2014 年 2 月 24 日
i tried it on the command window and it says that both of them are variables.
Mischa Kim
Mischa Kim 2014 年 2 月 24 日
編集済み: Mischa Kim 2014 年 2 月 24 日
Here you go...
  • Within the function, you call the same function, again, recursively. Is this what you are trying to do?
opt = optimset ( 'Display' , 'iter','MaxIter' ,20 );
[x, fval, exitflag, output] = fminsearch ( residuo,x_ini,opt )
  • And even if this is planned, you need to properly call the function with all of its input arguments.
  • Finally, you are using residuo also as a variable.
residuo = sqrt((sum(misfit))/length(tempo));

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

カテゴリ

Help Center および File ExchangeSystems of Nonlinear Equations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by