创建向量函数文件

时间:2019-09-26 14:33:37

标签: matlab

我希望在Matlab中创建一个向量函数,定义如下:

enter image description here

我到目前为止的代码:

function [Ex, Ey, Ez] = E_field()
syms x y z
con = -2.8E+8;
E = con*z.^3;
Ex = matlabFunction(E(1));
Ey = matlabFunction(E(2));
Ez = matlabFunction(E(3));
end

但是,当Matlab的ode求解器运行时,引用此函数时,会出现此错误:

Index exceeds the number of array elements (1).
Error in sym/subsref (line 890)
            R_tilde = builtin('subsref',L_tilde,Idx);
Error in E_field (line 7)
Ey = matlabFunction(E(2));

我不明白为什么这种方法行不通,因为我有一个非常相似的功能文件,该文件也已被引用但不会抛出错误:

function [Bx, By, Bz] = B_test()
Bfieldstrength = 0.64; %In (Teslas)
magvol = 3.218E-6; %In (m)
mu0 = (4*pi)*10^-7;
magnetization = (Bfieldstrength*magvol)/mu0;
syms x y z
m = [0,0,magnetization];
r = [x, y, z];
B = mu0*(((dot(m,r)*r*3)/norm(r)^5) - m/norm(r)^3);
Bx = matlabFunction(B(1));
By = matlabFunction(B(2));
Bz = matlabFunction(B(3));
end

我知道E字段文件中只有一个组件,这可能就是为什么Matlab无法将E(1)或E(2)识别为仅仅是“符号零”(并将E分配给E(1 ))那么我该如何理解E(1)和E(2)分量为零,而E(3)不是零?我已经阅读了Matlab的所有文档“ matlabFunction”,但在这种情况下都没有用。

主要代码“ collisions7.m”使用ode15s并调用功能文件“ bdipuniodefun.m”。其余文件:“ engen.m”,maxdis.m”和posgen.m”均由主代码引用,但不会引起问题。主要问题是主代码何时调用“ bdipodefun.m”,因为求解器抛出错误或者它完全忽略了e字段文件并产生了错误的解决方案。

以下是相关代码的链接:https://github.com/tomkeaton/Planeterrella

0 个答案:

没有答案
相关问题