Unknown variable within an equation

Hello,
I have an equation of the form P*dawson(sqrt(log(P)-log(A)))== sqrt(B)*T to be solved.
Variable A and B are scalar, but variable T is a vector. I need to solve for P in the equation.
This is the code I have written
syms P
T=5:5:500;
A=2;
B=0.5;
eqn = P*dawson(sqrt(log(P)-log(A)))== sqrt(B).*T ;
s = solve(eqn,P)
s =
Empty sym: 0-by-1
That is the solution for s I got.
Please advise what can be done.
Thanks.

 Réponse acceptée

Star Strider
Star Strider le 4 Oct 2018
Try this:
syms P T
A=2;
B=0.5;
eqn = P*dawson(sqrt(log(P)-log(A))) - sqrt(B).*T ; % Rearrange
eqnfcn = matlabFunction(eqn, 'Vars',{P,T}) % Anonymous Function
T=5:5:500;
for k1 = 1:numel(T)
Pv(k1) = fsolve(@(P)eqnfcn(P,T(k1)), 10);
end
figure
plot(T, Pv)
grid
xlabel('T')
ylabel('P')

Plus de réponses (2)

Image Analyst
Image Analyst le 3 Oct 2018

0 votes

dawson needs to be defined also.

2 commentaires

Image Analyst
Image Analyst le 4 Oct 2018
Modifié(e) : Image Analyst le 4 Oct 2018
Olufemi's "Answer" moved here:
@Image analyst, sorry I don't get what you mean by Dawson needs to be defined. Dawson is a function in MATLAB. For example, you can have dawson(2) = 3.013403889237920e-01 when solved.
Thank you for the response.
Image Analyst
Image Analyst le 4 Oct 2018
OK, it wasn't in my help. It must be in a toolbox that you have that I don't have.

Connectez-vous pour commenter.

Walter Roberson
Walter Roberson le 4 Oct 2018
syms P
T=5:5:500;
A=2;
B=0.5;
s = arrayfun( @(t) vpasolve(P*dawson(sqrt(log(P)-log(sym(A))))== sqrt(sym(B)).*t, P), T);
plot(T, s)
You have to loop solving one value at a time. With the code you had, you were trying to find a single value for P that satisfied all of the equations at the same time.

3 commentaires

Shozeal
Shozeal le 4 Oct 2018
Modifié(e) : Walter Roberson le 4 Oct 2018
Thanks, Walter.
But I got this error
Error using arrayfun
sym output type is not supported. Set 'UniformOutput' to false.
Error in SystemBeamtest (line 48)
s = arrayfun( @(T) vpasolve(P*dawson(sqrt(log(P)-log(sym(A))))== sqrt(sym(B)).*T, P), T);
I don't know if you interchanged t and T by error or that is how it should be.
You should not have changed the t to T on the line.
You appear to be using R2015a or earlier (I think it was... I would need to check), as a few releases ago arrayfun() started being able to handle sym variables.
syms P
T=5:5:500;
A=2;
B=0.5;
scell = arrayfun( @(t) vpasolve(P*dawson(sqrt(log(P)-log(sym(A))))== sqrt(sym(B)).*t, P), T, 'uniform', 0);
s = double([scell{:}]);
plot(T, s)
Nearly a straight line.
Shozeal
Shozeal le 5 Oct 2018
Hi Walter, I actually use R2017a. So, after keeping the t and T in the expression as written above, I got something close to a straight line too. Though it takes a very long time to run if I should increase the range of T.
Thanks.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Mathematics dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by