Fortran programming to solve ODEs

Click For Summary
SUMMARY

This discussion focuses on solving the first-order differential equation \(\frac{dy}{dy} = -16 t^3 y^2\) using the second-order Adams-Bashforth method in Fortran. The provided Fortran program initializes parameters, computes the solution iteratively, and suggests outputting results to a CSV file for plotting in MATLAB. The function for the derivative is also defined, allowing for further analysis of the solution.

PREREQUISITES
  • Understanding of Fortran programming (version 90 or later)
  • Familiarity with numerical methods, specifically the Adams-Bashforth method
  • Knowledge of differential equations, particularly first-order types
  • Basic experience with MATLAB for data visualization
NEXT STEPS
  • Learn how to implement the Runge-Kutta method in Fortran for comparison
  • Research how to format data output in CSV using Fortran
  • Explore MATLAB's readmatrix() function for importing CSV files
  • Study MATLAB's plot() function for visualizing mathematical data
USEFUL FOR

Mathematicians, engineers, and programmers interested in numerical analysis, particularly those working with differential equations and data visualization in MATLAB.

ra_forever8
Messages
106
Reaction score
0
Consider the first order differential equation
\[\frac{dy}{dy} = f(t,y) = -16 t^3 y^2\]
with initial condition $y(0)=1$

Using second order Adams-Bashforth method, write a Fortran programming to generate an approximate solution to the problem.

Solution

Fortran:
Program adams
Implicit None 
Real, allocatable :: $y(:),t(:)$
 Real:: yo, tend, h, k1,k2
Integer:: NI, i
Real,external ::f

!Asking to enter the initial vaule of yo, final time and numbers of step
Print*,  'Enter yo,Tend,NI'  
read*, yo,Tend,NI
h= Tend/NI
Print*, 'This gives stepsize h=',h 
allocate (t(0:NI), y(0:NI))

!Initial Conditions
t(0)=0
y(0) = 1

!After using runge kutta method, found out k1 =0 and k2= -16h^3,
   k1=0
   k2= -16*h**3

!we know that y(n+1) =y(n) + h/2(k1+K2)  at n=0
y(1) = y(0) + h/2 *( k1+ k2) 

!  Loop through the number of steps to calculate the following at each step  
do i=2, NI  
  t(i)= i*h  
write(10,*) i, t(i),t(i-1) 
!Second order Adam bashforth for all n 
  y(i)= y(i-1) + (h/2)*(3*f(t(i-1), y(i - 1))- f(t(i-2), y(i-2))) 
 end do
 end program adams

!declaring function
   Real Function f(t,y)
   Real:: t
   Real:: y
   f = - 16*t**3*y**2
   Return   
   End Function f

Now i want to plot this partial derivative ∂f/∂y = |-32 (4t^4 +1)^-1 t^3| against t using fortran to generate a file or something for the MATLAB to plot the graph.
Can someone help me
 
Last edited by a moderator:
Physics news on Phys.org
If you write your Fortran output as a CSV file then a MATLAB script can import it via the readmatrix() function and then one can plot using MATLAB's plot() function.

https://www.mathworks.com/help/matlab/ref/readmatrix.html

A CSV file is basically a text file with each line representing a row in a spreadsheet and each line containing comma separated (or other character like | or tab) lists of numbers ala 1,2,3,4,5

As an example, y=x^2 in CSV format might look like this:

Code:
1,1
2,4
3,9
4,16
5,25
...

https://www.mathworks.com/help/matlab/ref/plot.html

This should give you enough info to write a simple plot program in MATLAB.
 
  • Like
Likes   Reactions: Greg Bernhardt

Similar threads

  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 7 ·
Replies
7
Views
4K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K