Solving complex equation.

5 ビュー (過去 30 日間)
Abdullah Alsayegh
Abdullah Alsayegh 2022 年 2 月 22 日
コメント済み: Walter Roberson 2022 年 2 月 23 日
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 件のコメント
Abdullah Alsayegh
Abdullah Alsayegh 2022 年 2 月 22 日
its will solve as an equation can it solve it as a number if I give all the variables = number and find one variable?
Torsten
Torsten 2022 年 2 月 22 日
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))

サインインしてコメントする。

採用された回答

David Hill
David Hill 2022 年 2 月 22 日
編集済み: David Hill 2022 年 2 月 22 日
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 件のコメント
Abdullah Alsayegh
Abdullah Alsayegh 2022 年 2 月 23 日
編集済み: Abdullah Alsayegh 2022 年 2 月 23 日
Thank you so much for helping me on this it worked so perfect.
One quick question, if i need to set up my variable x to be x = 1:1:10 can it work on this function? because I am planning to plot this to >> plot (x,y) however the answer showing for y is >> Empty sym: 0-by-1
the plot should be similar to this picture
Walter Roberson
Walter Roberson 2022 年 2 月 23 日
? 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 .

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCalculus についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by