Unknown variable within an equation

2 Ansichten (letzte 30 Tage)
Shozeal
Shozeal am 3 Okt. 2018
Kommentiert: Shozeal am 5 Okt. 2018
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.

Akzeptierte Antwort

Star Strider
Star Strider am 4 Okt. 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')

Weitere Antworten (2)

Image Analyst
Image Analyst am 3 Okt. 2018
dawson needs to be defined also.
  2 Kommentare
Image Analyst
Image Analyst am 4 Okt. 2018
Bearbeitet: Image Analyst am 4 Okt. 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 am 4 Okt. 2018
OK, it wasn't in my help. It must be in a toolbox that you have that I don't have.

Melden Sie sich an, um zu kommentieren.


Walter Roberson
Walter Roberson am 4 Okt. 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 Kommentare
Walter Roberson
Walter Roberson am 4 Okt. 2018
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 am 5 Okt. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Mathematics finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by