How to convert strings to symbolic expressions?

25 Ansichten (letzte 30 Tage)
Renjie Xiong
Renjie Xiong am 21 Nov. 2020
Kommentiert: Renjie Xiong am 24 Nov. 2020
Here is a function I defined:
function [X]=Taylor(a,b,h,p,m)
n=(b-a)/h;
X=zeros(1,n+1);
X(1)=p;
A=sym(zeros(1,m));
syms t;
f=str2sym('t+x(t)^2');
A(1)=f;
df=f;
for i=2:m
df0=diff(df,t);
df=subs(df0,'diff(x(t),t)','t+x(t)^2');
A(i)=df;
end
A=subs(A,'x(t)','y');
for i=1:n
B=A;
B=subs(B,'y',X(i));
B=subs(B,'t',a+(i-1)*h);
C=zeros(1,m+1);
for k=1:m
C(k+1)=B(k)*h^k/factorial(k);
C(1)=C(1)+C(k+1);
end
X(i+1)=X(i)+C(1);
end
end
When I tried to use this function, however, I got an error message. Here is the error message:
>> [X]=Taylor(a,b,h,p,m)
Error using sym>convertChar (line 1537)
Character vectors and strings in the first argument can only specify a variable or number. To evaluate character vectors and strings representing symbolic expressions, use 'str2sym'.
Error in sym>tomupad (line 1253)
S = convertChar(x);
Error in sym (line 220)
S.s = tomupad(x);
Error in sym/subs>inputchk (line 249)
(length(sym(x))~=1 || length(sym(y))~=1) && isvarname(char(x))
Error in sym/subs>mupadsubs (line 154)
error(inputchk(X,Y));
Error in sym/subs (line 145)
G = mupadsubs(F,X,Y);
Error in Taylor (line 17)
df=subs(df0,'diff(x(t),t)','t+x(t)^2');
In line 17, I tried everything to fix this error, but none of them works. I guess I should convert my string expression to symbolic expression somewhere, but I don't know how to do. Please, can anyone help me? Thank you so much!
  1 Kommentar
Stephen23
Stephen23 am 24 Nov. 2020
" I guess I should convert my string expression to symbolic expression somewhere, but I don't know how to do."
The list "Create Symbolic Variables, Expressions, and Functions" here:
contains a link to this function:
Did you try it?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Shubham Rawat
Shubham Rawat am 24 Nov. 2020
Hi Renjie Xiong,
You are right the error which is thrown is due to the string, so you may change the string to symbolic expression by this,
df = subs(df0, str2sym('diff(x(t),t)'), str2sym('t+x(t)^2'));

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by