# How do I get normal numerical answers using solve or vpasolve?

조회 수: 3 (최근 30일)
Ben van Zon 2023년 11월 30일
댓글: Dyuman Joshi 2023년 11월 30일
I'm currently making a function within which I determine a Reflectivity value by solving the equation using solve().
However, the answers given are always values of pi, how do I solve this?
[Result, y] = lorentz(0, 0.725, 15)
function [Result, y] = lorentz(position, CavityLength, BaseRD)
%Enter position, cavity length in m and baserd in microseconds.
c = 299792458; %speed of light in m/s
BaseRD = BaseRD*10^-6;
syms Reflectivity
S = vpasolve(((pi*sqrt(Reflectivity))/(1-Reflectivity))/(c/(2*CavityLength)) == BaseRD, Reflectivity, [0.99 1]);
Result.Reflectivity = S;
Result.Finesse = (pi*sqrt(Result.Reflectivity)/(1-Result.Reflectivity));
Result.FSR = c/(2*CavityLength);
FWHM = Result.FSR./Result.Finesse;
Result.HWHM = FWHM/2;
x = linspace(-1e3,1e3,1e5);
y = (1/pi).*(Result.HWHM./(((x-position).^2)+Result.HWHM.^2));
%y = y.*(height/max(y));
%plot(x,y)
end
Reflectivity: 0.99898752118560808161741982765188
Finesse: 987.1748605317811539461548191278*pi
FSR: 206753419.310345
HWHM: 104719.75511965978378924223514237/pi
##### 댓글 수: 5이전 댓글 3개 표시이전 댓글 3개 숨기기
Ben van Zon 2023년 11월 30일
편집: Ben van Zon 2023년 11월 30일
Using this:
c = 299792458;
CavityLength = 0.725;
Pi = sym(pi, 'd');
syms Reflectivity
S = vpasolve(((Pi*sqrt(Reflectivity))/(1-Reflectivity))/(c/(2*CavityLength)) == 14.7E-6, Reflectivity, [0.99 1])
S =
0.99896686903182896436436014196862
I get the answer I'm looking for.
Dyuman Joshi 2023년 11월 30일
Also, your comment was marked spam by the Auto Filter, idk how. I have removed the spam notice, and subsequently your flag as well.

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

### 채택된 답변

Walter Roberson 2023년 11월 30일
Or...
use sympref to set floating point output on
Or...
Use vpa
Or...
Use double. For example,
structfun(@double, Result, 'uniform', 0)
##### 댓글 수: 1이전 댓글 -1개 표시이전 댓글 -1개 숨기기
Ben van Zon 2023년 11월 30일
You were a minute before me finding sym(pi 'd'), thank you!

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

### 추가 답변 (1개)

John D'Errico 2023년 11월 30일
vpa will turn those products involving pi into more normal looking numbers. For example...
x = 17*sym(pi)
x =
So x has pi in it.
vpa(x)
ans =
53.407075111026485053864937515752
vpa yields a symbolic high precision floating point number. But double will also work, and create a double as a result.
double(x)
ans = 53.4071

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

### 카테고리

Help CenterFile Exchange에서 Equation Solving에 대해 자세히 알아보기

R2022b

### Community Treasure Hunt

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

Start Hunting!

Translated by