2013-04-15 5 views
0

Я довольно новыми для MATLAB и у меня есть следующий код:функции в MATLAB

a=500; 
PI=3.14159265; 
radconvert=PI/180; 
degconvert=180/PI; 

% values at t=9, t=10 and t=11 respectively 
alpha=[54.80 54.06 53.34]; 
beta=[65.59 64.59 63.62]; 

% converting degrees to radians 
for i = 1:3 
    alpha(i) = alpha(i)*radconvert; 
end 

for i = 1:3 
    beta(i) = beta(i)*radconvert; 
end 

% declaring x and y functions 
function x(a, alpha, beta) 
    (a*tan(beta))/(tan(beta)-tan(alpha)); 

function y(a, alpha, beta) 
    (a*tan(alpha)*tan(beta))/(tan(beta)-tan(alpha)); 

% doing the calculations 
vx1=x(a, alpha(2), beta(2)) - x(a, alpha(1), beta(1)); 
vy1=y(a, alpha(2), beta(2)) - y(a, alpha(1), beta(1)); 
vf1=sqrt(vx1^2 + vy1^2); 

vx2=x(a, alpha(3), beta(3)) - x(a, alpha(2), beta(2)); 
vy2=y(a, alpha(3), beta(3)) - y(a, alpha(2), beta(2)); 
vf2=sqrt(vx2^2 + vy2^2); 

vf=(vf1+vf2)/2; 
vxavg=(vx1+vx2)/2; 
vyavg=(vy1+vy2)/2; 

theta = atan(vyavg/vxavg)*degconvert; 

% printing the values 
sprintf('Velocity at t=10 is: %.2f\n', vf); 
sprintf('Climb angle theta is: %.2f\n', theta); 

Если я пытаюсь запустить его, я получаю следующее сообщение об ошибке:

??? Error: File: code.m Line: 20 Column: 1 Function definitions are not permitted in this context.

I думаю, я не могу объявить и использовать функции в том же файле .m. Может ли кто-нибудь помочь мне решить эту проблему?

+0

Возможный дубликат [В MATLAB, могу ли я иметь скрипт и определение функции в том же файле?] (Http://stackoverflow.com/questions/5363397/in-matlab-can-i-have-a- script-and-a-function-definition-in-the-same) – Shai

+0

Erkant либо размещает функции в разных файлах, либо переписывает вышеуказанный скрипт как функцию, либо использует анонимные функции. – Justin

+0

Еще одна проблема, которую я вижу, вы не возвращаете значения из функции, но LHS вызова функции назначается 'vx1',' vy1' и т. Д. Это не сработает. –

ответ

4

Вы не можете определять функции внутри скриптов. Это две разные вещи. Либо ваш .m-файл является функцией скрипта. Вы можете однако определить anonymous functions в сценариях MATLAB. Из-за проблем, которые я не буду расширять здесь, ваши аргументы функции не должны иметь те же имена, что и переменные в вашем главном скрипте. Их сфера пересекается. Если предыдущее предложение не имеет смысла, просто убедитесь, что ваши имена аргументов отличаются от того, что вы назвали вещами в вашем скрипте. Ваш код с помощью ananymous функций должен выглядеть так:

a=500; 
PI=3.14159265; 
radconvert=PI/180; 
degconvert=180/PI; 

% values at t=9, t=10 and t=11 respectively 
alpha=[54.80 54.06 53.34]; 
beta=[65.59 64.59 63.62]; 

% converting degrees to radians 
for i = 1:3 
    alpha(i) = alpha(i)*radconvert; 
end 

for i = 1:3 
    beta(i) = beta(i)*radconvert; 
end 

% declaring ananymous x and y functions 
x = @(mA, mAlpha, mBeta) ... 
    (mA*tan(mBeta))/(tan(mBeta)-tan(mAlpha)); 

y = @(mA, mAlpha, mBeta) ... 
    (mA*tan(mAlpha)*tan(mBeta))/(tan(mBeta)-tan(mAlpha)); 

% doing the calculations 
vx1=x(a, alpha(2), beta(2)) - x(a, alpha(1), beta(1)); 
vy1=y(a, alpha(2), beta(2)) - y(a, alpha(1), beta(1)); 
vf1=sqrt(vx1^2 + vy1^2); 

vx2=x(a, alpha(3), beta(3)) - x(a, alpha(2), beta(2)); 
vy2=y(a, alpha(3), beta(3)) - y(a, alpha(2), beta(2)); 
vf2=sqrt(vx2^2 + vy2^2); 

vf=(vf1+vf2)/2; 
vxavg=(vx1+vx2)/2; 
vyavg=(vy1+vy2)/2; 

theta = atan(vyavg/vxavg)*degconvert; 

% printing the values 
msg = sprintf('Velocity at t=10 is: %.2f\n', vf); 
disp(msg); 
msg = sprintf('Climb angle theta is: %.2f\n', theta); 
disp(msg); 

Я также исправил вашу печать в конце.

Смежные вопросы