Can I complete a Gaussian equation using indeces?

1 visualización (últimos 30 días)
Christopher Keeter
Christopher Keeter el 11 de Mzo. de 2022
Respondida: Shivam Lahoti el 29 de Dic. de 2023
Howdy, all.
I've attached all my code for a project involving the Panel Method for aero/hydrodynamics. Everything is working fine until I get to the last few lines (ignoring graphing code):
Essentially, I started writing with indeces, which was probably a mistake. The Gaussian requires the matrices [A][x]=[b] be rearranged to give [x] = [A]\[b]. In my code, [A] is represented by Aindex(i,j) and [b] is Bindex(i,j). [x] would be Lambda(i,j), lines 42-43.
All values prior to executing Lambda(i,j) give correct values. I'm fairly certain the problem is trying to treat indeces like matrices. I've tried every division operator I know of (./, \, etc.) and I've tried inverting both indeces (shotgunning).
Is there a way I can compute the Gaussian without having to start from scratch with matrices?
Final correct values for lambda are given:
such that the correct value of lambda is the numerical term multiplied times 10. Appreciate your help!

Respuestas (1)

Shivam Lahoti
Shivam Lahoti el 29 de Dic. de 2023
Hi Christopher,
I can understand that you want to calculate Gaussian without having to start from scratch with matrices. There are some issues in your code that need to be addressed:
  • The inner loop in your last for-loop should be over j, not i again.
  • You are trying to divide Aindex by Bindex elementwise, which is not correct for solving the system of equations.
  • Lambda should be a vector, not a matrix since it represents the unknowns [x] in the system.
Here is a corrected version of the last part of your code:
% The system matrix and right-hand side vector
Aindex = zeros(n, n);
Bindex = zeros(n, 1);
% Filling the system matrix Aindex and the vector Bindex
for i= 1:n
for j= 1:n
Aindex(i,j)= I(i,j)/(2*pi);
end
Bindex(i)= (-Vinf)*cos(Beta(i));
end
% Solving for the unknowns Lambda
Lambda = Aindex\Bindex;
% Calculating Check, V, and Pressure Coefficient
Check = Lambda/Vinf;
V = zeros(n, 1);
PressCoeff = zeros(n, 1);
for i= 1:n
sumJ = 0;
for j= 1:n
sumJ = sumJ + (Lambda(j)/(2*pi))*J(i,j);
end
V(i) = sumJ + (Vinf*sin(Beta(i)));
PressCoeff(i) = 1 - ((V(i)/Vinf)^2);
end
% Plotting
plot(PressCoeff,'b')
set(gca,'XTick',0:pi/2:2*pi)
set(gca,'XTickLabel',{'0','pi/2','pi','3*pi/2','2*pi'})
This corrected code first constructs the system matrix Aindex and the right-hand side vector Bindex. Then, it solves for Lambda using the backslash operator. After that, it calculates the velocity V and pressure coefficient PressCoeff using the computed Lambda.
I hope this was helpful.
Regards,
Shivam Lahoti.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by