Solving complex equation.
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Abdullah Alsayegh
am 22 Feb. 2022
Kommentiert: Walter Roberson
am 23 Feb. 2022
I want to create an equation in matlab and for each one variable that is unknown it can solve it directly.

For example I sign every variable to equal a number and solve for Cj.
Below is my coding to solve for Cj.
However I want to create an equation that let say if I have Cj known and I want to find H or y it can solve it without me having to creat another equation to solve for it
mdot = 115; % Source Strength g/s
U = 6.82; % Wind speed m/s
h = 62.6; % Stack Height (m)
Sh = 25.5; % Plume Rise Height (m)
H = h + Sh; % Effective Stack Height (m)
x = 2; % X location (m)
y = 0; % Y location (m)
z = 1.49; % Z location (m)
% Dispersion Coefficients
a = 68;
b = 0.894;
c = 44.5;
d = 0.516;
f = -13;
% Dispersion Coefficients
Sigma_Y = a * (x^b);
Sigma_Z = c * (x^d) + f;
% Exp
e1 = exp((-1/2)*((y/Sigma_Y)^2 + ((z-H)/Sigma_Z)^2));
e2 = exp((-1/2)*((y/Sigma_Y)^2 + ((z+H)/Sigma_Z)^2));
% Equation for Gaussian concentration for absorbing ground
Cj1 = (mdot * e1) / (2*pi*U*Sigma_Y*Sigma_Z);
Cj_Absorbing = Cj1 * 10^6;
% Equation for Gaussian concentration for reflective ground
Cj1 = (mdot * (e1 + e2)) / (2*pi*U*Sigma_Y*Sigma_Z);
Cj_Reflecting = Cj1 * 10^6;
5 Kommentare
Torsten
am 22 Feb. 2022
syms x y
expr = 3*x^2 + sin(y) == 0;
solx = solve(expr,x);
solx = double(subs(solx,y,0.3))
soly = solve(expr,y);
soly = double(subs(soly,x,0.2))
Akzeptierte Antwort
David Hill
am 22 Feb. 2022
Bearbeitet: David Hill
am 22 Feb. 2022
function Output = solveE(Input,guess)
%Input is an array [U,mdot,H,z,y,sigmaY,sigmaZ,Cj] of all values except nan
%for the variable you want to solve for.
syms U mdot H y z sigmaY sigmaZ Cj
eqn=mdot/(2*pi*U*sigmaY*sigmaZ)*exp(-0.5*((y/sigmaY)^2+((z-H)/sigmaZ)^2))-Cj==0;
switch find(isnan(Input))
case 1
Output=vpasolve(subs(eqn,[mdot,H,z,y,sigmaY,sigmaZ,Cj],Input(2:8)),U,guess);
case 2
Output=vpasolve(subs(eqn,[U,H,z,y,sigmaY,sigmaZ,Cj],Input([1,3:8])),mdot,guess);
case 3
Output=vpasolve(subs(eqn,[U,mdot,z,y,sigmaY,sigmaZ,Cj],Input([1:2,4:8])),H,guess);
case 4
Output=vpasolve(subs(eqn,[U,mdot,H,y,sigmaY,sigmaZ,Cj],Input([1:3,5:8])),z,guess);
case 5
Output=vpasolve(subs(eqn,[U,mdot,H,z,sigmaY,sigmaZ,Cj],Input([1:4,6:8])),y,guess);
case 6
Output=vpasolve(subs(eqn,[U,mdot,H,z,y,sigmaZ,Cj],Input([1:5,7:8])),sigmaY,guess);
case 7
Output=vpasolve(subs(eqn,[U,mdot,H,z,y,sigmaY,Cj],Input([1:6,8])),sigmaZ,guess);
case 8
Output=vpasolve(subs(eqn,[U,mdot,H,z,y,sigmaY,sigmaZ],Input(1:7)),Cj,guess);
end
6 Kommentare
Walter Roberson
am 23 Feb. 2022
? your equation has no x, and your code has no x, so I do not see where you would put x=1:1:10 ?
If you are doing symbolic work and you put a vector into vpasolve() or solve() then those functions need to solve the set of equations simultaneously . For example if you had 3*x == z and you wanted to know z and you put in x = [1, 2] then it would be trying to solve [3 == z, 6 == z] simultaneously , which would fail. vpasolve() and solve() are for simultaneous equations .
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Calculus finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

