app designer error: Attempt to add "theta" to a static workspace.
    2 views (last 30 days)
  
       Show older comments
    
    mohammadreza j
 on 19 Aug 2024
  
    
    
    
    
    Commented: Walter Roberson
      
      
 on 19 Aug 2024
            Hello, i wrote a code and it works while running the script. but when i use it in an app this error shows up Attempt to add "theta" to a static workspace. can somebody help me out. thanks
The code:
%% Constants and parameters
J1 = 1; % Polarization of outer magnet 
J2 = 1; % Polarization of inner magnet
u0 = pi*4e-7; % Magnetic constant
%% Position vectors, define appropriately
r = [0.25, 0.3, 0.20 , 0.24]; % radius of magnets (outer to inner)
z = [0.05, 0.15, 0.08, 0.18]; % z cordinate of magnets (outer to inner)
%% main function g
g = @(a, b, c) computeG(a, b, c);
% Initialize F_Z
F_Z = 0;
% Compute F_Z based on the given formula
for i = 1:2
    for k = 1:2
        for j = 3:4
            for l = 3:4
                deltaZ = z(k) - z(l);
                ri2 = r(i)^2;
                rj2 = r(j)^2;
                Fijkl = r(i) * r(j) * g(deltaZ, ri2+rj2+deltaZ^2, -2 * r(i) * r(j));
                power = 1 + i + j + k + l;
                F_Z = F_Z + ((-1)^power) * Fijkl;
            end
        end
    end
end
F_Z = ((J1 * J2) / (2 * u0)) * F_Z;
%% Define the function computeG
function result = computeG(a, b, c)
    A = (a^2 - b) / c * pi + sqrt(c^2 - (a^2 - b)^2) / c *(log((-16 * c^2) / ((c^2 - (a^2 - b)^2)^1.5)) + log(c^2 / ((c^2 - (a^2 - b)^2)^1.5)));
    S = computeS(a, b, c);
    result = A + S;
end
%% Define the function computeS
function S = computeS(a, b, c)
    % Define constants
    epsilon = c / (c - b);
    beta = (b + c) / (b - c);
    mu = c / (b + c);
    % Calculate terms for S
    term1 = (2 * 1i * a) / (c * sqrt(b + c)) * ...
        ((b + c) * ellipticE(asin(sqrt(beta)), beta^(-1)) - c * ellipticF(asin(sqrt(beta)), beta^(-1)));
    term2 = (2 * a) / (c * sqrt(b - c) * sqrt(epsilon)) * ...
        (c / sqrt(mu) * ellipticE1(1 / beta) - c * sqrt(mu) * ellipticK(1 / beta));
    term3 = sqrt(epsilon * (1 / beta)) * ...
        ((b - a^2) * ellipticK(2 * mu) + (a^2 - b + c) * ellipticPi(2 * c / (c + b - a^2), 2 * mu));
    % Sum all terms
    S = term1 + term2 + term3;
end
% Elliptic integral functions using symbolic math toolbox
function val = ellipticK(m)
    syms theta;
    val = double(int(1 / sqrt(1 - m * sin(theta)^2), theta, 0, pi/2));
end
function val = ellipticF(phi, m)
    syms theta;
    val = double(int(1 / sqrt(1 - m * sin(theta)^2), theta, 0, phi));
end
function val = ellipticE(phi, m)
    syms theta;
    val = double(int(sqrt(1 - m * sin(theta)^2), theta, 0, phi));
end
function val = ellipticE1(m)
    syms theta;
    val = double(int(sqrt(1 - m * sin(theta)^2), theta, 0, pi/2));
end
function val = ellipticPi(n, m)
    syms theta;
    val = double(int(1 / (sqrt(1 - n * sin(theta)^2) * sqrt(1 - m * sin(theta)^2)), theta, 0, pi/2));
end
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 19 Aug 2024
        Replace
syms theta
with
theta = sym('theta');
Note:
If you are trying to compile this code, then you will not be able to do so: nothing about the Symbolic Toolbox can be compiled.
6 Comments
  Walter Roberson
      
      
 on 19 Aug 2024
				function val = ellipticK(m)
    val = integrate(@(theta) 1 ./ sqrt(1 - m * sin(theta).^2), 0, pi/2, 'ArrayValued', true);
end
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
