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

조회 수: 1 (최근 30일)
RITIKA Jaiswal
RITIKA Jaiswal 2023년 4월 9일
편집: VBBV 2023년 4월 9일
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?

답변 (2개)

VBBV
VBBV 2023년 4월 9일
편집: VBBV 2023년 4월 9일
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
RITIKA Jaiswal
RITIKA Jaiswal 2023년 4월 9일
@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
VBBV 2023년 4월 9일
편집: VBBV 2023년 4월 9일
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.
While renaming the filenames please follow these essential rules given in this page
You can also refer the same from a standard Mathworks page where it's given in detail.

댓글을 달려면 로그인하십시오.


Steven Lord
Steven Lord 2023년 4월 9일
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

카테고리

Help CenterFile Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by