an ode with arguements
Mostrar comentarios más antiguos
Here is my function file:
function dfdeta = mufun(eta,f,T)
pr = 1000;
dfdeta = [f(2); f(3); -f(1) * f(3); T(2); -pr*f(:,1)*T(2)];
end
and here is the code to call my function:
clear;
clc;
close all;
guessf = 0.4696;
guessT = .5;
[eta, f, T] = ode45(@mufun, [linspace(0,6,16)], [0; 0; guessf; 0; guessT]);
plot(eta,f);
blasius = table(eta, f(:,1), f(:,2), f(:,3), 'VariableNames',{'eta','f', 'f prime', 'f double prime'})
I was able to figure out the ode45 for just the eta and f variable, but now I have to have f defined in order to solve for T.
Respuestas (3)
James Tursa
el 9 de Abr. de 2024
Editada: James Tursa
el 9 de Abr. de 2024
Create a new function handle with your extra stuff. E.g.,
mufunT = @(eta,f) mufun(eta,f,guessT)
[eta, f] = ode45(mufunT, [linspace(0,6,16)], [0; 0; guessf]);
But, this assumes you know T in advance. What do you mean by "solve for T"?
1 comentario
Ray
el 9 de Abr. de 2024
Star Strider
el 9 de Abr. de 2024
0 votos
You have five differential equations and three initial conditions.
The initial conditions vector must have the same length as the number of differential equations.
Beyond that, you need to pass ‘T’ as an additional parameter:
[eta, f] = ode45(@(eta,f)mufun(eta,f,guessT), [linspace(0,6,16)], [0; 0; guessf]);
.
6 comentarios
Ray
el 9 de Abr. de 2024
Star Strider
el 9 de Abr. de 2024
I don’t udnerstand what you are doing.
If you define the initial conditions the way you described in your latest Comment (that should work with respect to your differential equations), you likely do not need to pass ‘T’ as an additional parameter. However, since I do not understand what you want to do, I will defer to you to determine that.
Ray
el 9 de Abr. de 2024
Star Strider
el 10 de Abr. de 2024
I can’t even guess what you want to do from what is currently posted.
James Tursa
el 10 de Abr. de 2024
@Ray Can you post an image of the differential equations you are trying to solve?
Ray
el 10 de Abr. de 2024
You have to define your vector of solution variables as
y(1) = f, y(2) = f', y(3) = f'', y(4) = T, y(5) = T'
and your function as
function dydeta = mufun(eta,y)
pr = 1000;
dydeta = [y(2); y(3); -y(1)*y(3)/2; y(5); -pr/2*y(1)*y(5)];
end
Further, your problem is a boundary value problem, not an initial value problem. Use "bvp4c", not "ode45" to solve.
Categorías
Más información sobre Programming en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!