Root finder solver for cubic equation

조회 수: 2 (최근 30일)
Jamie Al
Jamie Al 2021년 3월 8일
답변: Walter Roberson 2021년 3월 8일
I have the following cubic equation in beta, knowing gamma, theta and M1 how can I find the roots of beta using MATLAB?
for example, knowing the following:
M1 = 8:3:20;
gamma = 1.4;
theta = 8;
  댓글 수: 3
Jamie Al
Jamie Al 2021년 3월 8일
Thanks David! I will try using roots and see how it goes.
Jamie Al
Jamie Al 2021년 3월 8일
I tried something like this, but I am not sure it's giving back correct roots
M1 = 8:3:20;
gamma = 1.4;
theta = 8; %in degrees
a = 1+((gamma-1)/2).*M1.^2.*tan(theta);
b = 1-M1.^2;
c = (1+((gamma-1)/2).* M1.^2).*tan(theta);
d = 1;
P = [a b c d];
bb = roots(P);
beta = atand(bb); %take inv of tan

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2021년 3월 8일
syms M1 gamma theta_degrees tanbeta_degrees
eqn = 1 + (gamma - 1)/2 * M1.^2 * tand(theta_degrees).*tanbeta_degrees.^3 + (1-M1.^2).*tanbeta_degrees.^2 + (1+(gamma+1)/2.*M1.^2);
solbeta = solve(eqn, tanbeta_degrees);
beta_degrees = atand(solbeta)
beta_degrees = 
M1_ = 8:3:20;
gamma_ = 1.4;
theta_degrees_ = 8; %in degrees
beta_values = subs(beta_degrees, {M1, gamma, theta_degrees}, {M1_, gamma_, theta_degrees_})
beta_values = 
beta_numeric = double(beta_values)
beta_numeric = 3×5
-47.7576 -47.4871 -47.3704 -47.3097 -47.2741 48.6681 48.3829 48.2600 48.1960 48.1586 88.3627 88.3749 88.3801 88.3828 88.3844
whos beta_numeric
Name Size Bytes Class Attributes beta_numeric 3x5 120 double
Here, the different columns correspond to the different M1 values, and the different rows correspond to the different roots of the cubic. Results are in degrees.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Particle & Nuclear Physics에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by