Unable to solve for a variable
    조회 수: 4 (최근 30일)
  
       이전 댓글 표시
    
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
채택된 답변
  Walter Roberson
      
      
 2021년 10월 7일
        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
  Walter Roberson
      
      
 2021년 10월 10일
				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")
추가 답변 (1개)
  David Hill
      
      
 2021년 10월 6일
        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
참고 항목
카테고리
				Help Center 및 File Exchange에서 Equation Solving에 대해 자세히 알아보기
			
	제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!









