ODE45 Help for Matlab: Fix Your Code Now

  • Context: MATLAB 
  • Thread starter Thread starter Mrs_ChemE
  • Start date Start date
  • Tags Tags
    Matlab Ode45
Click For Summary

Discussion Overview

The discussion revolves around troubleshooting a MATLAB script using the ODE45 function for solving ordinary differential equations (ODEs). Participants seek to identify issues in the code and suggest potential fixes, focusing on the correct implementation of function files and handles.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Homework-related

Main Points Raised

  • One participant shares their initial code and asks for help, indicating they were told it is incorrect.
  • Another participant suggests that a separate m-file for the function may be necessary and proposes using a function handle instead.
  • A participant mentions having a separate file for the function and expresses concern that their professor cannot run it, speculating that it may be due to file visibility issues.
  • Another participant advises that two m-files should be submitted: one for the function and one for the script, and suggests checking the MATLAB version compatibility.
  • There is a reiteration of the function handle approach as a potential solution, emphasizing that the function handle does not require the @ symbol when passed to ODE45.

Areas of Agreement / Disagreement

Participants express various viewpoints on how to structure the MATLAB files and troubleshoot the issue. There is no consensus on the exact cause of the problem or the best solution, as multiple suggestions are offered without agreement on a definitive fix.

Contextual Notes

Participants mention potential issues related to file paths and MATLAB versions, but these aspects remain unresolved and depend on specific user setups.

Mrs_ChemE
Messages
2
Reaction score
0
Matlab ODE45 Help??

function dy = prob_52 (t,y)
dy = cos(y) - (sin (t)*y);

[t,y] = ode45 (@prob_52,[0,1],0)
plot (t,y)
xlabel ('Time')
ylabel ('Function Value')

I was told my code is incorrect. Does anyone have suggestions on where I'm going wrong?

Thanks
 
Physics news on Phys.org


Not sure what's wrong with it. Probably you need a separate m-file for the function. If you need to include the function in your script try using function handle
fun =@(t,y) cos(y) - (sin (t)*y);

[t,y] = ode45 (fun,[0,1],0);
 


Thanks Matematikawan.

Right now, I have a separate file named "Prob_52" that has the function and then a file with:
[t,y] = ode45 (@prob_52,[0,1],0)
plot (t,y)
xlabel ('Time')
ylabel ('Function Value')

My professor is unable to run it, which makes it a fail. I'm wondering if this is because his computer can't "see" the Prob_52 file?

I will change it to the way you have it. Do you know how I can test it before I submit it? This is my last shot. If this one doesn't work, I fail my Chem E course. :(

When I save my files, etc, it's fine. But I *assume* that's because I have it "all" on my PC when I'm working.
 


I'm not an expert in matlab. Just able to run basic commands.

I think you need to submit two m-files to your professor. One is your function m-file and the other is your script that contain ode45. If that doesn't works also, please check that your prof. MATLAB is not of lower version than your matlab.

If you need to submit just one file then use the function handle as in my previous post.
 


Mrs_ChemE said:
Thanks Matematikawan.

Right now, I have a separate file named "Prob_52" that has the function and then a file with:
[t,y] = ode45 (@prob_52,[0,1],0)
plot (t,y)
xlabel ('Time')
ylabel ('Function Value')

My professor is unable to run it, which makes it a fail. I'm wondering if this is because his computer can't "see" the Prob_52 file?

That may be the case. MATLAB has an environment variable called the Path, which is the list of places it looks for files you tel it to run. The first place it looks is the Current Directory, which you set in the MATLAB gui or at the command line. If your prob_52.m file is not in MATLAB's current directory when you/your prof runs the script, it will not find the file.

Since your problem is only a first order equation, it is possible to handle it is to use an anonymous function, as matematikawan suggested.

Code:
prob_52 = @(t,y)cos(y) - (sin (t)*y);
[t,y] = ode45 (prob_52,[0,1],0)
plot (t,y)
xlabel ('Time')
ylabel ('Function Value')
Note here in the call to ODE45, you don't use the @ symbol, because prob_52 is of class function_handle, which is what ODE45 takes in.
 

Similar threads

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