Numerican Integration in Matlab
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Raj Patel
il 13 Ott 2020
Commentato: Star Strider
il 13 Ott 2020
I need some help solving numerical integration.
The integral is:
fun = @(x) (x .* (exp(x) ./ (exp(x) - 1).^2) .* ((asind(0.0003 .* T .* x)).^2 ./ sqrt(1 - (0.0003 .* T .* x).^2))); Note: asind = sin^-1(....) --> (I am not sure if this is correct)
C = @(T) integral(fun, 0, 517.39 ./ T);
The limit of x is from: x = 0 to x = (500/T)
T ranges from (1 - 1000) (which is T = logspace(0, 3))
Can anyone help me solve this integral. I want to plot a loglog plot of (C as a function of T). I am getting some errors which I am not able to overcome.
Thanks in advance.
Raj.
0 Commenti
Risposta accettata
Star Strider
il 13 Ott 2020
4 Commenti
Francesco Tricarico
il 13 Ott 2020
Modificato: Francesco Tricarico
il 13 Ott 2020
I was ridiculous to suggest you my tip, ahah, maybe my sixth sense was hoping for a precious observation and this is what i've got by you. Thanks, Star.
Recently i began to face "long time to run" code in MATLAB, and so i'm getting interested in code efficiency. Although you've been very clear, I've tried to get information about arrayfun directly from MATLAB to see how it works closely but i'm not able because it's a buitl-in function.
Bye,
Francesco
Star Strider
il 13 Ott 2020
See if the type or edit functions will let you see the inner workings of arrayfun. I never l;ooked, because I rarely use it.
As for ‘giving away tips’, most Answers here are minor variations on the same theme, and frequently identical code (in which case subsequent duplicate Answers are usually deleted by the author unless they offer unique perspectives). So using arayfun (intended to vectorise a for loop) occurred to me, however since the explicit for loop is almost always more efficient, I went with it instead in my Answer.
Più risposte (1)
Francesco Tricarico
il 13 Ott 2020
Dear Raj,
To improve code readibility, i suggest to use the the code form when you post a message in MATLAB Central.
Here's is the working version of your commands:
fun = @(x,T) (x .* (exp(x) ./ (exp(x) - 1).^2) .* ((asind(0.0003 .* T .* x)).^2 ./ sqrt(1 - (0.0003 .* T .* x).^2)));
C = @(T) integral(@(x)fun(x,T),0,517.39./T);
You forgot to declare T as a variable in the fun definition and in the C the problem is direct consequence of that oversight.
Bye,
Francesco
2 Commenti
Francesco Tricarico
il 13 Ott 2020
Ah,
to evaluating C for an array of values, i recommand to use arrayfun in that case, instead of redefine fun this aim.
For example, use that lines after the commands in my previous message:
X = logspace(0,3);
Y = arrayfun(C,X);
plot(X,Y)
Hope it works!
Vedere anche
Categorie
Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!