Unable to solve for a variable
    4 views (last 30 days)
  
       Show older comments
    
    Jonas Freiheit
 on 6 Oct 2021
  
    
    
    
    
    Commented: Jonas Freiheit
 on 10 Oct 2021
            Hi all,
I am trying to solve for a variable 'a' and saving it into an array, However, I am left with an inifinitely long running program. What should I do?
Heres a section of the code:
clc, clear, clear all
J_value=0.5
syms a;
for TonTc=.01:0.01:.99
    sig_sigo_1=((2*J_value+1)/2*J_value)*coth((2*J_value+1)/2*J_value)*a-(1/2*J_value)*coth(a/2*J_value); 
    sig_on_sigo_2=((J_value+1)/3*J_value)*TonTc*a; 
    z=sig_sigo_1-sig_on_sigo_2;
    for k=1:99
        val_a(k)=vpasolve(z,a);
    end
end
Cheers
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 7 Oct 2021
        J_value=0.5;
syms a;
TonTc_vals = .01:0.01:.99;
num_Tonc = length(TonTc_vals);
val_a = zeros(num_Tonc, 1);
for k = 1 : num_Tonc
    TonTc = TonTc_vals(k);
    sig_sigo_1=((2*J_value+1)/2*J_value)*coth((2*J_value+1)/2*J_value)*a-(1/2*J_value)*coth(a/2*J_value);
    sig_on_sigo_2=((J_value+1)/3*J_value)*TonTc*a;
    z=sig_sigo_1-sig_on_sigo_2;
    sol = vpasolve(z, a, -1);
    if isempty(sol)
        val_a(k) = nan;
    else
        val_a(k) = sol(1);
    end
    if k == 1
        fplot([z, 0], [0.5 1])
        title("plot for TonTc = " + TonTc)
        ylim([-2 2])
    end
end
figure
plot(TonTc_vals, val_a)
title("a vs TonTc")
That first plot makes it clear that there is no root at 0.75
5 Comments
  Walter Roberson
      
      
 on 10 Oct 2021
				Yes, there are two solutions.
J_value=0.5;
syms a;
TonTc_vals = .01:0.01:.99;
num_Tonc = length(TonTc_vals);
val_a = zeros(num_Tonc, 1);
for k = 1 : num_Tonc
    TonTc = TonTc_vals(k);
    sig_sigo_1=((2*J_value+1)/(2*J_value))*coth((2*J_value+1)/(2*J_value))*a-(1/(2*J_value))*coth(a/(2*J_value));
    sig_on_sigo_2=((J_value+1)/(3*J_value))*TonTc*a;
    z=sig_sigo_1-sig_on_sigo_2;
    sol = vpasolve(z, a, -1);
    if isempty(sol)
        val_a(k) = nan;
    else
        val_a(k) = sol(1);
    end
    if k == 1
        fplot([z, 0], [-2 2])
        title("plot for TonTc = " + TonTc)
        ylim([-2 2])
    end
end
figure
plot(TonTc_vals, val_a)
title("a vs TonTc")
More Answers (1)
  David Hill
      
      
 on 6 Oct 2021
        What are you solving? You need to set z equal to something.
z=sig_sigo_1-sig_on_sigo_2==0;%what do you want z to be?
3 Comments
See Also
Categories
				Find more on Equation Solving in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!












