How to convert strings to symbolic expressions?
조회 수: 24 (최근 30일)
이전 댓글 표시
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
Stephen23
2020년 11월 24일
" 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?
채택된 답변
Shubham Rawat
2020년 11월 24일
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'));
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!