# How to solve the error while solving the given equation by ode45 or ode15s?

2 views (last 30 days)
RITIKA Jaiswal on 9 Apr 2023
Edited: VBBV on 9 Apr 2023
clear all;
clc;
%initialisation
delr=0.0004;
tspan =[0 50];
k= 0.8
rho = 0.5
a=2;
b=3;
c=4;
d=5;
y0=0.5;
i=2;j=2;
[t,T] = ode15s(@(t,T) dTdt, tspan, y0);
k4(i,j)= lambda(i,j)/r(i,j)*(delr)*(rho)*(Cp);
Tin=500;
function dTdt = odeFunc(t,T)
lambda(i,j)= 0.9*T;
r(i,j)=(j-1.5)*delr;
cp=a+b*T+c*T^2+d*T^3;
dTdt(i,j) = k*(Tin(i,j)-k*T(i,j))+(k4(i,j))*T(i,j+1))-k4(i,j)*T(i,j);
end
[SL: formatted code as code not text]
I am getting error message : Invalid expression. When calling a function or indexing a variable, use parentheses. Otherwise, check for mismatched delimiters.
how to solve such errors?

VBBV on 9 Apr 2023
Edited: VBBV on 9 Apr 2023
As the expression states an extra parenthesis is included in this line
dTdt(i,j) = k*(Tin(i,j)-k*T(i,j))+(k4(i,j))*T(i,j+1))-k4(i,j)*T(i,j);
%^ an extra parenthesis
try with below after removing that extra parenthesis
% try with the below
dTdt(i,j) = k*(Tin-T(i,j))+(k4(i,j)*T(i,j+1))-k4(i,j)*T(i,j);
##### 2 CommentsShow NoneHide None
RITIKA Jaiswal on 9 Apr 2023
@VBBV after trying your code I am getting error stating
Execution of script ode15s as a function is not supportedin that case what should i do?
VBBV on 9 Apr 2023
Edited: VBBV on 9 Apr 2023
Please rename your file to something other than standard Matlab functions e.g. ode15s which you are using already to evaluate the equations. It is not recommended by Matlab to use variable names and /or filenames in your program as standard Matlab function names since they conflict with the execution and becomes difficult to debug if program is big.
You can also refer the same from a standard Mathworks page where it's given in detail.

Steven Lord on 9 Apr 2023
There are several problems with this code.
clear all;
clc;
These two lines are unnecessary. Often people put them in because they've seen them in others' scripts but they can impede the ability to debug the code efficiently.
%initialisation
delr=0.0004;
tspan =[0 50];
k= 0.8
rho = 0.5
a=2;
b=3;
c=4;
d=5;
y0=0.5;
i=2;j=2;
[t,T] = ode15s(@(t,T) dTdt, tspan, y0);
Nowhere in this code do you define a function named dTdt that accepts 0 input arguments and returns the value of the right-hand side of your system of ODEs. If you want this to call your function named odeFunc with two inputs use either:
[t,T] = ode15s(@(t,T) odeFunc(t, T), tspan, y0);
or
[t,T] = ode15s(@odeFunc, tspan, y0);
k4(i,j)= lambda(i,j)/r(i,j)*(delr)*(rho)*(Cp);
Tin=500;
function dTdt = odeFunc(t,T)
lambda(i,j)= 0.9*T;
Nowhere in this function are variables i or j defined, so MATLAB will use the values returned by the i and j functions. This will error because you can't assign to the sqrt(-1)th row or column of a matrix. Yes, you defined the i and j variables before you called ode15s but that is a separate workspace. Since you didn't pass the i and j variables into the function call's workspace, they're not visible in the function call's workspace. [I'm ignoring nested functions and global variables for purpose of this explanation.]
r(i,j)=(j-1.5)*delr;
Again, since you didn't pass delr into this function's workspace, it's not visible. For ways to pass additional parameters into the function see this documentation page.
cp=a+b*T+c*T^2+d*T^3;
dTdt(i,j) = k*(Tin(i,j)-k*T(i,j))+(k4(i,j))*T(i,j+1))-k4(i,j)*T(i,j);
As @VBBV stated, you have an extra ) in your code. If you're editing this in the MATLAB Editor, Code Analyzer should have flagged this line. Indeed, it flags the second ) after T(i,j+1) as well as the other ) following it on the line.
end
As for the other message you listed, check that you haven't created a script file ode15s.m. If you have, rename it. The following command should only list files under matlabroot.
which -all ode15s

### Categories

Find more on Programming in Help Center and File Exchange

R2021a

### Community Treasure Hunt

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

Start Hunting!