功能定义在Matlab中的澄清

时间:2014-03-11 18:51:04

标签: matlab function function-call function-declaration

我编写了一些代码,可以通过一些测试输入自行评估theta。但是,我想把这个代码转换成一个我可以在另一个matlab文件中调用的函数。我不断收到错误消息“在此上下文中不允许使用函数定义。”

我希望能够在另一个matlab文件中定义四个向量,并调用SP1来评估这些输入的θ。不过,我不知道我哪里出错了。请帮忙!

非常感谢。

    clc
    clear all 

    function theta = SP1(p,q1,w1,r)

    % INPUT: 
    %function theta = SP1(p,q1,w1,r)
    % p = [5; -7; 12]; 
    % q1 = [17.3037; -3.1128; 2.48175];
    % w1 = [1/sqrt(8); sqrt(3/8); 1/sqrt(2)];
    % r = [1; 2; -3]; 

   % Define vectors u and v as well as u' and v'. 

   u = p - r;
   v = q1 - r; 
   w1_t = transpose(w1);
   u_prime = u - w1 * w1_t * u;
   v_prime = v - w1 * w1_t * v; 

   % Calculate theta if conditions are met for a solution to exist. 

    if (abs(norm(u_prime)-norm(v_prime))<0.01) & (abs((w1_t * u)-(w1_t * v))<0.01)
       X = w1_t*cross(u_prime,v_prime);
       Y = dot(u_prime,v_prime);
       theta = atan2(X,Y)                      
   else if (norm(u_prime) == 0 | norm(v_prime) == 0)    
       disp('Infinite Number of Solutions')
       else
    disp('Conditions not satisfied to find a solution')       
end
end

2 个答案:

答案 0 :(得分:1)

我认为你可以删除前两行,

clc  
clear all

并将以function开头的其余代码保存为 SP1.m 文件。

然后你应该能够从其他m文件中将此函数称为SP1

答案 1 :(得分:0)

我认为你对功能如何运作感到困惑。函数定义的第一行定义了MATLAB期望的输入和输出数量:

function theta = SP1(p,q1,w1,r)

这意味着调用函数SP1将要求您提供四个输入,并返回一个输出。它并不意味着:

  • 您的输入需要命名为pq1,依此类推
  • 您的输出将自动调用theta
  • 如果工作区中存在输入变量pq1等,该函数将自动接收。

它也没有对输入进行任何检查;因此,如果您要求输入具有特定类型,大小等,则需要在文件开头编写自己的错误检查。您可能希望这些输入是3x1向量,但函数中没有任何内容可以告诉MATLAB。因此,SP1(1,2,3,4)在某种程度上会起作用 - 它将接受这些输入并尝试通过该函数运行它们,如果它们不会导致错误,它将为您提供输出。输出可能是错误的,但计算机不知道。

一旦有了函数,就可以从命令行或其他函数或脚本中以多种方式调用它。如前所述,您不必坚持函数内部变量的命名,只要在调用函数时存在输入变量,MATLAB就会接受它们:

theta = SP1(p8,q27,w35,not_r);
myoutput = SP1(any,variable,I,like);

我不一定要提供输出(但是第一个输出将被路由到ans

SP1(this,will,also,work);

如果我有一些存储在* .mat文件中的变量(你似乎要问的情况),我可以这样做:

load('mydata.mat'); %this file contains stored variables p, q1, w1 and r
theta = SP1(p,q1,w1,r);