我编写了一些代码,可以通过一些测试输入自行评估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
答案 0 :(得分:1)
我认为你可以删除前两行,
clc
clear all
并将以function
开头的其余代码保存为 SP1.m 文件。
然后你应该能够从其他m文件中将此函数称为SP1
。
答案 1 :(得分:0)
我认为你对功能如何运作感到困惑。函数定义的第一行定义了MATLAB期望的输入和输出数量:
function theta = SP1(p,q1,w1,r)
这意味着调用函数SP1
将要求您提供四个输入,并返回一个输出。它并不意味着:
p
,q1
,依此类推theta
p
,q1
等,该函数将自动接收。它也没有对输入进行任何检查;因此,如果您要求输入具有特定类型,大小等,则需要在文件开头编写自己的错误检查。您可能希望这些输入是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);