Undefined function 'ln' for input arguments of type 'double'. Sorry I kindly no idea what was wrong with the coding. Kindly help please ,Thanks a lots.

1 次查看(过去 30 天)
% NONLINEAR FINITE-DIFFERENCE ALGORITHM 11.4
%
% To approximate the solution to the nonlinear boundary-value problem
%
% Y'' = F(X,Y,Y'), A<=X<=B, Y(A) = ALPHA, Y(B) = BETA:
%
% INPUT: Endpoints A,B; boundary conditions ALPHA, BETA;
% integer N; tolerance TOL; maximum number of iterations M.
%
% OUTPUT: Approximations W(I) TO Y(X(I)) for each I=0,1,...,N+1
% or a message that the maximum number of iterations was
% exceeded.
syms('OK', 'AA', 'BB', 'ALPHA', 'BETA', 'N', 'TOL', 'NN');
syms('FLAG', 'NAME', 'OUP', 'N1', 'H', 'I', 'W', 'K', 'X');
syms('T', 'A', 'B', 'D', 'C', 'L', 'U', 'Z', 'V');
syms('VMAX', 'J', 'x', 'y', 'z', 's');
TRUE = 1;
FALSE = 0;
fprintf(1,'This is the Nonlinear Finite-Difference Method.\n');
% fprintf(1,'Input the function F(X,Y,Z) in terms of x, y, z\n');
% fprintf(1,'followed by the partial of F with respect to y on \n');
% fprintf(1,'the next line and the partial of F with respect \n');
% fprintf(1,'to z = y-prime on the third line. \n');
% fprintf(1,'For example: (32+2*x^3-y*z)/8 \n');
% fprintf(1,' -z/8 \n');
% fprintf(1,' -y/8 \n');
% s = input(' ');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Input F which represents the second order ODE
F = inline('y*log(y))','x','y','z');
%s = input(' ');
%Input FY which represents the partial derivative of F
FY = inline('log(y)+y','x','y','z');
%s = input(' ');
%Input FYP which represents the partial derivative of F'
FYP = inline('1','x','y','z');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OK = FALSE;
while OK == FALSE
fprintf(1,'Input left and right endpoints on separate lines.\n');
AA = input(' ');
BB = input(' ');
if AA >= BB
fprintf(1,'Left endpoint must be less than right endpoint.\n');
else
OK = TRUE;
end;
end;
fprintf(1,'Input Y( %.10e).\n', AA);
ALPHA = input(' ');
fprintf(1,'Input Y( %.10e).\n', BB);
BETA = input(' ');
OK = FALSE;
while OK == FALSE
fprintf(1,'Input an integer > 1 for the number of\n');
fprintf(1,'subintervals. Note that h = (b-a)/(n+1)\n');
N = input(' ');
if N <= 1
fprintf(1,'Number must exceed 1.\n');
else
OK = TRUE;
end;
end;
OK = FALSE;
while OK == FALSE
fprintf(1,'Input Tolerance.\n');
TOL = input(' ');
if TOL <= 0
fprintf(1,'Tolerance must be positive.\n');
else
OK = TRUE;
end;
end;
OK = FALSE;
while OK == FALSE
fprintf(1,'Input maximum number of iterations.\n');
NN = input(' ');
if NN <= 0
fprintf(1,'Must be positive integer.\n');
else
OK = TRUE;
end;
end;
if OK == TRUE
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text File\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'NONLINEAR FINITE-DIFFERENCE METHOD\n\n');
fprintf(OUP, ' I X(I) W(I)\n');
% STEP 1
A = zeros(1,N);
B = zeros(1,N);
C = zeros(1,N);
D = zeros(1,N);
W = zeros(1,N);
V = zeros(1,N);
Z = zeros(1,N);
U = zeros(1,N);
L = zeros(1,N);
N1 = N-1;
H = (BB-AA)/(N+1);
% STEP 2
for I = 1 : N
W(I) = ALPHA+I*H*(BETA-ALPHA)/(BB-AA);
end;
% STEP 3
K = 1;
% STEP 4
while K <= NN && OK == TRUE
% STEP 5
X = AA+H;
T = (W(2)-ALPHA)/(2*H);
A(1) = 2+H*H*FY(X,W(1),T);
B(1) = -1+H*FYP(X,W(1),T)/2;
D(1) = -(2*W(1)-W(2)-ALPHA+H*H*F(X,W(1),T));
% STEP 6
for I = 2 : N1
X = AA+I*H;
T = (W(I+1)-W(I-1))/(2*H);
A(I) = 2+H*H*FY(X,W(I),T);
B(I) = -1+H*FYP(X,W(I),T)/2;
C(I) = -1-H*FYP(X,W(I),T)/2;
D(I) = -(2*W(I)-W(I+1)-W(I-1)+H*H*F(X,W(I),T));
end;
% STEP 7
X = BB - H;
T = (BETA-W(N-1))/(2*H);
A(N) = 2+H*H*FY(X,W(N),T);
C(N) = -1-H*FYP(X,W(N),T)/2;
D(N) = -(2*W(N)-W(N-1)-BETA+H*H*F(X,W(N),T));
% STEP 8
% STEPS 8 through 12 solve a tridiagonal linear system using
% Crout reduction
L(1) = A(1);
U(1) = B(1)/A(1);
Z(1) = D(1)/L(1);
% STEP 9
for I = 2 : N1
L(I) = A(I)-C(I)*U(I-1);
U(I) = B(I)/L(I);
Z(I) = (D(I)-C(I)*Z(I-1))/L(I);
end;
% STEP 10
L(N) = A(N)-C(N)*U(N-1);
Z(N) = (D(N)-C(N)*Z(N-1))/L(N);
% STEP 11
V(N) = Z(N);
VMAX = abs(V(N));
W(N) = W(N)+V(N);
% STEP 12
for J = 1 : N1
I = N-J;
V(I) = Z(I)-U(I)*V(I+1);
W(I) = W(I)+V(I);
if abs(V(I)) > VMAX
VMAX = abs(V(I));
end;
end;
% STEP 13
% test for accuracy
if VMAX <= TOL
I = 0;
fprintf(OUP, '%3d %13.8f %13.8f\n', I, AA, ALPHA);
for I = 1 : N
X = AA+I*H;
fprintf(OUP, '%3d %13.8f %13.8f\n', I, X, W(I));
end;
I = N+1;
fprintf(OUP, '%3d %13.8f %13.8f\n', I, BB, BETA);
OK = FALSE;
else
% STEP 18
K = K+1;
end;
end;
% STEP 19
if K > NN
fprintf(OUP, 'No convergence in %d iterations\n', NN);
end;
end;
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end:
command window
This is the Nonlinear Finite-Difference Method.
Input left and right endpoints on separate lines.
0
pi/2
Input Y( 0.0000000000e+00).
1
Input Y( 1.5707963268e+00).
exp(1)
Input an integer &gt; 1 for the number of
subintervals. Note that h = (b-a)/(n+1)
9
Input Tolerance.
10^-4
Input maximum number of iterations.
4
Choice of output method:
1. Output to screen
2. Output to text File
Please enter 1 or 2.
1
NONLINEAR FINITE-DIFFERENCE METHOD
I X(I) W(I)
Error using inlineeval (line 14)
Error in inline expression ==> y*log(y))
Error: Unbalanced or unexpected parenthesis or bracket.
Error in inline/subsref (line 23)
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
  1 个评论
Stephen23
Stephen23 2020-5-28
Note that the inline documentation states in bold at the very top of the page:
"inline is not recommended. Use Anonymous Functions instead."
It is not recommended to use very outdated and almost obsolete inline functions. As the documentation clearly states, you should be using anonymous functions and function handles. Function handles are much better to work with.

请先登录,再进行评论。

采纳的回答

Stephan
Stephan 2020-5-28
编辑:Stephan 2020-5-28
Change:
F = inline('y*log(y))','x','y','z');
to:
F = inline('y*log(y)','x','y','z');
also remove the error on the last line by changing:
end:
to:
end
Btw:
you can remove semicolon from all end commands - no need for this.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Function Creation 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by